Merge branch 'jk/branch-l-0-deprecation'
authorJunio C Hamano <gitster@pobox.com>
Wed, 18 Jul 2018 19:20:31 +0000 (12:20 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 18 Jul 2018 19:20:31 +0000 (12:20 -0700)
The "-l" option in "git branch -l" is an unfortunate short-hand for
"--create-reflog", but many users, both old and new, somehow expect
it to be something else, perhaps "--list". This step warns when "-l"
is used as a short-hand for "--create-reflog" and warns about the
future repurposing of the it when it is used.

* jk/branch-l-0-deprecation:
branch: deprecate "-l" option
t: switch "branch -l" to "branch --create-reflog"
t3200: unset core.logallrefupdates when testing reflog creation

1  2 
builtin/branch.c
diff --combined builtin/branch.c
index 1876ca9e7969019e1db1c97aedcf1064903b80a2,ed4c093747d54bbb734ed3d2c3b7895283deb748..0192d4a8795b64cb45fc84577c8ee30122fddd05
@@@ -22,7 -22,6 +22,7 @@@
  #include "wt-status.h"
  #include "ref-filter.h"
  #include "worktree.h"
 +#include "help.h"
  
  static const char * const builtin_branch_usage[] = {
        N_("git branch [<options>] [-r | -a] [--merged | --no-merged]"),
@@@ -37,6 -36,7 +37,7 @@@
  
  static const char *head;
  static struct object_id head_oid;
+ static int used_deprecated_reflog_option;
  
  static int branch_use_color = -1;
  static char branch_colors[][COLOR_MAXLEN] = {
@@@ -56,19 -56,25 +57,19 @@@ enum color_branch 
        BRANCH_COLOR_UPSTREAM = 5
  };
  
 +static const char *color_branch_slots[] = {
 +      [BRANCH_COLOR_RESET]    = "reset",
 +      [BRANCH_COLOR_PLAIN]    = "plain",
 +      [BRANCH_COLOR_REMOTE]   = "remote",
 +      [BRANCH_COLOR_LOCAL]    = "local",
 +      [BRANCH_COLOR_CURRENT]  = "current",
 +      [BRANCH_COLOR_UPSTREAM] = "upstream",
 +};
 +
  static struct string_list output = STRING_LIST_INIT_DUP;
  static unsigned int colopts;
  
 -static int parse_branch_color_slot(const char *slot)
 -{
 -      if (!strcasecmp(slot, "plain"))
 -              return BRANCH_COLOR_PLAIN;
 -      if (!strcasecmp(slot, "reset"))
 -              return BRANCH_COLOR_RESET;
 -      if (!strcasecmp(slot, "remote"))
 -              return BRANCH_COLOR_REMOTE;
 -      if (!strcasecmp(slot, "local"))
 -              return BRANCH_COLOR_LOCAL;
 -      if (!strcasecmp(slot, "current"))
 -              return BRANCH_COLOR_CURRENT;
 -      if (!strcasecmp(slot, "upstream"))
 -              return BRANCH_COLOR_UPSTREAM;
 -      return -1;
 -}
 +define_list_config_array(color_branch_slots);
  
  static int git_branch_config(const char *var, const char *value, void *cb)
  {
@@@ -81,7 -87,7 +82,7 @@@
                return 0;
        }
        if (skip_prefix(var, "color.branch.", &slot_name)) {
 -              int slot = parse_branch_color_slot(slot_name);
 +              int slot = LOOKUP_CONFIG(color_branch_slots, slot_name);
                if (slot < 0)
                        return 0;
                if (!value)
@@@ -568,6 -574,14 +569,14 @@@ static int edit_branch_description(cons
        return 0;
  }
  
+ static int deprecated_reflog_option_cb(const struct option *opt,
+                                      const char *arg, int unset)
+ {
+       used_deprecated_reflog_option = 1;
+       *(int *)opt->value = !unset;
+       return 0;
+ }
  int cmd_branch(int argc, const char **argv, const char *prefix)
  {
        int delete = 0, rename = 0, copy = 0, force = 0, list = 0;
                OPT_BIT('c', "copy", &copy, N_("copy a branch and its reflog"), 1),
                OPT_BIT('C', NULL, &copy, N_("copy a branch, even if target exists"), 2),
                OPT_BOOL(0, "list", &list, N_("list branch names")),
-               OPT_BOOL('l', "create-reflog", &reflog, N_("create the branch's reflog")),
+               OPT_BOOL(0, "create-reflog", &reflog, N_("create the branch's reflog")),
+               {
+                       OPTION_CALLBACK, 'l', NULL, &reflog, NULL,
+                       N_("deprecated synonym for --create-reflog"),
+                       PARSE_OPT_NOARG | PARSE_OPT_HIDDEN,
+                       deprecated_reflog_option_cb
+               },
                OPT_BOOL(0, "edit-description", &edit_description,
                         N_("edit the description for the branch")),
                OPT__FORCE(&force, N_("force creation, move/rename, deletion"), PARSE_OPT_NOCOMPLETE),
        if (list)
                setup_auto_pager("branch", 1);
  
+       if (used_deprecated_reflog_option && !list) {
+               warning("the '-l' alias for '--create-reflog' is deprecated;");
+               warning("it will be removed in a future version of Git");
+       }
        if (delete) {
                if (!argc)
                        die(_("branch name required"));