git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCHv3] parse-remote: handle detached HEAD

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 6, 2010, 16:03 UTC
Message-ID
<7vr5dusxb1.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1291630811-16584-1-git-send-email-santi@agolina.net>
Santi Béjar <santi@agolina.net> writes:
Show 18 quoted lines
> get_remote_merge_branch with zero or one arguments returns the
> upstream branch. But a detached HEAD does no have an upstream branch,
> as it is not tracking anything. Handle this case testing the exit code
> of "git symbolic-ref -q HEAD".
>
> Reported-by: Sverre Rabbelier <srabbelier@gmail.com>
> Signed-off-by: Santi Béjar <santi@agolina.net>
> ---
>
>> If that is the case, shouldn't we be not calling "echo" at all to begin
>> with?  IOW, shouldn't the code read more like this?
>>
>>        curr_branch=$(git symbolic-ref -q HEAD) &&
>>        test "$origin" = "$default" &&
>>        echo ...
>
> Or course, you are right. I didn't know/think about the exit
> code... Thanks.

The calling codepath in git-pull that wants to determine remoteref and oldremoteref seems to expect get-remote-merge-branch to succeed in order to find its $oldremoteref variable, and returning false in detached HEAD case here will change what happens there---it won't run "rev-list -g" anymore and quits the codepath early, leaving the variable empty.

But we do want to set the variable to an empty string in this case anyway, so there is no harm done (it probably is what we actually want to happen).

So this should be Ok. Sverre, do you want to do another round of testing just to be sure before I apply this?

Show 20 quoted lines
> Santi
>
>  git-parse-remote.sh |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/git-parse-remote.sh b/git-parse-remote.sh
> index 5f47b18..4da72ae 100644
> --- a/git-parse-remote.sh
> +++ b/git-parse-remote.sh
> @@ -66,7 +66,7 @@ get_remote_merge_branch () {
>  	    origin="$1"
>  	    default=$(get_default_remote)
>  	    test -z "$origin" && origin=$default
> -	    curr_branch=$(git symbolic-ref -q HEAD)
> +	    curr_branch=$(git symbolic-ref -q HEAD) &&
>  	    [ "$origin" = "$default" ] &&
>  	    echo $(git for-each-ref --format='%(upstream)' $curr_branch)
>  	    ;;
> -- 
> 1.7.3.3.399.g0d2be.dirty
Previous: Santi BéjarNext: Sverre Rabbelier
Message 7 of 8 in “parse-remote: handle detached HEAD”
  1. parse-remote: handle detached HEADSanti Béjar, Dec 5, 2010
  2. Sverre RabbelierDec 5, 2010
  3. [PATCHv2] parse-remote: handle detached HEADSanti Béjar, Dec 5, 2010
  4. Junio C HamanoDec 6, 2010
  5. [PATCHv3] parse-remote: handle detached HEADSanti Béjar, Dec 6, 2010
  6. Santi BéjarDec 6, 2010
  7. Junio C HamanoDec 6, 2010
  8. Sverre RabbelierDec 6, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.