Browse Source

Porcelain scripts: Rewrite cryptic "needs update" error message

Although Git interally has the facility to differentiate between
porcelain and plubmbing commands and appropriately print errors,
several shell scripts invoke plubming commands triggering cryptic
plumbing errors to be displayed on a porcelain interface. This patch
replaces the "needs update" message in git-pull and git-rebase, when
`git update-index` is run, with a more friendly message.

Reported-by: Joshua Jensen <jjensen@workspacewhiz.com>
Reported-by: Thore Husfeldt <thore.husfeldt@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Ramkumar Ramachandra 14 years ago committed by Junio C Hamano
parent
commit
92c62a3f4f
  1. 5
      git-pull.sh
  2. 14
      git-rebase--interactive.sh
  3. 14
      git-rebase.sh
  4. 29
      git-sh-setup.sh

5
git-pull.sh

@ -201,10 +201,7 @@ test true = "$rebase" && {
die "updating an unborn branch with changes added to the index" die "updating an unborn branch with changes added to the index"
fi fi
else else
git update-index --ignore-submodules --refresh && require_clean_work_tree "pull with rebase" "Please commit or stash them."
git diff-files --ignore-submodules --quiet &&
git diff-index --ignore-submodules --cached --quiet HEAD -- ||
die "refusing to pull with rebase: your working tree is not up-to-date"
fi fi
oldremoteref= && oldremoteref= &&
. git-parse-remote && . git-parse-remote &&

14
git-rebase--interactive.sh

@ -153,14 +153,6 @@ run_pre_rebase_hook () {
fi fi
} }


require_clean_work_tree () {
# test if working tree is dirty
git rev-parse --verify HEAD > /dev/null &&
git update-index --ignore-submodules --refresh &&
git diff-files --quiet --ignore-submodules &&
git diff-index --cached --quiet HEAD --ignore-submodules -- ||
die "Working tree is dirty"
}


ORIG_REFLOG_ACTION="$GIT_REFLOG_ACTION" ORIG_REFLOG_ACTION="$GIT_REFLOG_ACTION"


@ -557,7 +549,7 @@ do_next () {
exit "$status" exit "$status"
fi fi
# Run in subshell because require_clean_work_tree can die. # Run in subshell because require_clean_work_tree can die.
if ! (require_clean_work_tree) if ! (require_clean_work_tree "rebase")
then then
warn "Commit or stash your changes, and then run" warn "Commit or stash your changes, and then run"
warn warn
@ -768,7 +760,7 @@ first and then run 'git rebase --continue' again."


record_in_rewritten "$(cat "$DOTEST"/stopped-sha)" record_in_rewritten "$(cat "$DOTEST"/stopped-sha)"


require_clean_work_tree require_clean_work_tree "rebase"
do_rest do_rest
;; ;;
--abort) --abort)
@ -866,7 +858,7 @@ first and then run 'git rebase --continue' again."


comment_for_reflog start comment_for_reflog start


require_clean_work_tree require_clean_work_tree "rebase" "Please commit or stash them."


if test ! -z "$1" if test ! -z "$1"
then then

14
git-rebase.sh

@ -416,19 +416,7 @@ else
fi fi
fi fi


# The tree must be really really clean. require_clean_work_tree "rebase" "Please commit or stash them."
if ! git update-index --ignore-submodules --refresh > /dev/null; then
echo >&2 "cannot rebase: you have unstaged changes"
git diff-files --name-status -r --ignore-submodules -- >&2
exit 1
fi
diff=$(git diff-index --cached --name-status -r --ignore-submodules HEAD --)
case "$diff" in
?*) echo >&2 "cannot rebase: your index contains uncommitted changes"
echo >&2 "$diff"
exit 1
;;
esac


if test -z "$rebase_root" if test -z "$rebase_root"
then then

29
git-sh-setup.sh

@ -145,6 +145,35 @@ require_work_tree () {
die "fatal: $0 cannot be used without a working tree." die "fatal: $0 cannot be used without a working tree."
} }


require_clean_work_tree () {
git rev-parse --verify HEAD >/dev/null || exit 1
git update-index -q --ignore-submodules --refresh
err=0

if ! git diff-files --quiet --ignore-submodules
then
echo >&2 "Cannot $1: 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."
else
echo >&2 "Additionally, your index contains uncommitted changes."
fi
err=1
fi

if [ $err = 1 ]
then
test -n "$2" && echo >&2 "$2"
exit 1
fi
}

get_author_ident_from_commit () { get_author_ident_from_commit () {
pick_author_script=' pick_author_script='
/^author /{ /^author /{

Loading…
Cancel
Save