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 }