git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Rafael Ascensão" <rafa.almas@gmail.com>
Cc: daniels@umanovskis.se, git@vger.kernel.org
Subject: Re: [PATCH] branch: make --show-current use already resolved HEAD
Date: Thu, 08 Nov 2018 10:11:02 +0900	[thread overview]
Message-ID: <xmqqa7mk9xw9.fsf@gitster-ct.c.googlers.com> (raw)
In-Reply-To: <20181107225619.6683-1-rafa.almas@gmail.com> ("Rafael Ascensão"'s message of "Wed, 7 Nov 2018 22:56:18 +0000")

Rafael Ascensão <rafa.almas@gmail.com> writes:

> print_current_branch_name() tries to resolve HEAD and die() when it
> doesn't resolve it successfully. But the conditions being tested are
> always unreachable because early in branch:cmd_branch() the same logic
> is performed.
>
> Eliminate the duplicate and unreachable code, and update the current
> logic to the more reliable check for the detached head.

Nice.

> I still think the mention about scripting should be removed from the
> original commit message, leaving it open to being taught other tricks
> like --verbose that aren't necessarily script-friendly.

I'd prefer to see scriptors avoid using "git branch", too.

Unlike end-user facing documentation where we promise "we do X and
will continue to do so because of Y" to the readers, the log message
is primarily for recording the original motivation of the change, so
that we can later learn "we did X back then because we thought Y".
When we want to revise X, we revisit if the reason Y is still valid.

So in that sense, the door to "break" the scriptability is still
open.

> But the main goal of this patch is to just bring some attention to this,
> as I mentioned it in a previous thread but it got lost.

This idea of yours seems to lead to a better implementation, and
indeed "got lost" is a good way to describe what happened---I do not
recall seeing it, for example.  Thanks for bringing it back.

> diff --git a/builtin/branch.c b/builtin/branch.c
> index 46f91dc06d..1c51d0a8ca 100644
> --- a/builtin/branch.c
> +++ b/builtin/branch.c
> @@ -38,6 +38,7 @@ static const char * const builtin_branch_usage[] = {
>  
>  static const char *head;
>  static struct object_id head_oid;
> +static int head_flags = 0;

You've eliminated the "now unnecessary" helper and do everything
inside cmd_branch(), so perhaps this can be made function local, no?

> @@ -668,10 +654,10 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
>  
>  	track = git_branch_track;
>  
> -	head = resolve_refdup("HEAD", 0, &head_oid, NULL);
> +	head = resolve_refdup("HEAD", 0, &head_oid, &head_flags);
>  	if (!head)
>  		die(_("Failed to resolve HEAD as a valid ref."));
> -	if (!strcmp(head, "HEAD"))
> +	if (!(head_flags & REF_ISSYMREF))
>  		filter.detached = 1;

Nice to see we can reuse the resolve_refdup() we already have.

>  	else if (!skip_prefix(head, "refs/heads/", &head))
>  		die(_("HEAD not found below refs/heads!"));
> @@ -716,7 +702,8 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
>  			die(_("branch name required"));
>  		return delete_branches(argc, argv, delete > 1, filter.kind, quiet);
>  	} else if (show_current) {
> -		print_current_branch_name();
> +		if (!filter.detached)
> +			puts(head);

Ah, I wondered why we do not have to skip-prefix, but it is already
done for us when we validated that an attached HEAD points at a
local branch.  Good.

>  		return 0;
>  	} else if (list) {
>  		/*  git branch --local also shows HEAD when it is detached */

  reply	other threads:[~2018-11-08  1:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-25 19:04 [PATCH v5] branch: introduce --show-current display option Daniels Umanovskis
2018-10-25 19:30 ` Eric Sunshine
2018-10-26  0:52   ` Junio C Hamano
2018-11-01 22:01     ` Jeff King
2018-10-26  1:53   ` Junio C Hamano
2018-11-07 22:56 ` [PATCH] branch: make --show-current use already resolved HEAD Rafael Ascensão
2018-11-08  1:11   ` Junio C Hamano [this message]
2018-11-08  4:36     ` Rafael Ascensão

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqa7mk9xw9.fsf@gitster-ct.c.googlers.com \
    --to=gitster@pobox.com \
    --cc=daniels@umanovskis.se \
    --cc=git@vger.kernel.org \
    --cc=rafa.almas@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).