Jeff King <peff@xxxxxxxx> writes: > I also reformatted the comment that violated our style > guidelines, but I am not sure if it is all that helpful. It > seems we also cancel "--index" with "--temp" or > "--stage=all", but I do not know why. I left the content > as-is, but if somebody knows enough to elaborate, it might > be worth doing. Isn't the --index about updating the cached stat information, to allow us to then say "the working tree file hasn't been modified since we wrote it out"? After writing a file out to somewhere that is not its natural location (i.e. using prefix, stage or temp would all write the contents of F to somewhere that is not F), the next "diff-files" would not compare the index entry with the contents held in that relocated location, but with its natural location. Admittedly, even if we update the cached stat info from that relocated place, the next "diff-files" would certainly not match (not just mtime but i-num would be different), but if the real working tree file were clean when --temp checkout happened, that would mean we would force another round of update-index --refresh, so... > builtin/checkout-index.c | 34 ++++++++++------------------------ > 1 file changed, 10 insertions(+), 24 deletions(-) > > diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c > index 43bedde..f8179a7 100644 > --- a/builtin/checkout-index.c > +++ b/builtin/checkout-index.c > @@ -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 */ -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html