All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael J Gruber <git@drmicha.warpmail.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Julien Cretel <j.cretel@umail.ucc.ie>
Subject: Re: [PATCH] log: decorate detached HEAD differently
Date: Mon, 09 Mar 2015 10:16:01 +0100	[thread overview]
Message-ID: <54FD64D1.6080103@drmicha.warpmail.net> (raw)
In-Reply-To: <xmqq61aeymlv.fsf@gitster.dls.corp.google.com>

Junio C Hamano venit, vidit, dixit 06.03.2015 20:03:
> Michael J Gruber <git@drmicha.warpmail.net> writes:
> 
>> "git status" and "git branch" let the user know when the HEAD is
>> detached, as well as the current branch, while "git log --decorate" does not.
>>
>> Change the decoration by a non-detached HEAD pointing to branch foo to
>> "HEAD->foo". This can be seen as giving more information about the
>> decoration item itself in the same way as we prefix tags by "tag: ".
>>
>> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
>> ---
>>
>> Notes:
>>     v2 decorates the HEAD pointing to master as "HEAD->master", a detached
>>     HEAD just as "HEAD". The "->" hopefully conveys the symlink nature - a
>>     "=" would be confusing.
>>     
>>     Somehow I still prefer "detached HEAD", dunno. Maybe in addition?
>>     
>>     Note that now a checked branch is listed twice, once as target of the
>>     HEAD, once as branch: They are two different refs and colored differently.
> 
> The pointee of HEAD would always be branch and will always appear on
> the output when you show HEAD->$name_of_that_branch; is it feasible
> to drop the duplicate, I wonder?

It's doable but not nice, because we cannot take the order in which refs
are processed for granted.

I also think that we shouldn't simply check whether branch foo is
checked out (when decorating with foo) - we need to know whether HEAD is
among the refs which are eligible for decoration. That caveat is also
true for the "always" above. (I don't think we allow decorating by a
subset of all refs right now, but it would be useful, and easy given the
for-each-ref machinery.)

Also, HEAD and foo are two different refs, so even if HEAD has the value
"foo", I think we should really show them both anyways.

Alternatively, we could decorate by (HEAD, *foo, master, tag: release)
if foo is checked out, just like branch does.


