diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2014-06-13 19:19:34 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-06-13 11:49:39 -0700 |
commit | d4a2024aef90fa5dd2b0e5027f9340719ff20748 (patch) | |
tree | 6d69b97c8e8df1d5dc98c3ba138d3d58306f1065 | |
parent | cache-tree: mark istate->cache_changed on prime_cache_tree() (diff) | |
download | tgif-d4a2024aef90fa5dd2b0e5027f9340719ff20748.tar.xz |
entry.c: update cache_changed if refresh_cache is set in checkout_entry()
Other fill_stat_cache_info() is on new entries, which should set
CE_ENTRY_ADDED in cache_changed, so we're safe.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin/apply.c | 8 | ||||
-rw-r--r-- | builtin/checkout-index.c | 1 | ||||
-rw-r--r-- | builtin/checkout.c | 1 | ||||
-rw-r--r-- | cache.h | 1 | ||||
-rw-r--r-- | entry.c | 2 | ||||
-rw-r--r-- | unpack-trees.c | 1 |
6 files changed, 11 insertions, 3 deletions
diff --git a/builtin/apply.c b/builtin/apply.c index 5e13444f9d..adca035983 100644 --- a/builtin/apply.c +++ b/builtin/apply.c @@ -3084,13 +3084,15 @@ static void prepare_fn_table(struct patch *patch) } } -static int checkout_target(struct cache_entry *ce, struct stat *st) +static int checkout_target(struct index_state *istate, + struct cache_entry *ce, struct stat *st) { struct checkout costate; memset(&costate, 0, sizeof(costate)); costate.base_dir = ""; costate.refresh_cache = 1; + costate.istate = istate; if (checkout_entry(ce, &costate, NULL) || lstat(ce->name, st)) return error(_("cannot checkout %s"), ce->name); return 0; @@ -3257,7 +3259,7 @@ static int load_current(struct image *image, struct patch *patch) if (lstat(name, &st)) { if (errno != ENOENT) return error(_("%s: %s"), name, strerror(errno)); - if (checkout_target(ce, &st)) + if (checkout_target(&the_index, ce, &st)) return -1; } if (verify_index_match(ce, &st)) @@ -3411,7 +3413,7 @@ static int check_preimage(struct patch *patch, struct cache_entry **ce, struct s } *ce = active_cache[pos]; if (stat_ret < 0) { - if (checkout_target(*ce, st)) + if (checkout_target(&the_index, *ce, st)) return -1; } if (!cached && verify_index_match(*ce, st)) diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c index 9e49bf2f56..05edd9e1df 100644 --- a/builtin/checkout-index.c +++ b/builtin/checkout-index.c @@ -135,6 +135,7 @@ static int option_parse_u(const struct option *opt, int *newfd = opt->value; state.refresh_cache = 1; + state.istate = &the_index; if (*newfd < 0) *newfd = hold_locked_index(&lock_file, 1); return 0; diff --git a/builtin/checkout.c b/builtin/checkout.c index 944a634bc0..146ab91476 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -336,6 +336,7 @@ static int checkout_paths(const struct checkout_opts *opts, memset(&state, 0, sizeof(state)); state.force = 1; state.refresh_cache = 1; + state.istate = &the_index; for (pos = 0; pos < active_nr; pos++) { struct cache_entry *ce = active_cache[pos]; if (ce->ce_flags & CE_MATCHED) { @@ -1063,6 +1063,7 @@ extern int split_ident_line(struct ident_split *, const char *, int); extern int ident_cmp(const struct ident_split *, const struct ident_split *); struct checkout { + struct index_state *istate; const char *base_dir; int base_dir_len; unsigned force:1, @@ -210,9 +210,11 @@ static int write_entry(struct cache_entry *ce, finish: if (state->refresh_cache) { + assert(state->istate); if (!fstat_done) lstat(ce->name, &st); fill_stat_cache_info(ce, &st); + state->istate->cache_changed |= CE_ENTRY_CHANGED; } return 0; } diff --git a/unpack-trees.c b/unpack-trees.c index 3beff8a8bf..26f65c72fd 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1029,6 +1029,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options state.force = 1; state.quiet = 1; state.refresh_cache = 1; + state.istate = &o->result; memset(&el, 0, sizeof(el)); if (!core_apply_sparse_checkout || !o->update) |