branch: allow -f with -m and -d

-f/--force is the standard way to force an action, and is used by branch for the recreation of existing branches, but not for deleting unmerged branches nor for renaming to an existing branch. Make "-m -f" equivalent to "-M" and "-d -f" equivalent to" -D", i.e. allow -f/--force to be used with -m/-d also. For the list modes, "-f" is simply ignored. Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Michael J Gruber committed Dec 8, 2014 at 17:28 UTC 356e91f2ecc581f3a446bba566ab1756dc57a583
2 files changed +14 -4
builtin/branch.c
+9 -4
@@ -790,7 +790,7 @@ static int edit_branch_description(const char *branch_name)
790
791 int cmd_branch(int argc, const char **argv, const char *prefix)
792 {
793 - int delete = 0, rename = 0, force_create = 0, list = 0;
793 + int delete = 0, rename = 0, force = 0, list = 0;
794 int verbose = 0, abbrev = -1, detached = 0;
795 int reflog = 0, edit_description = 0;
796 int quiet = 0, unset_upstream = 0;
@@ -838,7 +838,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
838 OPT_BOOL('l', "create-reflog", &reflog, N_("create the branch's reflog")),
839 OPT_BOOL(0, "edit-description", &edit_description,
840 N_("edit the description for the branch")),
841 - OPT__FORCE(&force_create, N_("force creation (when already exists)")),
841 + OPT__FORCE(&force, N_("force creation, move/rename, deletion")),
842 {
843 OPTION_CALLBACK, 0, "no-merged", &merge_filter_ref,
844 N_("commit"), N_("print only not merged branches"),
@@ -884,7 +884,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
884 if (with_commit || merge_filter != NO_FILTER)
885 list = 1;
886
887 - if (!!delete + !!rename + !!force_create + !!new_upstream +
887 + if (!!delete + !!rename + !!new_upstream +
888 list + unset_upstream > 1)
889 usage_with_options(builtin_branch_usage, options);
890
@@ -897,6 +897,11 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
897 colopts = 0;
898 }
899
900 + if (force) {
901 + delete *= 2;
902 + rename *= 2;
903 + }
904 +
905 if (delete) {
906 if (!argc)
907 die(_("branch name required"));
@@ -1013,7 +1018,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
1018
1019 branch_existed = ref_exists(branch->refname);
1020 create_branch(head, argv[0], (argc == 2) ? argv[1] : head,
1016 - force_create, reflog, 0, quiet, track);
1021 + force, reflog, 0, quiet, track);
1022
1023 /*
1024 * We only show the instructions if the user gave us
t/t3200-branch.sh
+5
@@ -106,6 +106,11 @@ test_expect_success 'git branch -M o/q o/p should work when o/p exists' '
106 git branch -M o/q o/p
107 '
108
109 +test_expect_success 'git branch -m -f o/q o/p should work when o/p exists' '
110 + git branch o/q &&
111 + git branch -m -f o/q o/p
112 +'
113 +
114 test_expect_success 'git branch -m q r/q should fail when r exists' '
115 git branch q &&
116 git branch r &&