If CE_WATCHED is set, CE_VALID is controlled by CE_WATCHED and will be cleared bfore writing to disk. Users of --assume-unchanged therefore need to clear CE_WATCHED to avoid this side effect. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin/update-index.c | 12 ++++++++---- read-cache.c | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/builtin/update-index.c b/builtin/update-index.c index e3a10d7..9283fd6 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -50,9 +50,13 @@ static int mark_ce_flags(const char *path, int flag, int mark) int namelen = strlen(path); int pos = cache_name_pos(path, namelen); if (0 <= pos) { - if (mark) - active_cache[pos]->ce_flags |= flag; - else + if (mark) { + struct cache_entry *ce = active_cache[pos]; + if (flag == CE_VALID) + ce->ce_flags = (ce->ce_flags & ~CE_WATCHED) | CE_VALID; + else + ce->ce_flags |= flag; + } else active_cache[pos]->ce_flags &= ~flag; cache_tree_invalidate_path(active_cache_tree, path); active_cache_changed = 1; @@ -235,7 +239,7 @@ static int add_cacheinfo(unsigned int mode, const unsigned char *sha1, ce->ce_namelen = len; ce->ce_mode = create_ce_mode(mode); if (assume_unchanged) - ce->ce_flags |= CE_VALID; + ce->ce_flags = (ce->ce_flags & ~CE_WATCHED) | CE_VALID; option = allow_add ? ADD_CACHE_OK_TO_ADD : 0; option |= allow_replace ? ADD_CACHE_OK_TO_REPLACE : 0; if (add_cache_entry(ce, option)) diff --git a/read-cache.c b/read-cache.c index 098d3b6..8961864 100644 --- a/read-cache.c +++ b/read-cache.c @@ -133,7 +133,7 @@ void fill_stat_cache_info(struct cache_entry *ce, struct stat *st) fill_stat_data(&ce->ce_stat_data, st); if (assume_unchanged) - ce->ce_flags |= CE_VALID; + ce->ce_flags = (ce->ce_flags & ~CE_WATCHED) | CE_VALID; if (S_ISREG(st->st_mode)) ce_mark_uptodate(ce); -- 1.8.5.2.240.g8478abd -- 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