summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ref-filter.c5
-rwxr-xr-xt/t3203-branch-output.sh6
2 files changed, 7 insertions, 4 deletions
diff --git a/ref-filter.c b/ref-filter.c
index 8d0739b997..ee337df232 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -2357,6 +2357,7 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru
{
struct atom_value *va, *vb;
int cmp;
+ int cmp_detached_head = 0;
cmp_type cmp_type = used_atom[s->atom].type;
struct strbuf err = STRBUF_INIT;
@@ -2368,6 +2369,7 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru
if (s->sort_flags & REF_SORTING_DETACHED_HEAD_FIRST &&
((a->kind | b->kind) & FILTER_REFS_DETACHED_HEAD)) {
cmp = compare_detached_head(a, b);
+ cmp_detached_head = 1;
} else if (s->sort_flags & REF_SORTING_VERSION) {
cmp = versioncmp(va->s, vb->s);
} else if (cmp_type == FIELD_STR) {
@@ -2384,7 +2386,8 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru
cmp = 1;
}
- return (s->sort_flags & REF_SORTING_REVERSE) ? -cmp : cmp;
+ return (s->sort_flags & REF_SORTING_REVERSE && !cmp_detached_head)
+ ? -cmp : cmp;
}
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 8f53b08136..5e0577d5c7 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