checkout-index: handle "--no-index" option
The parsing of "--index" is done in a callback, but it does
not handle an "unset" option. We don't necessarily expect
anyone to use this, but the current behavior is to treat it
exactly like "--index", which would probably be surprising.
Instead, let's just turn it into an OPT_BOOL, and handle it
after we're done parsing. This makes "--no-index" just work
(it cancels a previous "--index").
As a bonus, this makes the logic easier to follow. The old
code opened the index during the option parsing, leaving the
reader to wonder if there was some timing issue (there
isn't; none of the other options care that we've opened it).
And then if we found that "--prefix" had been given, we had
to rollback the index. Now we can simply avoid opening it in
the first place.
Note that it might make more sense for checkout-index to
complain when "--index --prefix=foo" is given (rather than
silently ignoring "--index"), but since it has been that way
since 415e96c
([PATCH] Implement git-checkout-cache -u to
update stat information in the cache., 2005-05-15), it's
safer to leave it as-is.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
5ed5f671c4
commit
6a6df8aa45
@ -130,18 +130,6 @@ static const char * const builtin_checkout_index_usage[] = {
|
||||
|
||||
static struct lock_file lock_file;
|
||||
|
||||
static int option_parse_u(const struct option *opt,
|
||||
const char *arg, int unset)
|
||||
{
|
||||
int *newfd = opt->value;
|
||||
|
||||
state.refresh_cache = 1;
|
||||
state.istate = &the_index;
|
||||
if (*newfd < 0)
|
||||
*newfd = hold_locked_index(&lock_file, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int option_parse_stage(const struct option *opt,
|
||||
const char *arg, int unset)
|
||||
{
|
||||
@ -166,6 +154,7 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
|
||||
int read_from_stdin = 0;
|
||||
int prefix_length;
|
||||
int force = 0, quiet = 0, not_new = 0;
|
||||
int index_opt = 0;
|
||||
struct option builtin_checkout_index_options[] = {
|
||||
OPT_BOOL('a', "all", &all,
|
||||
N_("check out all files in the index")),
|
||||
@ -174,9 +163,8 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
|
||||
N_("no warning for existing files and files not in index")),
|
||||
OPT_BOOL('n', "no-create", ¬_new,
|
||||
N_("don't checkout new files")),
|
||||
{ OPTION_CALLBACK, 'u', "index", &newfd, NULL,
|
||||
N_("update stat information in the index file"),
|
||||
PARSE_OPT_NOARG, option_parse_u },
|
||||
OPT_BOOL('u', "index", &index_opt,
|
||||
N_("update stat information in the index file")),
|
||||
OPT_BOOL('z', NULL, &nul_term_line,
|
||||
N_("paths are separated with NUL character")),
|
||||
OPT_BOOL(0, "stdin", &read_from_stdin,
|
||||
@ -211,15 +199,13 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
|
||||
state.base_dir = "";
|
||||
state.base_dir_len = strlen(state.base_dir);
|
||||
|
||||
if (state.base_dir_len || to_tempfile) {
|
||||
/* when --prefix is specified we do not
|
||||
* want to update cache.
|
||||
*/
|
||||
if (state.refresh_cache) {
|
||||
rollback_lock_file(&lock_file);
|
||||
newfd = -1;
|
||||
}
|
||||
state.refresh_cache = 0;
|
||||
/*
|
||||
* when --prefix is specified we do not want to update cache.
|
||||
*/
|
||||
if (index_opt && !state.base_dir_len && !to_tempfile) {
|
||||
state.refresh_cache = 1;
|
||||
state.istate = &the_index;
|
||||
newfd = hold_locked_index(&lock_file, 1);
|
||||
}
|
||||
|
||||
/* Check out named files first */
|
||||
|
Loading…
Reference in New Issue
Block a user