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 <peff@peff.net> Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Apr 26, 2014 at 22:00 UTC
3f495f67bc4ec744ac60f6e7bec0924022670998
1 file changed
+6
-8
builtin/replace.c
+6
-8
@@ -182,12 +182,16 @@ int cmd_replace(int argc, const char **argv, const char *prefix)
182
183
argc = parse_options(argc, argv, prefix, options, git_replace_usage, 0);
184
185
+ if (!list && !delete)
186
+ if (!argc)
187
+ list = 1;
188
+
189
if (list && delete)
190
usage_msg_opt("-l and -d cannot be used together",
191
git_replace_usage, options);
192
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",
195
git_replace_usage, options);
196
197
if (force && (list || delete))
@@ -207,9 +211,6 @@ int cmd_replace(int argc, const char **argv, const char *prefix)
211
if (argc != 2)
212
usage_msg_opt("bad number of arguments",
213
git_replace_usage, options);
210
- if (format)
211
- usage_msg_opt("--format cannot be used when not listing",
212
- git_replace_usage, options);
214
return replace_object(argv[0], argv[1], force);
215
}
216
@@ -217,9 +218,6 @@ int cmd_replace(int argc, const char **argv, const char *prefix)
218
if (argc > 1)
219
usage_msg_opt("only one pattern can be given with -l",
220
git_replace_usage, options);
220
- if (force)
221
- usage_msg_opt("-f needs some arguments",
222
- git_replace_usage, options);
221
222
return list_replace_refs(argv[0], format);
223
}