Merge branch 'jk/for-each-ref-multi-key-sort-fix'
"git branch" and other "for-each-ref" variants accepted multiple --sort=<key> options in the increasing order of precedence, but it had a few breakages around "--ignore-case" handling, and tie-breaking with the refname, which have been fixed. * jk/for-each-ref-multi-key-sort-fix: ref-filter: apply fallback refname sort only after all user sorts ref-filter: apply --ignore-case to all sorting keys
This commit is contained in:
13
ref-filter.c
13
ref-filter.c
@ -2295,7 +2295,7 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru
|
||||
if (va->value < vb->value)
|
||||
cmp = -1;
|
||||
else if (va->value == vb->value)
|
||||
cmp = cmp_fn(a->refname, b->refname);
|
||||
cmp = 0;
|
||||
else
|
||||
cmp = 1;
|
||||
}
|
||||
@ -2314,7 +2314,16 @@ static int compare_refs(const void *a_, const void *b_, void *ref_sorting)
|
||||
if (cmp)
|
||||
return cmp;
|
||||
}
|
||||
return 0;
|
||||
s = ref_sorting;
|
||||
return s && s->ignore_case ?
|
||||
strcasecmp(a->refname, b->refname) :
|
||||
strcmp(a->refname, b->refname);
|
||||
}
|
||||
|
||||
void ref_sorting_icase_all(struct ref_sorting *sorting, int flag)
|
||||
{
|
||||
for (; sorting; sorting = sorting->next)
|
||||
sorting->ignore_case = !!flag;
|
||||
}
|
||||
|
||||
void ref_array_sort(struct ref_sorting *sorting, struct ref_array *array)
|
||||
|
||||
Reference in New Issue
Block a user