worktree: drop get_worktrees() special-purpose sorting option
Of all the clients of get_worktrees(), only "git worktree list" wants the list sorted in a very specific way; other clients simply don't care about the order. Rather than imbuing get_worktrees() with special knowledge about how various clients -- now and in the future -- may want the list sorted, drop the sorting capability altogether and make it the client's responsibility to sort the list if needed. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
810382ed37
commit
d9c54c2bbf
@ -694,6 +694,23 @@ static void measure_widths(struct worktree **wt, int *abbrev, int *maxlen)
|
||||
}
|
||||
}
|
||||
|
||||
static int pathcmp(const void *a_, const void *b_)
|
||||
{
|
||||
const struct worktree *const *a = a_;
|
||||
const struct worktree *const *b = b_;
|
||||
return fspathcmp((*a)->path, (*b)->path);
|
||||
}
|
||||
|
||||
static void pathsort(struct worktree **wt)
|
||||
{
|
||||
int n = 0;
|
||||
struct worktree **p = wt;
|
||||
|
||||
while (*p++)
|
||||
n++;
|
||||
QSORT(wt, n, pathcmp);
|
||||
}
|
||||
|
||||
static int list(int ac, const char **av, const char *prefix)
|
||||
{
|
||||
int porcelain = 0;
|
||||
@ -707,9 +724,12 @@ static int list(int ac, const char **av, const char *prefix)
|
||||
if (ac)
|
||||
usage_with_options(worktree_usage, options);
|
||||
else {
|
||||
struct worktree **worktrees = get_worktrees(GWT_SORT_LINKED);
|
||||
struct worktree **worktrees = get_worktrees(0);
|
||||
int path_maxlen = 0, abbrev = DEFAULT_ABBREV, i;
|
||||
|
||||
/* sort worktrees by path but keep main worktree at top */
|
||||
pathsort(worktrees + 1);
|
||||
|
||||
if (!porcelain)
|
||||
measure_widths(worktrees, &abbrev, &path_maxlen);
|
||||
|
||||
|
Reference in New Issue
Block a user