git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Confusing git pull error message
@ 2009-09-12 20:01 John Tapsell
  2009-09-12 21:11 ` Jeff King
  0 siblings, 1 reply; 28+ messages in thread
From: John Tapsell @ 2009-09-12 20:01 UTC (permalink / raw)
  To: Git List

Hi,

  Because of another bug in git https, sometimes "git ls-remote
origin" only sees a small subset of the actually available branches.
This lasts until someone using git:// makes a commit.

  So anyway, I tried to do a "git pull" and it gives me the misleading error:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either.  Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details on the refspec.

If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:

    branch.master.remote = <nickname>
    branch.master.merge = <remote-ref>
    remote.<nickname>.url = <url>
    remote.<nickname>.fetch = <refspec>

See git-config(1) for details.



But the actual problem is that "master" doesn't exist on origin.  So
basically I _have_ told it what branch.master.remote and
branch.master.merge etc is, it's just that they don't appear to exist.

Thanks,

John

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-12 20:01 Confusing git pull error message John Tapsell
@ 2009-09-12 21:11 ` Jeff King
  2009-09-12 21:31   ` John Tapsell
                     ` (2 more replies)
  0 siblings, 3 replies; 28+ messages in thread
From: Jeff King @ 2009-09-12 21:11 UTC (permalink / raw)
  To: John Tapsell; +Cc: Junio C Hamano, Git List

On Sat, Sep 12, 2009 at 11:01:45PM +0300, John Tapsell wrote:

>   So anyway, I tried to do a "git pull" and it gives me the misleading error:
> 
> You asked me to pull without telling me which branch you
> want to merge with, and 'branch.master.merge' in
> your configuration file does not tell me either.  Please
> name which branch you want to merge on the command line and
> try again (e.g. 'git pull <repository> <refspec>').
> See git-pull(1) for details on the refspec.
>
> [...]
>
> But the actual problem is that "master" doesn't exist on origin.  So
> basically I _have_ told it what branch.master.remote and
> branch.master.merge etc is, it's just that they don't appear to exist.

Ugh. That is horrible. It's an artifact of the (IMHO) brain-dead way
that pull and fetch interact.

Pull doesn't actually look at the configuration at all. It just calls
fetch, and then fetch writes out a file containing the refs it pulled,
some of which may be marked with a magic "not-for-merge" flag. So we see
that nothing is available for merging and guess that it must not have
been configured. Which is of course wrong in your case; it just didn't
exist.

I think it is enough for git-pull to just check whether the config
exists, and if so, guess that the ref was simply not fetched. IOW,
this:

-- >8 --
Subject: [PATCH] pull: make "nothing to merge" error message more accurate

