checkout-index: disallow "--no-stage" option

We do not really expect people to use "--no-stage", but if they do, git currently segfaults. We could instead have it undo the effects of a previous "--stage", but this gets tricky around the "to_tempfile" flag. We cannot simply reset it to 0, because we don't know if it was set by a previous "--stage=all" or an explicit "--temp" option. We could solve this by setting a flag and resolving to_tempfile later, but it's not worth the effort. Nobody actually wants to use "--no-stage"; we are just trying to fix a potential segfault here. While we're in the area, let's improve the user-facing messages for this option. The error string should be translatable, and we should give some hint in the "-h" output about what can go in the argument field. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Jan 31, 2016 at 22:18 UTC 22396175267b7bcef97a02036831152539429bec
1 file changed +3 -3
builtin/checkout-index.c
+3 -3
@@ -141,7 +141,7 @@ static int option_parse_stage(const struct option *opt,
141 if ('1' <= ch && ch <= '3')
142 checkout_stage = arg[0] - '0';
143 else
144 - die("stage should be between 1 and 3 or all");
144 + die(_("stage should be between 1 and 3 or all"));
145 }
146 return 0;
147 }
@@ -173,9 +173,9 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
173 N_("write the content to temporary files")),
174 OPT_STRING(0, "prefix", &state.base_dir, N_("string"),
175 N_("when creating files, prepend <string>")),
176 - OPT_CALLBACK(0, "stage", NULL, NULL,
176 + { OPTION_CALLBACK, 0, "stage", NULL, "1-3|all",
177 N_("copy out the files from named stage"),
178 - option_parse_stage),
178 + PARSE_OPT_NONEG, option_parse_stage },
179 OPT_END()
180 };
181