On Tue, 8 Feb 2011, Martin von Zweigbergk wrote: > On Tue, 8 Feb 2011, Jonathan Nieder wrote: > > > Martin von Zweigbergk wrote: > > > On Tue, 8 Feb 2011, Sverre Rabbelier wrote: > > > > >> I particularly like that you explain to the user clearly what they > > >> have to do to make this work (e.g., configure the upstream). Nice. > > > > > > Thanks, but that was stolen from git-pull.sh ;-) > > > > Doesn't that suggest it might belong in some common git-upstream--lib.sh > > (or git-sh-setup.sh)? > > Maybe it does... Maybe something like this on top? I put it in git-parse-remote.sh for now. There were some related functions there, so maybe it's not so bad. Should I put it there (and rename to git-upstream--lib.sh?), in new git-upstream--lib.sh or in git-sh-setup.sh. Changes to the text compared to before: * "remote branch" became "upstream branch", even for git pull * "You asked me to pull" became "You asked me to merge" or "You asked me to rebase", even for git pull * Now printed to stderr, because I simply didn't think about it. Good or bad? What do you think? -- 8< -- diff --git a/git-parse-remote.sh b/git-parse-remote.sh index 1cc2ba6..ff58d5b 100644 --- a/git-parse-remote.sh +++ b/git-parse-remote.sh @@ -99,3 +99,40 @@ get_remote_merge_branch () { esac esac } + +error_on_missing_default_upstream () { + op_type="$1" + op_prep="$2" + example="$3" + documentation="$4" + branch_name=$(git symbolic-ref -q HEAD) + if test -z "$branch_name" + then + die "You are not currently on a branch, so I cannot use any +'branch.<branchname>.merge' in your configuration file. +Please specify which upstream branch you want to use on the command +line and try again (e.g. '$example'). +See $documentation for details." + else + echo &2> "You asked me to $op_type without telling me which branch you +want to $op_type $op_prep, and 'branch.${branch_name#refs/heads/}.merge' in +your configuration file does not tell me, either. Please +specify which branch you want to use on the command line and +try again (e.g. '$example'). +See $documentation for details. + +If you often $op_type $op_prep the same branch, you may want to +use something like the following in your configuration file: + [branch \"${branch_name#refs/heads/}\"] + remote = <nickname> + merge = <remote-ref>" + test rebase = "$op_type" && + echo &2> " rebase = true" + die " + [remote \"<nickname>\"] + url = <url> + fetch = <refspec> + +See git-config(1) for details." + fi +} diff --git a/git-pull.sh b/git-pull.sh index eb87f49..8ec1d3d 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -163,34 +163,10 @@ error_on_no_merge_candidates () { echo "You asked to pull from the remote '$1', but did not specify" echo "a branch. 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.<branchname>.merge' in your configuration file." - echo "Please specify which remote branch you want to use on the command" - echo "line and try again (e.g. 'git pull <repository> <refspec>')." - echo "See git-pull(1) for details." - elif [ -z "$upstream" ]; then - echo "You asked me to pull without telling me which branch you" - echo "want to $op_type $op_prep, and 'branch.${curr_branch}.merge' in" - echo "your configuration file does not tell me, either. Please" - echo "specify which branch you want to use on the command line and" - echo "try again (e.g. 'git pull <repository> <refspec>')." - echo "See git-pull(1) for details." - echo - echo "If you often $op_type $op_prep the same branch, you may want to" - echo "use something like the following in your configuration file:" - echo - echo " [branch \"${curr_branch}\"]" - echo " remote = <nickname>" - echo " merge = <remote-ref>" - test rebase = "$op_type" && - echo " rebase = true" - echo - echo " [remote \"<nickname>\"]" - echo " url = <url>" - echo " fetch = <refspec>" - echo - echo "See git-config(1) for details." + elif [ -z "$curr_branch" -o -z "$upstream" ]; then + . git-parse-remote + error_on_missing_default_upstream $op_type $op_prep \ + "git pull <repository> <refspec>" "git-pull(1)" else echo "Your configuration specifies to $op_type $op_prep the ref '${upstream#refs/heads/}'" echo "from the remote, but no such ref was fetched." diff --git a/git-rebase.sh b/git-rebase.sh index 5975642..8b39cab 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -144,25 +144,6 @@ run_pre_rebase_hook () { fi } -error_on_missing_default_upstream () { - branch_name=$(git symbolic-ref -q HEAD) - if test -z "$branch_name" - then - die "You are not currently on a branch, so I cannot use any -'branch.<branchname>.merge' in your configuration file. -Please specify which upstream branch you want to use on the command -line and try again (e.g. 'git rebase <upstream branch>'). -See git-rebase(1) for details." - else - die "You asked me to rebase without telling me which branch you -want to rebase against, and 'branch.${branch_name#refs/heads/}.merge' in -your configuration file does not tell me, either. Please -specify which branch you want to use on the command line and -try again (e.g. 'git rebase <upstream branch>'). -See git-rebase(1) for details." - fi -} - test -f "$apply_dir"/applying && die 'It looks like git-am is in progress. Cannot rebase.' @@ -381,8 +362,13 @@ if test -z "$rebase_root" then case "$#" in 0) - upstream_name=$(git rev-parse --symbolic-full-name --verify -q \ - @{upstream}) || error_on_missing_default_upstream + if ! upstream_name=$(git rev-parse --symbolic-full-name \ + --verify -q @{upstream}) + then + . git-parse-remote + error_on_missing_default_upstream "rebase" "against" \ + "git rebase <upstream branch>" "git-rebase(1)" + fi ;; *) upstream_name="$1" shift -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html