>>  log-tree.c                             | 8 +++++++-
>>  t/t4013/diff.log_--decorate=full_--all | 2 +-
>>  t/t4013/diff.log_--decorate_--all      | 2 +-
>>  t/t4207-log-decoration-colors.sh       | 2 +-
>>  4 files changed, 10 insertions(+), 4 deletions(-)
>>
>> diff --git a/log-tree.c b/log-tree.c
>> index 7f0890e..38862bb 100644
>> --- a/log-tree.c
>> +++ b/log-tree.c
>> @@ -118,8 +118,11 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in
>>  		type = DECORATION_REF_TAG;
>>  	else if (!strcmp(refname, "refs/stash"))
>>  		type = DECORATION_REF_STASH;
>> -	else if (!strcmp(refname, "HEAD"))
>> +	else if (!strcmp(refname, "HEAD")) {
>> +		unsigned char junk_sha1[20];
>>  		type = DECORATION_REF_HEAD;
>> +		refname = resolve_ref_unsafe("HEAD", 0, junk_sha1, NULL);
>> +	}
>>  
>>  	if (!cb_data || *(int *)cb_data == DECORATE_SHORT_REFS)
>>  		refname = prettify_refname(refname);
>> @@ -198,6 +201,9 @@ void format_decorations_extended(struct strbuf *sb,
>>  		strbuf_addstr(sb, decorate_get_color(use_color, decoration->type));
>>  		if (decoration->type == DECORATION_REF_TAG)
>>  			strbuf_addstr(sb, "tag: ");
>> +		else if (decoration->type == DECORATION_REF_HEAD &&
>> +			 strcmp(decoration->name, "HEAD"))
>> +			strbuf_addstr(sb, "HEAD->");
>>  		strbuf_addstr(sb, decoration->name);
>>  		strbuf_addstr(sb, color_reset);
>>  		prefix = separator;
>> diff --git a/t/t4013/diff.log_--decorate=full_--all b/t/t4013/diff.log_--decorate=full_--all
>> index 44d4525..3758ae9 100644
>> --- a/t/t4013/diff.log_--decorate=full_--all
>> +++ b/t/t4013/diff.log_--decorate=full_--all
>> @@ -5,7 +5,7 @@ Date:   Mon Jun 26 00:06:00 2006 +0000
>>  
>>      Rearranged lines in dir/sub
>>  
>> -commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (HEAD, refs/heads/master)
>> +commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (HEAD->refs/heads/master, refs/heads/master)
>>  Merge: 9a6d494 c7a2ab9
>>  Author: A U Thor <author@example.com>
>>  Date:   Mon Jun 26 00:04:00 2006 +0000
>> diff --git a/t/t4013/diff.log_--decorate_--all b/t/t4013/diff.log_--decorate_--all
>> index 27d3eab..df702ae 100644
>> --- a/t/t4013/diff.log_--decorate_--all
>> +++ b/t/t4013/diff.log_--decorate_--all
>> @@ -5,7 +5,7 @@ Date:   Mon Jun 26 00:06:00 2006 +0000
>>  
>>      Rearranged lines in dir/sub
>>  
>> -commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (HEAD, master)
>> +commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (HEAD->master, master)
>>  Merge: 9a6d494 c7a2ab9
>>  Author: A U Thor <author@example.com>
>>  Date:   Mon Jun 26 00:04:00 2006 +0000
>> diff --git a/t/t4207-log-decoration-colors.sh b/t/t4207-log-decoration-colors.sh
>> index 925f577..0437ff2 100755
>> --- a/t/t4207-log-decoration-colors.sh
>> +++ b/t/t4207-log-decoration-colors.sh
>> @@ -44,7 +44,7 @@ test_expect_success setup '
>>  '
>>  
>>  cat >expected <<EOF
>> -${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_HEAD}HEAD${c_reset}${c_commit},\
>> +${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_HEAD}HEAD->master${c_reset}${c_commit},\
>>   ${c_tag}tag: v1.0${c_reset}${c_commit},\
>>   ${c_tag}tag: B${c_reset}${c_commit},\
>>   ${c_branch}master${c_reset}${c_commit})${c_reset} B

  reply	other threads:[~2015-03-09  9:16 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-16 22:42 Should "git log --decorate" indicate whether the HEAD is detached? Julien Cretel
2015-02-16 23:15 ` Junio C Hamano
2015-02-16 23:40   ` Julien Cretel
2015-02-18 10:15     ` Michael J Gruber
2015-02-18 13:19       ` [RFC/PATCH] log: decorate detached HEAD differently Michael J Gruber
2015-02-18 17:07       ` Should "git log --decorate" indicate whether the HEAD is detached? Junio C Hamano
2015-02-18 19:45         ` Michael J Gruber
2015-02-18 19:49           ` Junio C Hamano
2015-02-19  9:52             ` Michael J Gruber
2015-02-19 11:13         ` Julien Cretel
2015-02-20  8:13           ` Junio C Hamano
2015-03-06 16:15             ` [PATCH] log: decorate detached HEAD differently Michael J Gruber
2015-03-06 16:20               ` Michael J Gruber
2015-03-06 19:03               ` Junio C Hamano
2015-03-09  9:16                 ` Michael J Gruber [this message]
2015-03-10  2:03                   ` Junio C Hamano
2015-03-10 10:34                     ` Michael J Gruber
2015-03-10 13:53                       ` [PATCHv2 0/2] log decorations for HEAD Michael J Gruber
2015-03-10 13:53                         ` [PATCHv2 1/2] log-tree: properly reset colors Michael J Gruber
2015-03-10 13:53                         ` [PATCHv2 2/2] log: decorate HEAD with branch name Michael J Gruber
2015-03-10 17:06                         ` [PATCHv2 0/2] log decorations for HEAD Junio C Hamano
2015-03-11  8:02                           ` Michael J Gruber
2015-03-23 10:36                         ` Julien Cretel

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

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

  git send-email \
    --in-reply-to=54FD64D1.6080103@drmicha.warpmail.net \
    --to=git@drmicha.warpmail.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j.cretel@umail.ucc.ie \
    /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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.