When pull sees that no branches are available for merge and
that we have a current branch, it assumes the problem is
that we had no branch.*.merge configuration. But it may also
be the case that we simply didn't pull the configured ref
(probably because it doesn't exist). Let's distinguish those
two cases.

Signed-off-by: Jeff King <peff@peff.net>
---
 git-pull.sh |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/git-pull.sh b/git-pull.sh
index 0bbd5bf..4ddd537 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -89,6 +89,9 @@ error_on_no_merge_candidates () {
 	done
 
 	curr_branch=${curr_branch#refs/heads/}
+	upstream=`git config "branch.$curr_branch.merge" ||
+		  git config "branch.$curr_branch.rebase"`
+	upstream_short=`echo "$upstream" | sed "s|refs/heads/||"`
 
 	if [ -z "$curr_branch" ]; then
 		echo "You are not currently on a branch, so I cannot use any"
@@ -96,7 +99,7 @@ error_on_no_merge_candidates () {
 		echo "Please specify which branch you want to merge on the command"
 		echo "line and try again (e.g. 'git pull <repository> <refspec>')."
 		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,6 +117,10 @@ error_on_no_merge_candidates () {
 		echo "    remote.<nickname>.fetch = <refspec>"
 		echo
 		echo "See git-config(1) for details."
+	else
+		echo "Your configuration specified for us to pull the ref"
+		echo "'$upstream_short', but we were unable to fetch it from"
+		echo "the remote."
 	fi
 	exit 1
 }
-- 
1.6.5.rc0.201.g76b4d.dirty

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-12 21:11 ` Jeff King
@ 2009-09-12 21:31   ` John Tapsell
  2009-09-12 22:34     ` Jeff King
  2009-09-12 21:37   ` Sverre Rabbelier
  2009-09-13 20:38   ` Junio C Hamano
  2 siblings, 1 reply; 28+ messages in thread
From: John Tapsell @ 2009-09-12 21:31 UTC (permalink / raw)
  To: Jeff King; +Cc: Junio C Hamano, Git List

2009/9/13 Jeff King <peff@peff.net>:

> +       else
> +               echo "Your configuration specified for us to pull the ref"
> +               echo "'$upstream_short', but we were unable to fetch it from"
> +               echo "the remote."

Thanks!

But why was it 'unable' ?  Are there cases other than it not existing?
 Maybe something less cryptic:

"Attempted to pull from ref $upstream_short but this branch does not
exist on remote."

Or something?

John

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-12 21:11 ` Jeff King
  2009-09-12 21:31   ` John Tapsell
@ 2009-09-12 21:37   ` Sverre Rabbelier
  2009-09-12 22:31     ` Jeff King
  2009-09-13 20:38   ` Junio C Hamano
  2 siblings, 1 reply; 28+ messages in thread
From: Sverre Rabbelier @ 2009-09-12 21:37 UTC (permalink / raw)
  To: Jeff King; +Cc: John Tapsell, Junio C Hamano, Git List

Heya,

On Sat, Sep 12, 2009 at 23:11, Jeff King <peff@peff.net> wrote:
>        if [ -z "$curr_branch" ]; then
>                echo "You are not currently on a branch, so I cannot use any"
> @@ -96,7 +99,7 @@ error_on_no_merge_candidates () {
>                echo "Please specify which branch you want to merge on the command"
>                echo "line and try again (e.g. 'git pull <repository> <refspec>')."
>                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,6 +117,10 @@ error_on_no_merge_candidates () {
>                echo "    remote.<nickname>.fetch = <refspec>"
>                echo
>                echo "See git-config(1) for details."
> +       else
> +               echo "Your configuration specified for us to pull the ref"
> +               echo "'$upstream_short', but we were unable to fetch it from"
> +               echo "the remote."
>        fi
>        exit 1
>  }

Pretty bad case of multiple personality disorder here? At first
there's a "me", then again a "me", and then all of a sudden a "we"?

-- 
Cheers,

Sverre Rabbelier

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-12 21:37   ` Sverre Rabbelier
@ 2009-09-12 22:31     ` Jeff King
  2009-09-12 22:37       ` Sverre Rabbelier
  0 siblings, 1 reply; 28+ messages in thread
From: Jeff King @ 2009-09-12 22:31 UTC (permalink / raw)
  To: Sverre Rabbelier; +Cc: John Tapsell, Junio C Hamano, Git List

On Sat, Sep 12, 2009 at 11:37:47PM +0200, Sverre Rabbelier wrote:

> > +               echo "Your configuration specified for us to pull the ref"
> > +               echo "'$upstream_short', but we were unable to fetch it from"
> > +               echo "the remote."
> >        fi
> >        exit 1
> >  }
> 
> Pretty bad case of multiple personality disorder here? At first
> there's a "me", then again a "me", and then all of a sudden a "we"?

Fair enough. I'll change it to "I was unable to fetch" in the re-roll.

-Peff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-12 21:31   ` John Tapsell
@ 2009-09-12 22:34     ` Jeff King
  0 siblings, 0 replies; 28+ messages in thread
From: Jeff King @ 2009-09-12 22:34 UTC (permalink / raw)
  To: John Tapsell; +Cc: Junio C Hamano, Git List

On Sun, Sep 13, 2009 at 12:31:46AM +0300, John Tapsell wrote:

> 2009/9/13 Jeff King <peff@peff.net>:
> 
> > +       else
> > +               echo "Your configuration specified for us to pull the ref"
> > +               echo "'$upstream_short', but we were unable to fetch it from"
> > +               echo "the remote."
> 
> Thanks!
> 
> But why was it 'unable' ?  Are there cases other than it not existing?
>  Maybe something less cryptic:
> 
> "Attempted to pull from ref $upstream_short but this branch does not
> exist on remote."
> 
> Or something?

I'm not sure if there are other cases, so I left it unspecified. I think
that "does not exist" is probably the only one that should make it this
far, though, as any actual error would cause fetch to die, aborting the
pull.

And you can see that when you ask for a specific bogus ref, as in:

  $ git pull origin bogus
  fatal: Couldn't find remote ref bogus

I'll re-roll the patch with more specific wording.

-Peff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-12 22:31     ` Jeff King
@ 2009-09-12 22:37       ` Sverre Rabbelier
  0 siblings, 0 replies; 28+ messages in thread
From: Sverre Rabbelier @ 2009-09-12 22:37 UTC (permalink / raw)
  To: Jeff King; +Cc: John Tapsell, Junio C Hamano, Git List

Heya,

On Sun, Sep 13, 2009 at 00:31, Jeff King <peff@peff.net> wrote:
> Fair enough. I'll change it to "I was unable to fetch" in the re-roll.

Actually, from grepping through the source there's a lot of we-ing
going on already (although mostly in the comments), and fairly little
I-ing (not based on actual numbers, just what I could judge at a
glance), so maybe changing the ones above to "we" instead is more
appropriate?

-- 
Cheers,

Sverre Rabbelier

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-12 21:11 ` Jeff King
  2009-09-12 21:31   ` John Tapsell
  2009-09-12 21:37   ` Sverre Rabbelier
@ 2009-09-13 20:38   ` Junio C Hamano
  2009-09-13 20:42     ` Jeff King
                       ` (2 more replies)
  2 siblings, 3 replies; 28+ messages in thread
From: Junio C Hamano @ 2009-09-13 20:38 UTC (permalink / raw)
  To: Jeff King; +Cc: John Tapsell, Git List

Jeff King <peff@peff.net> writes:

> I think it is enough for git-pull to just check whether the config
> exists, and if so, guess that the ref was simply not fetched. IOW,
> this:

Thanks.

I saw some discussion on improving the wording.  Here is what I plan to
commit.

diff --git a/git-pull.sh b/git-pull.sh
index 0bbd5bf..2c2fa79 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -89,6 +89,8 @@ error_on_no_merge_candidates () {
 	done
 
 	curr_branch=${curr_branch#refs/heads/}
+	upstream=$(git config "branch.$curr_branch.merge" ||
+			git config "branch.$curr_branch.rebase")
 
 	if [ -z "$curr_branch" ]; then
 		echo "You are not currently on a branch, so I cannot use any"
@@ -96,7 +98,7 @@ error_on_no_merge_candidates () {
 		echo "Please specify which branch you want to merge on the command"
 		echo "line and try again (e.g. 'git pull <repository> <refspec>')."
 		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,6 +116,10 @@ error_on_no_merge_candidates () {
 		echo "    remote.<nickname>.fetch = <refspec>"
 		echo
 		echo "See git-config(1) for details."
+	else
+		echo "Your configuration specifies to merge the ref"
+		echo "'${upstream#refs/heads/}' from the remote, but no such ref"
+		echo "was fetched."
 	fi
 	exit 1
 }

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-13 20:38   ` Junio C Hamano
@ 2009-09-13 20:42     ` Jeff King
  2009-09-13 20:57       ` John Tapsell
                         ` (2 more replies)
  2009-09-14 11:14     ` Jeff King
  2009-10-05 11:32     ` Johannes Sixt
  2 siblings, 3 replies; 28+ messages in thread
From: Jeff King @ 2009-09-13 20:42 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: John Tapsell, Git List

On Sun, Sep 13, 2009 at 01:38:48PM -0700, Junio C Hamano wrote:

> I saw some discussion on improving the wording.  Here is what I plan to
> commit.

Thanks for picking this up, I meant to re-post with improvements.

> +	else
> +		echo "Your configuration specifies to merge the ref"
> +		echo "'${upstream#refs/heads/}' from the remote, but no such ref"
> +		echo "was fetched."

What you have here is precisely what we observed. But I think one of the
complaints was to say more explicitly "that ref doesn't exist on the
remote", which I think should be the case if we have got to this point
(anything else would have triggered an error in fetch).

I don't have a strong feeling either way, though.

-Peff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-13 20:42     ` Jeff King
  2009-09-13 20:57       ` John Tapsell
@ 2009-09-13 20:57       ` Junio C Hamano
  2009-09-13 21:36         ` Jeff King
  2009-09-13 21:16       ` Junio C Hamano
  2 siblings, 1 reply; 28+ messages in thread
From: Junio C Hamano @ 2009-09-13 20:57 UTC (permalink / raw)
  To: Jeff King; +Cc: John Tapsell, Git List

Jeff King <peff@peff.net> writes:

> What you have here is precisely what we observed. But I think one of the
> complaints was to say more explicitly "that ref doesn't exist on the
> remote", which I think should be the case if we have got to this point
> (anything else would have triggered an error in fetch).

Wouldn't you get into the situation with this?

	[remote "origin"]
        	fetch = refs/heads/master:refs/heads/master
	[branch "master"]
        	remote = origin
                merge = refs/heads/next

I think saying "does not exist" will repeat the same mistake of
overguessing you are trying to rectify.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-13 20:42     ` Jeff King
@ 2009-09-13 20:57       ` John Tapsell
  2009-09-13 21:18         ` Junio C Hamano
  2009-09-13 20:57       ` Junio C Hamano
  2009-09-13 21:16       ` Junio C Hamano
  2 siblings, 1 reply; 28+ messages in thread
From: John Tapsell @ 2009-09-13 20:57 UTC (permalink / raw)
  To: Jeff King; +Cc: Junio C Hamano, Git List

2009/9/13 Jeff King <peff@peff.net>:
> On Sun, Sep 13, 2009 at 01:38:48PM -0700, Junio C Hamano wrote:
>
>> I saw some discussion on improving the wording.  Here is what I plan to
>> commit.
>
> Thanks for picking this up, I meant to re-post with improvements.
>
>> +     else
>> +             echo "Your configuration specifies to merge the ref"
>> +             echo "'${upstream#refs/heads/}' from the remote, but no such ref"
>> +             echo "was fetched."
>
> What you have here is precisely what we observed. But I think one of the
> complaints was to say more explicitly "that ref doesn't exist on the
> remote", which I think should be the case if we have got to this point
> (anything else would have triggered an error in fetch).

Yeah, it kinda sounds like git is just being lazy, and can't be
bothered to fetch it :-)

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-13 20:42     ` Jeff King
  2009-09-13 20:57       ` John Tapsell
  2009-09-13 20:57       ` Junio C Hamano
@ 2009-09-13 21:16       ` Junio C Hamano
  2009-09-13 22:39         ` Jeff King
  2 siblings, 1 reply; 28+ messages in thread
From: Junio C Hamano @ 2009-09-13 21:16 UTC (permalink / raw)
  To: Jeff King; +Cc: John Tapsell, Git List

Jeff King <peff@peff.net> writes:

> On Sun, Sep 13, 2009 at 01:38:48PM -0700, Junio C Hamano wrote:
>
>> I saw some discussion on improving the wording.  Here is what I plan to
>> commit.
>
> Thanks for picking this up, I meant to re-post with improvements.

I am _not_ going to commit the following patch, because it will interfere
with this clarification effort, but I think we want to do something along
this line after the "clarification" settles.

An observation I'd like to make is that this is way too ugly:

	[advice]
        	pullNoMergeFound = false
                pushNonFastForward = false
                statusHints = false

than

	[IKnowWhatIAmDoingThankYouVeryMuch]
        	pullNoMergeFound
                pushNonFastForward
                statusHints

but this feature is for people who know what they are doing, so I guess
the current set-up would be fine.

 git-pull.sh |   78 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 54 insertions(+), 24 deletions(-)

diff --git a/git-pull.sh b/git-pull.sh
index 0bbd5bf..101545e 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -76,14 +76,64 @@ do
 	shift
 done
 
+advice_tags_only () {
+	if test -z "$1"
+	then
+		echo "Fetching tags only."
+		return
+	fi
+	echo "Fetching tags only, you probably meant:"
+	echo "  git fetch --tags"
+}
+
+advice_detached_head () {
+	if test -z "$1"
+	then
+		echo "No default merge candidate on a detached HEAD."
+		return
+	fi
+	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 branch you want to merge on the command"
+	echo "line and try again (e.g. 'git pull <repository> <refspec>')."
+	echo "See git-pull(1) for details."
+}
+
+advice_no_merge_candidates () {
+	if test -z "$1"
+	then
+		echo "No merge candidate for the current branch fetched."
+		return
+	fi
+	cat <<EOF
+You asked me to pull without telling me which branch you
+want to merge with, and 'branch.$2.merge' in
+your configuration file does not tell me either.  Please
+specify which branch you want to merge on the command line and
+try again (e.g. 'git pull <repository> <refspec>').
+See git-pull(1) for details.
+
+If you often merge with the same branch, you may want to
+configure the following variables in your configuration
+file:
+
+    branch.$2.remote = <nickname>
+    branch.$2.merge = <remote-ref>
+    remote.<nickname>.url = <url>"
+    remote.<nickname>.fetch = <refspec>
+
+See git-config(1) for details.
+EOF
+}
+
 error_on_no_merge_candidates () {
 	exec >&2
+	advice=$(git config --bool advice.pullNoMergeFound)
 	for opt
 	do
 		case "$opt" in
 		-t|--t|--ta|--tag|--tags)
-			echo "Fetching tags only, you probably meant:"
-			echo "  git fetch --tags"
+			advice_tags_only "$advice"
 			exit 1
 		esac
 	done
@@ -91,29 +141,9 @@ error_on_no_merge_candidates () {
 	curr_branch=${curr_branch#refs/heads/}
 
 	if [ -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 branch you want to merge on the command"
-		echo "line and try again (e.g. 'git pull <repository> <refspec>')."
-		echo "See git-pull(1) for details."
+		advice_detached_head "$advice"
 	else
-		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"
-		echo "specify which branch you want to merge 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 merge with the same branch, you may want to"
-		echo "configure the following variables in your configuration"
-		echo "file:"
-		echo
-		echo "    branch.${curr_branch}.remote = <nickname>"
-		echo "    branch.${curr_branch}.merge = <remote-ref>"
-		echo "    remote.<nickname>.url = <url>"
-		echo "    remote.<nickname>.fetch = <refspec>"
-		echo
-		echo "See git-config(1) for details."
+		advice_no_merge_candidate "$advice" "$curr_branch"
 	fi
 	exit 1
 }

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-13 20:57       ` John Tapsell
@ 2009-09-13 21:18         ` Junio C Hamano
  0 siblings, 0 replies; 28+ messages in thread
From: Junio C Hamano @ 2009-09-13 21:18 UTC (permalink / raw)
  To: John Tapsell; +Cc: Jeff King, Git List

John Tapsell <johnflux@gmail.com> writes:

> Yeah, it kinda sounds like git is just being lazy, and can't be
> bothered to fetch it :-)

Do you want it to say "you didn't tell us to fetch it"?

After all, we only do what the user instructs us to do, so I thought that
goes without saying it.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-13 20:57       ` Junio C Hamano
@ 2009-09-13 21:36         ` Jeff King
  2009-09-13 22:11           ` Junio C Hamano
  0 siblings, 1 reply; 28+ messages in thread
From: Jeff King @ 2009-09-13 21:36 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: John Tapsell, Git List

On Sun, Sep 13, 2009 at 01:57:37PM -0700, Junio C Hamano wrote:

> > What you have here is precisely what we observed. But I think one of the
> > complaints was to say more explicitly "that ref doesn't exist on the
> > remote", which I think should be the case if we have got to this point
> > (anything else would have triggered an error in fetch).
> 
> Wouldn't you get into the situation with this?
> 
> 	[remote "origin"]
>         	fetch = refs/heads/master:refs/heads/master
> 	[branch "master"]
>         	remote = origin
>                 merge = refs/heads/next
> 
> I think saying "does not exist" will repeat the same mistake of
> overguessing you are trying to rectify.

You are right, of course. I think your wording makes sense, then
(otherwise we get stuck with "well, we didn't fetch it. Maybe because it
didn't exist. Or maybe because your configuration didn't include it.").

-Peff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-13 21:36         ` Jeff King
@ 2009-09-13 22:11           ` Junio C Hamano
  0 siblings, 0 replies; 28+ messages in thread
From: Junio C Hamano @ 2009-09-13 22:11 UTC (permalink / raw)
  To: Jeff King; +Cc: John Tapsell, Git List

Jeff King <peff@peff.net> writes:

>> I think saying "does not exist" will repeat the same mistake of
>> overguessing you are trying to rectify.
>
> You are right, of course. I think your wording makes sense, then
> (otherwise we get stuck with "well, we didn't fetch it. Maybe because it
> didn't exist. Or maybe because your configuration didn't include it.").

Yeah, the saddest part of this whole story is that the message given by
the very original was succinct and accurate.

   echo >&2 "Warning: No merge candidate found because value of config option
    \"branch.${curr_branch}.merge\" does not match any remote branch fetched."
   echo >&2 "No changes."

Then we piled up different messages for various cases, and it went
downhill from there.

 - First, 8fc293c (Make git-pull complain and give advice when there is
   nothing to merge with, 2007-10-02) made the message say essentially the
   same thing, but with a lot more verbosity, covering only one _common_
   case.

 - Then 441ed41 ("git pull --tags": error out with a better message.,
   2007-12-28) added a special case for --tags.  The description before
   8fc293c would have still been correct without this change.  This was
   necessary because 8fc293c talked only about the "I am on branch and
   there is no configuration" case.

 - Then 61e6108 (git-pull.sh: better warning message for "git pull" on
   detached head., 2009-04-08) added another special case, again because
   the "helpful" instruction given by 8fc293c did not make any sense in
   the detached HEAD case.

It definitely is worth to further cover cases the message by 8fc293c did
not consider, as this thread suggested, but at the same time, I think the
advice mechanism should be used to bring back a succinct and to-the-point
message, close to the original one, e.g.

	Warning: Not merging anything, as no default merge candidate ref
	was fetched from the remote.

so that people who know what they are doing can squelch potentially
misleading "helpful" advices and diagnose/think for their own.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-13 21:16       ` Junio C Hamano
@ 2009-09-13 22:39         ` Jeff King
  0 siblings, 0 replies; 28+ messages in thread
From: Jeff King @ 2009-09-13 22:39 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: John Tapsell, Git List

On Sun, Sep 13, 2009 at 02:16:39PM -0700, Junio C Hamano wrote:

> I am _not_ going to commit the following patch, because it will interfere
> with this clarification effort, but I think we want to do something along
> this line after the "clarification" settles.

Please, yes. When I first suggested the advice.* mechanism, I had a
feeling in the back of my mind that there were several such messages
which had bothered me, but I didn't read through the code base looking
for them. But now that you mention it, this "no merge candidate" message
is definitely one of them (not even because it's wrong or anything, but
because of sheer _size_ of it).

> An observation I'd like to make is that this is way too ugly:
> 
> 	[advice]
>         	pullNoMergeFound = false
>                 pushNonFastForward = false
>                 statusHints = false
> 
> than
> 
> 	[IKnowWhatIAmDoingThankYouVeryMuch]
>         	pullNoMergeFound
>                 pushNonFastForward
>                 statusHints
> 
> but this feature is for people who know what they are doing, so I guess
> the current set-up would be fine.

Maybe a nice shorthand would be '!' for negative booleans. I.e.,

  [advice]
  !pullNoMergeFound
  !pushNonFastForward
  !statusHints

-Peff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-13 20:38   ` Junio C Hamano
  2009-09-13 20:42     ` Jeff King
@ 2009-09-14 11:14     ` Jeff King
  2009-10-05 11:32     ` Johannes Sixt
  2 siblings, 0 replies; 28+ messages in thread
From: Jeff King @ 2009-09-14 11:14 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: John Tapsell, Git List

On Sun, Sep 13, 2009 at 01:38:48PM -0700, Junio C Hamano wrote:

> I saw some discussion on improving the wording.  Here is what I plan to
> commit.
> 
> diff --git a/git-pull.sh b/git-pull.sh
> index 0bbd5bf..2c2fa79 100755
> --- a/git-pull.sh
> +++ b/git-pull.sh
> @@ -89,6 +89,8 @@ error_on_no_merge_candidates () {
>  	done
>  
>  	curr_branch=${curr_branch#refs/heads/}
> +	upstream=$(git config "branch.$curr_branch.merge" ||
> +			git config "branch.$curr_branch.rebase")

Argh, I made a mistake in my original patch which was retained in your
version. For some reason I was thinking that "branch.*.rebase" was an
_alternative_ to branch.*.merge, but it is in fact a bool that modifies
how we interpret branch.*.merge (I think when the feature was originally
discussed, that was one such proposal, and as I am not a user of the
feature, I proceeded with a totally bogus mental model since then).

So this really should read simply:

  upstream=$(git config "branch.$curr_branch.merge")

-Peff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-09-13 20:38   ` Junio C Hamano
  2009-09-13 20:42     ` Jeff King
  2009-09-14 11:14     ` Jeff King
@ 2009-10-05 11:32     ` Johannes Sixt
  2009-10-05 11:53       ` Jeff King
  2 siblings, 1 reply; 28+ messages in thread
From: Johannes Sixt @ 2009-10-05 11:32 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeff King, John Tapsell, Git List

Junio C Hamano schrieb:
> Jeff King <peff@peff.net> writes:
>> I think it is enough for git-pull to just check whether the config
>> exists, and if so, guess that the ref was simply not fetched. IOW,
>> this:
> 
> Thanks.
> 
> I saw some discussion on improving the wording.  Here is what I plan to
> commit.
> 
> diff --git a/git-pull.sh b/git-pull.sh
> index 0bbd5bf..2c2fa79 100755
> --- a/git-pull.sh
> +++ b/git-pull.sh
> @@ -89,6 +89,8 @@ error_on_no_merge_candidates () {
>  	done
>  
>  	curr_branch=${curr_branch#refs/heads/}
> +	upstream=$(git config "branch.$curr_branch.merge" ||
> +			git config "branch.$curr_branch.rebase")
>  
>  	if [ -z "$curr_branch" ]; then
>  		echo "You are not currently on a branch, so I cannot use any"
> @@ -96,7 +98,7 @@ error_on_no_merge_candidates () {
>  		echo "Please specify which branch you want to merge on the command"
>  		echo "line and try again (e.g. 'git pull <repository> <refspec>')."
>  		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,6 +116,10 @@ error_on_no_merge_candidates () {
>  		echo "    remote.<nickname>.fetch = <refspec>"
>  		echo
>  		echo "See git-config(1) for details."
> +	else
> +		echo "Your configuration specifies to merge the ref"
> +		echo "'${upstream#refs/heads/}' from the remote, but no such ref"
> +		echo "was fetched."
>  	fi
>  	exit 1
>  }

Unfortunately, this is not water-tight. See what I just observed:

  $ git pull hk
  From /exports/repos/hk/viscovery
     9455552..6429037  master     -> hk/master
  Your configuration specifies to merge the ref
  'master' from the remote, but no such ref
  was fetched.

The message is confusing when it says "'master' was not fetched" when
clearly master _was_ fetched.

More importantly, the message is wrong to say that "Your configuration
specifies to merge the ref 'master' from the remote", because I have this
configuration:

  $ git config -l | egrep '^(remote|branch)'
  remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
  remote.origin.url=/exports/repos/js/viscovery
  branch.master.remote=origin
  branch.master.merge=refs/heads/master
  remote.hk.url=/exports/repos/hk/viscovery
  remote.hk.fetch=+refs/heads/*:refs/remotes/hk/*

i.e. while on master, I merge master from "origin", not from "hk".

-- Hannes

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-10-05 11:32     ` Johannes Sixt
@ 2009-10-05 11:53       ` Jeff King
  2009-10-05 12:13         ` Johannes Sixt
  2009-10-05 19:08         ` Junio C Hamano
  0 siblings, 2 replies; 28+ messages in thread
From: Jeff King @ 2009-10-05 11:53 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: Junio C Hamano, John Tapsell, Git List

On Mon, Oct 05, 2009 at 01:32:34PM +0200, Johannes Sixt wrote:

> Unfortunately, this is not water-tight. See what I just observed:
> 
>   $ git pull hk
>   From /exports/repos/hk/viscovery
>      9455552..6429037  master     -> hk/master
>   Your configuration specifies to merge the ref
>   'master' from the remote, but no such ref
>   was fetched.
> 
> The message is confusing when it says "'master' was not fetched" when
> clearly master _was_ fetched.
> 
> More importantly, the message is wrong to say that "Your configuration
> specifies to merge the ref 'master' from the remote", because I have this
> configuration:

Ah, yeah. Looking at %(upstream) from for-each-ref (which is how we
determine to show that message) always uses the configured remote. But
if we have asked for another remote, then that doesn't make much sense.

So I think we need something like this. I wasn't able to figure out a
test case to trigger the first code path below, though. It may not be
possible; if we give a refspec on the command line, either it will be a
candidate for merging or, if it does not exist, fetch will barf. So it
may be that we can just collapse it down to a single case.

diff --git a/git-pull.sh b/git-pull.sh
index edf3ce3..a831db5 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -97,6 +97,18 @@ error_on_no_merge_candidates () {
 		echo "Please specify which branch you want to merge on the command"
 		echo "line and try again (e.g. 'git pull <repository> <refspec>')."
 		echo "See git-pull(1) for details."
+	elif [ -n "$1" ]; then
+		if [ $# -gt 1 ]; then
+			echo "You asked to pull from the remote '$1', but none"
+			echo "of the things you asked to fetch were candidates"
+			echo "for merging."
+		else
+			echo "You asked to pull from the remote '$1', but did"
+			echo "not specify a branch to merge. Because this is"
+			echo "not the default configured remote for your current"
+			echo "branch, you must specify a branch on the command"
+			echo "line."
+		fi
 	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"

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-10-05 11:53       ` Jeff King
@ 2009-10-05 12:13         ` Johannes Sixt
  2009-10-05 19:08         ` Junio C Hamano
  1 sibling, 0 replies; 28+ messages in thread
From: Johannes Sixt @ 2009-10-05 12:13 UTC (permalink / raw)
  To: Jeff King; +Cc: Junio C Hamano, John Tapsell, Git List

Jeff King schrieb:
> On Mon, Oct 05, 2009 at 01:32:34PM +0200, Johannes Sixt wrote:
> Ah, yeah. Looking at %(upstream) from for-each-ref (which is how we
> determine to show that message) always uses the configured remote. But
> if we have asked for another remote, then that doesn't make much sense.
> 
> So I think we need something like this. I wasn't able to figure out a
> test case to trigger the first code path below, though. It may not be
> possible; if we give a refspec on the command line, either it will be a
> candidate for merging or, if it does not exist, fetch will barf. So it
> may be that we can just collapse it down to a single case.
> 
> diff --git a/git-pull.sh b/git-pull.sh
> index edf3ce3..a831db5 100755
> --- a/git-pull.sh
> +++ b/git-pull.sh
> @@ -97,6 +97,18 @@ error_on_no_merge_candidates () {
>  		echo "Please specify which branch you want to merge on the command"
>  		echo "line and try again (e.g. 'git pull <repository> <refspec>')."
>  		echo "See git-pull(1) for details."
> +	elif [ -n "$1" ]; then
> +		if [ $# -gt 1 ]; then
> +			echo "You asked to pull from the remote '$1', but none"
> +			echo "of the things you asked to fetch were candidates"
> +			echo "for merging."
> +		else
> +			echo "You asked to pull from the remote '$1', but did"
> +			echo "not specify a branch to merge. Because this is"
> +			echo "not the default configured remote for your current"
> +			echo "branch, you must specify a branch on the command"
> +			echo "line."
> +		fi
>  	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"

Thanks, this gives a much better error message.

But, can we *please* have a more pleasantly wrapped message, even if this
grows lines in the source code beyond the 80 char limit? Like:

	echo "You asked to pull from the remote '$1',"
	echo "but did not specify a branch to merge. Because this is"
	echo "not the default configured remote for your current branch,"
	echo "you must specify a branch on the command line."

I.e.:

- Reserve more room for a long $1 in the first line.

- Don't wrap lines in "current branch" and "command line" when they are at
the end of a major logical unit of the sentence.

-- Hannes

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-10-05 11:53       ` Jeff King
  2009-10-05 12:13         ` Johannes Sixt
@ 2009-10-05 19:08         ` Junio C Hamano
  2009-10-05 19:12           ` Jeff King
  1 sibling, 1 reply; 28+ messages in thread
From: Junio C Hamano @ 2009-10-05 19:08 UTC (permalink / raw)
  To: Jeff King; +Cc: Johannes Sixt, John Tapsell, Git List

Jeff King <peff@peff.net> writes:

> So I think we need something like this. I wasn't able to figure out a
> test case to trigger the first code path below, though. It may not be
> possible; if we give a refspec on the command line, either it will be a
> candidate for merging or, if it does not exist, fetch will barf. So it
> may be that we can just collapse it down to a single case.

I think you are right.

By the way, I think the other case arms in the case statement that has the
sole caller of this function are never reached, no?

Back when you added the check in a74b170 (git-pull: disallow implicit
merging to detached HEAD, 2007-01-15), $? referred to the error status of
reading HEAD as a symbolic-ref so the check did make sense, but cd67e4d
(Teach 'git pull' about --rebase, 2007-11-28) made a stupid mistake that
nobody noticed.

> diff --git a/git-pull.sh b/git-pull.sh
> index edf3ce3..a831db5 100755
> --- a/git-pull.sh
> +++ b/git-pull.sh
> @@ -97,6 +97,18 @@ error_on_no_merge_candidates () {
>  		echo "Please specify which branch you want to merge on the command"
>  		echo "line and try again (e.g. 'git pull <repository> <refspec>')."
>  		echo "See git-pull(1) for details."
> +	elif [ -n "$1" ]; then
> +		if [ $# -gt 1 ]; then
> +			echo "You asked to pull from the remote '$1', but none"
> +			echo "of the things you asked to fetch were candidates"
> +			echo "for merging."
> +		else
> +			echo "You asked to pull from the remote '$1', but did"
> +			echo "not specify a branch to merge. Because this is"
> +			echo "not the default configured remote for your current"
> +			echo "branch, you must specify a branch on the command"
> +			echo "line."
> +		fi
>  	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"
>

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-10-05 19:08         ` Junio C Hamano
@ 2009-10-05 19:12           ` Jeff King
  2009-10-05 19:35             ` Jeff King
  2009-10-05 19:36             ` Junio C Hamano
  0 siblings, 2 replies; 28+ messages in thread
From: Jeff King @ 2009-10-05 19:12 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Sixt, John Tapsell, Git List

On Mon, Oct 05, 2009 at 12:08:38PM -0700, Junio C Hamano wrote:

> Jeff King <peff@peff.net> writes:
> 
> > So I think we need something like this. I wasn't able to figure out a
> > test case to trigger the first code path below, though. It may not be
> > possible; if we give a refspec on the command line, either it will be a
> > candidate for merging or, if it does not exist, fetch will barf. So it
> > may be that we can just collapse it down to a single case.
> 
> I think you are right.

Nope, I'm not. I figured out one more case that it needs to handle.
Revised patch coming up in a few minutes.

> By the way, I think the other case arms in the case statement that has the
> sole caller of this function are never reached, no?
> 
> Back when you added the check in a74b170 (git-pull: disallow implicit
> merging to detached HEAD, 2007-01-15), $? referred to the error status of
> reading HEAD as a symbolic-ref so the check did make sense, but cd67e4d
> (Teach 'git pull' about --rebase, 2007-11-28) made a stupid mistake that
> nobody noticed.

Hmm. I'm not sure. I don't see how $? could not be zero, though, because
the last thing we run is a subshell with sed and tr. But beyond that, we
actually handle the detached case in error_on_no_merge_candidates
already. So I think that case statement can simply be collapsed to the
first case.

-Peff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-10-05 19:12           ` Jeff King
@ 2009-10-05 19:35             ` Jeff King
  2009-10-08 22:01               ` Nanako Shiraishi
  2009-10-05 19:36             ` Junio C Hamano
  1 sibling, 1 reply; 28+ messages in thread
From: Jeff King @ 2009-10-05 19:35 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Sixt, John Tapsell, Git List

On Mon, Oct 05, 2009 at 03:12:57PM -0400, Jeff King wrote:

> > I think you are right.
> 
> Nope, I'm not. I figured out one more case that it needs to handle.
> Revised patch coming up in a few minutes.

OK, here it is, which I think covers all of the cases. I also re-wrapped
the text, as I agree with JSixt that it was pretty ugly. I also
re-wrapped some of the existing text, as it gave the very choppy:

  Your configuration specifies to merge the ref
  'foo' from the remote, but no such ref
  was fetched.

It would be really nice to just pipe it through 'fmt', but I suspect
that will create portability problems.

-- >8 --
Subject: [PATCH] pull: improve advice for unconfigured error case

There are several reasons a git-pull invocation might not
have anything marked for merge:

  1. We're not on a branch, so there is no branch
     configuration.

  2. We're on a branch, but there is no configuration for
     this branch.

  3. We fetched from the configured remote, but the
     configured branch to merge didn't get fetched (either
     it doesn't exist, or wasn't part of the fetch refspec).

  4. We fetched from the non-default remote, but didn't
     specify a branch to merge. We can't use the configured
     one because it applies to the default remote.

  5. We fetched from a specified remote, and a refspec was
     given, but it ended up not fetching anything (this is
     actually hard to do; if the refspec points to a remote
     branch and it doesn't exist, then fetch will fail and
     we never make it to this code path. But if you provide
     a wildcard refspec like

       refs/bogus/*:refs/remotes/origin/*

     then you can see this failure).

We have handled (1) and (2) for some time. Recently, commit
a6dbf88 added code to handle case (3).

This patch handles cases (4) and (5), which previously just
fell under other cases, producing a confusing message.

While we're at it, let's rewrap the text for case (3), which
looks terribly ugly as it is.

Signed-off-by: Jeff King <peff@peff.net>
---
 git-pull.sh |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/git-pull.sh b/git-pull.sh
index edf3ce3..8b0b6f6 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -90,8 +90,17 @@ error_on_no_merge_candidates () {
 
 	curr_branch=${curr_branch#refs/heads/}
 	upstream=$(git config "branch.$curr_branch.merge")
+	remote=$(git config "branch.$curr_branch.remote")
 
-	if [ -z "$curr_branch" ]; then
+	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.<branchname>.merge' in your configuration file."
 		echo "Please specify which branch you want to merge on the command"
@@ -116,9 +125,8 @@ error_on_no_merge_candidates () {
 		echo
 		echo "See git-config(1) for details."
 	else
-		echo "Your configuration specifies to merge the ref"
-		echo "'${upstream#refs/heads/}' from the remote, but no such ref"
-		echo "was fetched."
+		echo "Your configuration specifies to merge the ref '${upstream#refs/heads/}' from the"
+		echo "remote, but no such ref was fetched."
 	fi
 	exit 1
 }
-- 
1.6.5.rc2.219.g00ca

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-10-05 19:12           ` Jeff King
  2009-10-05 19:35             ` Jeff King
@ 2009-10-05 19:36             ` Junio C Hamano
  2009-10-05 22:00               ` Jeff King
  1 sibling, 1 reply; 28+ messages in thread
From: Junio C Hamano @ 2009-10-05 19:36 UTC (permalink / raw)
  To: Jeff King; +Cc: Junio C Hamano, Johannes Sixt, John Tapsell, Git List

Jeff King <peff@peff.net> writes:

> On Mon, Oct 05, 2009 at 12:08:38PM -0700, Junio C Hamano wrote:
>
>> Jeff King <peff@peff.net> writes:
>> 
>> > So I think we need something like this. I wasn't able to figure out a
>> > test case to trigger the first code path below, though. It may not be
>> > possible; if we give a refspec on the command line, either it will be a
>> > candidate for merging or, if it does not exist, fetch will barf. So it
>> > may be that we can just collapse it down to a single case.
>> 
>> I think you are right.
>
> Nope, I'm not. I figured out one more case that it needs to handle.
> Revised patch coming up in a few minutes.
>
>> By the way, I think the other case arms in the case statement that has the
>> sole caller of this function are never reached, no?
>> 
>> Back when you added the check in a74b170 (git-pull: disallow implicit
>> merging to detached HEAD, 2007-01-15), $? referred to the error status of
>> reading HEAD as a symbolic-ref so the check did make sense, but cd67e4d
>> (Teach 'git pull' about --rebase, 2007-11-28) made a stupid mistake that
>> nobody noticed.
>
> Hmm. I'm not sure. I don't see how $? could not be zero, though, because
> the last thing we run is a subshell with sed and tr. But beyond that, we
> actually handle the detached case in error_on_no_merge_candidates
> already. So I think that case statement can simply be collapsed to the
> first case.
>
> -Peff

-- >8 --
Subject: [PATCH] git-pull: dead code removal

Back when a74b170 (git-pull: disallow implicit merging to detached HEAD,
2007-01-15) added this check, $? referred to the error status of reading
HEAD as a symbolic-ref; but cd67e4d (Teach 'git pull' about --rebase,
2007-11-28) moved the command away from where the check is, and nobody
noticed the breakage.  Ever since, $? has always been 0 (tr at the end of
the pipe to find merge_head never fails) and other case arms were never
reached.

These days, error_on_no_merge_candidates function is prepared to handle a
detached HEAD case, which was what the code this patch removes used to
handle.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 git-pull.sh |    9 +--------
 1 files changed, 1 insertions(+), 8 deletions(-)

diff --git a/git-pull.sh b/git-pull.sh
index edf3ce3..66d73eb 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -182,14 +182,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 <remote> <branch>"
-	   exit 1;;
-	*) exit $?;;
-	esac
+	error_on_no_merge_candidates "$@"
 	;;
 ?*' '?*)
 	if test -z "$orig_head"
-- 
1.6.5.rc2.77.g2ea4a

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-10-05 19:36             ` Junio C Hamano
@ 2009-10-05 22:00               ` Jeff King
  0 siblings, 0 replies; 28+ messages in thread
From: Jeff King @ 2009-10-05 22:00 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Sixt, John Tapsell, Git List

On Mon, Oct 05, 2009 at 12:36:05PM -0700, Junio C Hamano wrote:

> -- >8 --
> Subject: [PATCH] git-pull: dead code removal
> 
> Back when a74b170 (git-pull: disallow implicit merging to detached HEAD,
> 2007-01-15) added this check, $? referred to the error status of reading
> HEAD as a symbolic-ref; but cd67e4d (Teach 'git pull' about --rebase,
> 2007-11-28) moved the command away from where the check is, and nobody
> noticed the breakage.  Ever since, $? has always been 0 (tr at the end of
> the pipe to find merge_head never fails) and other case arms were never
> reached.
> 
> These days, error_on_no_merge_candidates function is prepared to handle a
> detached HEAD case, which was what the code this patch removes used to
> handle.

Looks good to me.

Acked-by: Jeff King <peff@peff.net>

-Peff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-10-05 19:35             ` Jeff King
@ 2009-10-08 22:01               ` Nanako Shiraishi
  2009-10-09  7:38                 ` Junio C Hamano
  0 siblings, 1 reply; 28+ messages in thread
From: Nanako Shiraishi @ 2009-10-08 22:01 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeff King, Johannes Sixt, John Tapsell, Git List

Quoting Jeff King <peff@peff.net>

> On Mon, Oct 05, 2009 at 03:12:57PM -0400, Jeff King wrote:
>
>> > I think you are right.
>> 
>> Nope, I'm not. I figured out one more case that it needs to handle.
>> Revised patch coming up in a few minutes.
>
> OK, here it is, which I think covers all of the cases. I also re-wrapped
> the text, as I agree with JSixt that it was pretty ugly. I also
> re-wrapped some of the existing text, as it gave the very choppy:
>
>   Your configuration specifies to merge the ref
>   'foo' from the remote, but no such ref
>   was fetched.
>
> It would be really nice to just pipe it through 'fmt', but I suspect
> that will create portability problems.
>
> -- >8 --
> Subject: [PATCH] pull: improve advice for unconfigured error case
>
> There are several reasons a git-pull invocation might not
> have anything marked for merge:
>
>   1. We're not on a branch, so there is no branch
>      configuration.
>
>   2. We're on a branch, but there is no configuration for
>      this branch.
>
>   3. We fetched from the configured remote, but the
>      configured branch to merge didn't get fetched (either
>      it doesn't exist, or wasn't part of the fetch refspec).
>
>   4. We fetched from the non-default remote, but didn't
>      specify a branch to merge. We can't use the configured
>      one because it applies to the default remote.
>
>   5. We fetched from a specified remote, and a refspec was
>      given, but it ended up not fetching anything (this is
>      actually hard to do; if the refspec points to a remote
>      branch and it doesn't exist, then fetch will fail and
>      we never make it to this code path. But if you provide
>      a wildcard refspec like
>
>        refs/bogus/*:refs/remotes/origin/*
>
>      then you can see this failure).
>
> We have handled (1) and (2) for some time. Recently, commit
> a6dbf88 added code to handle case (3).
>
> This patch handles cases (4) and (5), which previously just
> fell under other cases, producing a confusing message.
>
> While we're at it, let's rewrap the text for case (3), which
> looks terribly ugly as it is.
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
>  git-pull.sh |   16 ++++++++++++----
>  1 files changed, 12 insertions(+), 4 deletions(-)

Junio, may I ask what happened to this patch?

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-10-08 22:01               ` Nanako Shiraishi
@ 2009-10-09  7:38                 ` Junio C Hamano
  2009-10-10  0:57                   ` Junio C Hamano
  0 siblings, 1 reply; 28+ messages in thread
From: Junio C Hamano @ 2009-10-09  7:38 UTC (permalink / raw)
  To: Nanako Shiraishi; +Cc: Jeff King, Johannes Sixt, John Tapsell, Git List

Nanako Shiraishi <nanako3@lavabit.com> writes:

> Quoting Jeff King <peff@peff.net>
>
>> Subject: [PATCH] pull: improve advice for unconfigured error case
>> ...
> Junio, may I ask what happened to this patch?

Thanks for prodding.  Unfortunately I lost track.  Will look at it again
but probably not tonight.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Confusing git pull error message
  2009-10-09  7:38                 ` Junio C Hamano
@ 2009-10-10  0:57                   ` Junio C Hamano
  0 siblings, 0 replies; 28+ messages in thread
From: Junio C Hamano @ 2009-10-10  0:57 UTC (permalink / raw)
  To: Jeff King; +Cc: Nanako Shiraishi, Johannes Sixt, John Tapsell, Git List

Junio C Hamano <gitster@pobox.com> writes:

> Nanako Shiraishi <nanako3@lavabit.com> writes:
>
>> Quoting Jeff King <peff@peff.net>
>>
>>> Subject: [PATCH] pull: improve advice for unconfigured error case
>>> ...
>> Junio, may I ask what happened to this patch?
>
> Thanks for prodding.  Unfortunately I lost track.  Will look at it again
> but probably not tonight.

Applied the patch as-is, as it looked quite good.

Thanks.

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2009-10-10  1:02 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-12 20:01 Confusing git pull error message John Tapsell
2009-09-12 21:11 ` Jeff King
2009-09-12 21:31   ` John Tapsell
2009-09-12 22:34     ` Jeff King
2009-09-12 21:37   ` Sverre Rabbelier
2009-09-12 22:31     ` Jeff King
2009-09-12 22:37       ` Sverre Rabbelier
2009-09-13 20:38   ` Junio C Hamano
2009-09-13 20:42     ` Jeff King
2009-09-13 20:57       ` John Tapsell
2009-09-13 21:18         ` Junio C Hamano
2009-09-13 20:57       ` Junio C Hamano
2009-09-13 21:36         ` Jeff King
2009-09-13 22:11           ` Junio C Hamano
2009-09-13 21:16       ` Junio C Hamano
2009-09-13 22:39         ` Jeff King
2009-09-14 11:14     ` Jeff King
2009-10-05 11:32     ` Johannes Sixt
2009-10-05 11:53       ` Jeff King
2009-10-05 12:13         ` Johannes Sixt
2009-10-05 19:08         ` Junio C Hamano
2009-10-05 19:12           ` Jeff King
2009-10-05 19:35             ` Jeff King
2009-10-08 22:01               ` Nanako Shiraishi
2009-10-09  7:38                 ` Junio C Hamano
2009-10-10  0:57                   ` Junio C Hamano
2009-10-05 19:36             ` Junio C Hamano
2009-10-05 22:00               ` Jeff King

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).