Skip to content

Commit 3f495f6

Browse files
peffgitster
authored andcommitted
replace: refactor command-mode determination
The git-replace command has three modes: listing, deleting, and replacing. The first two are selected explicitly. If none is selected, we fallback to listing when there are no arguments, and replacing otherwise. Let's figure out up front which operation we are going to do, before getting into the application logic. That lets us simplify our option checks (e.g., we currently have to check whether a useless "--force" is given both along with an explicit list, as well as with an implicit one). This saves some lines, makes the logic easier to follow, and will facilitate further cleanups. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Christian Couder <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent d8779e1 commit 3f495f6

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

builtin/replace.c

+6-8
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,16 @@ int cmd_replace(int argc, const char **argv, const char *prefix)
182182

183183
argc = parse_options(argc, argv, prefix, options, git_replace_usage, 0);
184184

185+
if (!list && !delete)
186+
if (!argc)
187+
list = 1;
188+
185189
if (list && delete)
186190
usage_msg_opt("-l and -d cannot be used together",
187191
git_replace_usage, options);
188192

189-
if (format && delete)
190-
usage_msg_opt("--format and -d cannot be used together",
193+
if (format && !list)
194+
usage_msg_opt("--format cannot be used when not listing",
191195
git_replace_usage, options);
192196

193197
if (force && (list || delete))
@@ -207,19 +211,13 @@ int cmd_replace(int argc, const char **argv, const char *prefix)
207211
if (argc != 2)
208212
usage_msg_opt("bad number of arguments",
209213
git_replace_usage, options);
210-
if (format)
211-
usage_msg_opt("--format cannot be used when not listing",
212-
git_replace_usage, options);
213214
return replace_object(argv[0], argv[1], force);
214215
}
215216

216217
/* List refs, even if "list" is not set */
217218
if (argc > 1)
218219
usage_msg_opt("only one pattern can be given with -l",
219220
git_replace_usage, options);
220-
if (force)
221-
usage_msg_opt("-f needs some arguments",
222-
git_replace_usage, options);
223221

224222
return list_replace_refs(argv[0], format);
225223
}

0 commit comments

Comments
 (0)