Merge branch 'nd/for-each-ref-ignore-case'
authorJunio C Hamano <gitster@pobox.com>
Mon, 19 Dec 2016 22:45:31 +0000 (14:45 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 19 Dec 2016 22:45:31 +0000 (14:45 -0800)
"git branch --list" and friends learned "--ignore-case" option to
optionally sort branches and tags case insensitively.

* nd/for-each-ref-ignore-case:
tag, branch, for-each-ref: add --ignore-case for sorting and filtering

1  2 
builtin/branch.c
diff --combined builtin/branch.c
index 475707528a83b2fc42518f9f1e23f14d8846cb38,36e0a21af5da61b4aee19237937e8c9fe5fa28a9..9d30f55b0b83cfc09294e2cb7cabdc9aa72e2508
@@@ -512,15 -512,6 +512,6 @@@ static void print_ref_list(struct ref_f
        if (filter->verbose)
                maxwidth = calc_maxwidth(&array, strlen(remote_prefix));
  
-       /*
-        * If no sorting parameter is given then we default to sorting
-        * by 'refname'. This would give us an alphabetically sorted
-        * array with the 'HEAD' ref at the beginning followed by
-        * local branches 'refs/heads/...' and finally remote-tacking
-        * branches 'refs/remotes/...'.
-        */
-       if (!sorting)
-               sorting = ref_default_sorting();
        ref_array_sort(sorting, &array);
  
        for (i = 0; i < array.nr; i++)
  
  static void reject_rebase_or_bisect_branch(const char *target)
  {
 -      struct worktree **worktrees = get_worktrees();
 +      struct worktree **worktrees = get_worktrees(0);
        int i;
  
        for (i = 0; worktrees[i]; i++) {
@@@ -645,6 -636,7 +636,7 @@@ int cmd_branch(int argc, const char **a
        const char *new_upstream = NULL;
        enum branch_track track;
        struct ref_filter filter;
+       int icase = 0;
        static struct ref_sorting *sorting = NULL, **sorting_tail = &sorting;
  
        struct option options[] = {
                        OPTION_CALLBACK, 0, "points-at", &filter.points_at, N_("object"),
                        N_("print only branches of the object"), 0, parse_opt_object_name
                },
+               OPT_BOOL('i', "ignore-case", &icase, N_("sorting and filtering are case insensitive")),
                OPT_END(),
        };
  
  
        if (filter.abbrev == -1)
                filter.abbrev = DEFAULT_ABBREV;
+       filter.ignore_case = icase;
        finalize_colopts(&colopts, -1);
        if (filter.verbose) {
                if (explicitly_enable_column(colopts))
                if ((filter.kind & FILTER_REFS_BRANCHES) && filter.detached)
                        filter.kind |= FILTER_REFS_DETACHED_HEAD;
                filter.name_patterns = argv;
+               /*
+                * If no sorting parameter is given then we default to sorting
+                * by 'refname'. This would give us an alphabetically sorted
+                * array with the 'HEAD' ref at the beginning followed by
+                * local branches 'refs/heads/...' and finally remote-tacking
+                * branches 'refs/remotes/...'.
+                */
+               if (!sorting)
+                       sorting = ref_default_sorting();
+               sorting->ignore_case = icase;
                print_ref_list(&filter, sorting);
                print_columns(&output, colopts, NULL);
                string_list_clear(&output, 0);