diff --git a/tools/lib/git-tools.bash b/tools/lib/git-tools.bash index 0aa0f6ad8dc62..8351ead33a3d4 100644 --- a/tools/lib/git-tools.bash +++ b/tools/lib/git-tools.bash @@ -6,30 +6,28 @@ # this function has only needed one edit since then, adding localization # with gettext, which we can omit. require_clean_work_tree () { + local action="$1" message="${2-}" + git rev-parse --verify HEAD >/dev/null || exit 1 git update-index -q --ignore-submodules --refresh - err=0 + local err=0 - if ! git diff-files --quiet --ignore-submodules - then - echo >&2 "Cannot $1: You have unstaged changes." + if ! git diff-files --quiet --ignore-submodules; then + echo >&2 "Cannot $action: You have unstaged changes." err=1 fi - if ! git diff-index --cached --quiet --ignore-submodules HEAD -- - then - if [ $err = 0 ] - then - echo >&2 "Cannot $1: Your index contains uncommitted changes." + if ! git diff-index --cached --quiet --ignore-submodules HEAD --; then + if [ $err = 0 ]; then + echo >&2 "Cannot $action: Your index contains uncommitted changes." else echo >&2 "Additionally, your index contains uncommitted changes." fi err=1 fi - if [ $err = 1 ] - then - test -n "$2" && echo >&2 "$2" + if [ $err = 1 ]; then + [ -n "$message" ] && echo >&2 "$message" exit 1 fi }