It makes it easier to write tests for. But it should also be good for the user since locating a worktree by eye would be easier once they notice this. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin/worktree.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/builtin/worktree.c b/builtin/worktree.c index b835b91..80ccc51 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -434,6 +434,13 @@ static void measure_widths(struct worktree **wt, int *abbrev, int *maxlen) } } +static int compare_worktree(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 int list(int ac, const char **av, const char *prefix) { int porcelain = 0; @@ -448,11 +455,20 @@ static int list(int ac, const char **av, const char *prefix) usage_with_options(worktree_usage, options); else { struct worktree **worktrees = get_worktrees(); - int path_maxlen = 0, abbrev = DEFAULT_ABBREV, i; + int path_maxlen = 0, abbrev = DEFAULT_ABBREV, i, nr; if (!porcelain) measure_widths(worktrees, &abbrev, &path_maxlen); + for (i = nr = 0; worktrees[i]; i++) + nr++; + + /* + * don't sort the first item (main worktree), which will + * always be the first + */ + QSORT(worktrees + 1, nr - 1, compare_worktree); + for (i = 0; worktrees[i]; i++) { if (porcelain) show_worktree_porcelain(worktrees[i]); -- 2.8.2.524.g6ff3d78