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 &&