Re: [PATCH 2/3] for-each-ref: introduce %(HEAD) marker
- From
Philip Oakley <philipoakley@iee.org>
- Date
- May 24, 2013, 20:28 UTC
- Message-ID
- <2314A6D4A97C4D44AFEF62B9D089BDC3@PhilipOakley>
- In-Reply-To
- <1369405177-7855-3-git-send-email-artagnon@gmail.com>
From: "Ramkumar Ramachandra" <artagnon@gmail.com> Sent: Friday, May 24, 2013 3:19 PM
> 'git branch' shows which branch you are currently on with an '*', but > 'git for-each-ref' misses this feature. So, extend the format with > %(HEAD) to do exactly the same thing.
Maybe 'isHEAD' as a better name, or 'ifHEAD', or something to indicate its boolean nature.
Show 45 quoted lines
>
> Now you can use the following format in for-each-ref:
>
> %C(red)%(HEAD)%C(reset) %C(green)%(refname:short)%C(reset)
>
> to display a red asterisk next to the current ref.
>
> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
> ---
> builtin/for-each-ref.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
> index 1563b25..63d3a85 100644
> --- a/builtin/for-each-ref.c
> +++ b/builtin/for-each-ref.c
> @@ -76,6 +76,7 @@ static struct {
> { "upstream" },
> { "symref" },
> { "flag" },
> + { "HEAD" },
> };
>
> /*
> @@ -683,8 +684,16 @@ static void populate_value(struct refinfo *ref)
> v->s = xstrdup(buf + 1);
> }
> continue;
> - }
> - else
> + } else if (!strcmp(name, "HEAD")) {
> + const char *head;
> + unsigned char sha1[20];
> + head = resolve_ref_unsafe("HEAD", sha1, 1, NULL);
> + if (!strcmp(ref->refname, head))
> + v->s = "*";
> + else
> + v->s = " ";
> + continue;
> + } else
> continue;
>
> formatp = strchr(name, ':');
> --
> 1.8.3.rc3.2.g99b8f3f.dirty