Re: [PATCH 5/5] branch: show "HEAD detached" first under reverse sort
From: Junio C Hamano <hidden>
Date: 2021-01-06 23:49:53
Ævar Arnfjörð Bjarmason [off-list ref] writes:
quoted hunk
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.
quoted hunk
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