X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=git-pull.sh;h=fc78592ae04283db2af633ec080f99c6404ceda7;hb=28754ab5f0ce9b4f6ca1641c3e10e2c68bd9b3fc;hp=0f24182974fe2040c950b846decf360c1c22dbb1;hpb=bba287531b3a845faa032a8fef3e6d70d185c89b;p=git.git diff --git a/git-pull.sh b/git-pull.sh index 0f2418297..fc78592ae 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -89,14 +89,24 @@ error_on_no_merge_candidates () { done curr_branch=${curr_branch#refs/heads/} - - if [ -z "$curr_branch" ]; then + upstream=$(git config "branch.$curr_branch.merge") + remote=$(git config "branch.$curr_branch.remote") + + if [ $# -gt 1 ]; then + echo "There are no candidates for merging in the refs that you just fetched." + echo "Generally this means that you provided a wildcard refspec which had no" + echo "matches on the remote end." + elif [ $# -gt 0 ] && [ "$1" != "$remote" ]; then + echo "You asked to pull from the remote '$1', but did not specify" + echo "a branch to merge. Because this is not the default configured remote" + echo "for your current branch, you must specify a branch on the command line." + elif [ -z "$curr_branch" ]; then echo "You are not currently on a branch, so I cannot use any" echo "'branch..merge' in your configuration file." echo "Please specify which branch you want to merge on the command" echo "line and try again (e.g. 'git pull ')." echo "See git-pull(1) for details." - else + elif [ -z "$upstream" ]; then echo "You asked me to pull without telling me which branch you" echo "want to merge with, and 'branch.${curr_branch}.merge' in" echo "your configuration file does not tell me either. Please" @@ -114,16 +124,27 @@ error_on_no_merge_candidates () { echo " remote..fetch = " echo echo "See git-config(1) for details." + else + echo "Your configuration specifies to merge the ref '${upstream#refs/heads/}' from the" + echo "remote, but no such ref was fetched." fi exit 1 } test true = "$rebase" && { - 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" - + if ! git rev-parse -q --verify HEAD >/dev/null + then + # On an unborn branch + if test -f "$GIT_DIR/index" + then + 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" + fi oldremoteref= && . git-parse-remote && remoteref="$(get_remote_merge_branch "$@" 2>/dev/null)" && @@ -169,14 +190,7 @@ merge_head=$(sed -e '/ not-for-merge /d' \ case "$merge_head" in '') - case $? in - 0) error_on_no_merge_candidates "$@";; - 1) echo >&2 "You are not currently on a branch; you must explicitly" - echo >&2 "specify which branch you wish to merge:" - echo >&2 " git pull " - exit 1;; - *) exit $?;; - esac + error_on_no_merge_candidates "$@" ;; ?*' '?*) if test -z "$orig_head"