Skip to content

Commit

Permalink
Porcelain scripts: Rewrite cryptic "needs update" error message
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ramkumar Ramachandra authored and Junio C Hamano committed Oct 28, 2010
1 parent ca20906 commit 92c62a3
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 28 deletions.
5 changes: 1 addition & 4 deletions git-pull.sh
Original file line number Diff line number Diff line change
Expand Up @@ -201,10 +201,7 @@ test true = "$rebase" && {
die "updating an unborn branch with changes added to the index"
fi
else
git update-index --ignore-submodules --refresh &&
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"
require_clean_work_tree "pull with rebase" "Please commit or stash them."
fi
oldremoteref= &&
. git-parse-remote &&
Expand Down
14 changes: 3 additions & 11 deletions git-rebase--interactive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -153,14 +153,6 @@ run_pre_rebase_hook () {
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"

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

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

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

comment_for_reflog start

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

if test ! -z "$1"
then
Expand Down
14 changes: 1 addition & 13 deletions git-rebase.sh
Original file line number Diff line number Diff line change
Expand Up @@ -416,19 +416,7 @@ else
fi
fi

# The tree must be really really clean.
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
require_clean_work_tree "rebase" "Please commit or stash them."

if test -z "$rebase_root"
then
Expand Down
29 changes: 29 additions & 0 deletions git-sh-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,35 @@ require_work_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 () {
pick_author_script='
/^author /{
Expand Down

0 comments on commit 92c62a3

Please sign in to comment.