Re: [RFC/PATCH 07/11] branch: move 'current' check down to the presentation layer
- From
Matthieu Moy <matthieu.moy@grenoble-inp.fr>
- Date
- Jul 28, 2015, 13:09 UTC
- Message-ID
- <vpqbnewxwcx.fsf@anie.imag.fr>
- In-Reply-To
- <1438066594-5620-7-git-send-email-Karthik.188@gmail.com>
Karthik Nayak <karthik.188@gmail.com> writes:
> We check if given ref is the current branch in print_ref_list(). Move > this check to print_ref_item() where it is checked right before > printing.
This means that the '*' and the different color are coded in C, hence it's not possible to mimick this using "git for-each-ref --format ...".
I do not consider this as blocking, but I think the ultimate goal should be to allow this, so that all the goodies of "git branch" can be made available to other ref-listing commands.
Show 43 quoted lines
> --- a/builtin/branch.c
> +++ b/builtin/branch.c
> @@ -534,9 +534,9 @@ static char *get_head_description(void)
> }
>
> static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
> - int abbrev, int current, const char *remote_prefix)
> + int abbrev, int detached, const char *remote_prefix)
> {
> - char c;
> + char c = ' ';
> int color;
> struct strbuf out = STRBUF_INIT, name = STRBUF_INIT;
> const char *prefix = "";
> @@ -547,7 +547,11 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
>
> switch (item->kind) {
> case REF_LOCAL_BRANCH:
> - color = BRANCH_COLOR_LOCAL;
> + if (!detached && !strcmp(item->name, head)) {
> + color = BRANCH_COLOR_CURRENT;
> + c = '*';
> + } else
> + color = BRANCH_COLOR_LOCAL;
> break;
> case REF_REMOTE_BRANCH:
> color = BRANCH_COLOR_REMOTE;
> @@ -556,18 +560,13 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
> case REF_DETACHED_HEAD:
> color = BRANCH_COLOR_CURRENT;
> desc = get_head_description();
> + c = '*';
> break;
> default:
> color = BRANCH_COLOR_PLAIN;
> break;
> }
>
> - c = ' ';
> - if (current) {
> - c = '*';
> - color = BRANCH_COLOR_CURRENT;
> - }I actually prefered the old way: current is a Boolean that says semantically "this is the current branch", and the Boolean is turned into presentation directives in a separate piece of code.
I'd write
char c; int current = 0;
...
if (...) current = 1; ... case REF_DETACHED_HEAD: current = 1; ...
and keep the last hunk.
(IOW, turn current from a parameter into a local variable)
-- Matthieu Moy http://www-verimag.imag.fr/~moy/