Re: [PATCH 5/5] branch: show "HEAD detached" first under reverse sort
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 6, 2021, 23:49 UTC
- Message-ID
- <xmqqturtoccv.fsf@gitster.c.googlers.com>
- In-Reply-To
- <20210106100139.14651-6-avarab@gmail.com>
Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
Show 21 quoted lines
> struct atom_value *va, *vb;
> int cmp;
> + int cmp_detached_head = 0;
> cmp_type cmp_type = used_atom[s->atom].type;
> int (*cmp_fn)(const char *, const char *);
> struct strbuf err = STRBUF_INIT;
> @@ -2370,6 +2371,7 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru
> ^
> (b->kind & FILTER_REFS_DETACHED_HEAD))) {
> cmp = compare_detached_head(a, b);
> + cmp_detached_head = 1;
> } else if (s->version)
> cmp = versioncmp(va->s, vb->s);
> else if (cmp_type == FIELD_STR)
> @@ -2383,7 +2385,7 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru
> cmp = 1;
> }
>
> - return (s->reverse) ? -cmp : cmp;
> + return (s->reverse && !cmp_detached_head) ? -cmp : cmp;
> }OK. Other criteria would honor the "reverse" bit, but when we work on the set that includes "HEAD" ref (which only happens when "branch -l" deals with a detached head), it always tries to sort it before all other refs, regardless of the reverse bit. Makes sense.
Show 41 quoted lines
> static int compare_refs(const void *a_, const void *b_, void *ref_sorting) > diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh > index 8f53b081365..5e0577d5c7f 100755 > --- a/t/t3203-branch-output.sh > +++ b/t/t3203-branch-output.sh > @@ -221,10 +221,10 @@ test_expect_success 'git branch `--sort=[-]objectsize` option' ' > test_i18ncmp expect actual && > > cat >expect <<-\EOF && > + * (HEAD detached from fromtag) > branch-one > main > branch-two > - * (HEAD detached from fromtag) > EOF > git branch --sort=-objectsize >actual && > test_i18ncmp expect actual > @@ -241,10 +241,10 @@ test_expect_success 'git branch `--sort=[-]type` option' ' > test_i18ncmp expect actual && > > cat >expect <<-\EOF && > + * (HEAD detached from fromtag) > branch-one > branch-two > main > - * (HEAD detached from fromtag) > EOF > git branch --sort=-type >actual && > test_i18ncmp expect actual > @@ -261,10 +261,10 @@ test_expect_success 'git branch `--sort=[-]version:refname` option' ' > test_i18ncmp expect actual && > > cat >expect <<-\EOF && > + * (HEAD detached from fromtag) > main > branch-two > branch-one > - * (HEAD detached from fromtag) > EOF > git branch --sort=-version:refname >actual && > test_i18ncmp expect actual