diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2014-06-13 19:19:27 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-06-13 11:49:38 -0700 |
commit | e636a7b4d0304608fe063ffcbbaf99e46f23dbea (patch) | |
tree | b49b7a71aa55fe85073c4fb4813581e4d9008315 | |
parent | ad837d9ef9d555ab5077767c8672ff48c6cb562b (diff) | |
download | git-e636a7b4d0304608fe063ffcbbaf99e46f23dbea.tar.gz |
read-cache: be specific what part of the index has changed
cache entry additions, removals and modifications are separated
out. The rest of changes are still in the catch-all flag
SOMETHING_CHANGED, which would be more specific later.
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/update-index.c | 6 | ||||
-rw-r--r-- | cache.h | 5 | ||||
-rw-r--r-- | read-cache.c | 11 | ||||
-rw-r--r-- | resolve-undo.c | 2 |
4 files changed, 15 insertions, 9 deletions
diff --git a/builtin/update-index.c b/builtin/update-index.c index 42cbe4ba1e..d2654d643d 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -56,7 +56,7 @@ static int mark_ce_flags(const char *path, int flag, int mark) else active_cache[pos]->ce_flags &= ~flag; cache_tree_invalidate_path(active_cache_tree, path); - active_cache_changed = 1; + active_cache_changed = SOMETHING_CHANGED; return 0; } return -1; @@ -268,7 +268,7 @@ static void chmod_path(int flip, const char *path) goto fail; } cache_tree_invalidate_path(active_cache_tree, path); - active_cache_changed = 1; + active_cache_changed = SOMETHING_CHANGED; report("chmod %cx '%s'", flip, path); return; fail: @@ -889,7 +889,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix) INDEX_FORMAT_LB, INDEX_FORMAT_UB); if (the_index.version != preferred_index_format) - active_cache_changed = 1; + active_cache_changed = SOMETHING_CHANGED; the_index.version = preferred_index_format; } @@ -268,6 +268,11 @@ static inline unsigned int canon_mode(unsigned int mode) #define cache_entry_size(len) (offsetof(struct cache_entry,name) + (len) + 1) +#define SOMETHING_CHANGED (1 << 0) /* unclassified changes go here */ +#define CE_ENTRY_CHANGED (1 << 1) +#define CE_ENTRY_REMOVED (1 << 2) +#define CE_ENTRY_ADDED (1 << 3) + struct index_state { struct cache_entry **cache; unsigned int version; diff --git a/read-cache.c b/read-cache.c index c0c2e39ced..035c72e101 100644 --- a/read-cache.c +++ b/read-cache.c @@ -51,7 +51,7 @@ static void replace_index_entry(struct index_state *istate, int nr, struct cache remove_name_hash(istate, old); free(old); set_index_entry(istate, nr, ce); - istate->cache_changed = 1; + istate->cache_changed |= CE_ENTRY_CHANGED; } void rename_index_entry_at(struct index_state *istate, int nr, const char *new_name) @@ -482,7 +482,7 @@ int remove_index_entry_at(struct index_state *istate, int pos) record_resolve_undo(istate, ce); remove_name_hash(istate, ce); free(ce); - istate->cache_changed = 1; + istate->cache_changed |= CE_ENTRY_REMOVED; istate->cache_nr--; if (pos >= istate->cache_nr) return 0; @@ -512,7 +512,7 @@ void remove_marked_cache_entries(struct index_state *istate) } if (j == istate->cache_nr) return; - istate->cache_changed = 1; + istate->cache_changed |= CE_ENTRY_REMOVED; istate->cache_nr = j; } @@ -1002,7 +1002,7 @@ int add_index_entry(struct index_state *istate, struct cache_entry *ce, int opti istate->cache + pos, (istate->cache_nr - pos - 1) * sizeof(ce)); set_index_entry(istate, pos, ce); - istate->cache_changed = 1; + istate->cache_changed |= CE_ENTRY_ADDED; return 0; } @@ -1101,6 +1101,7 @@ static struct cache_entry *refresh_cache_ent(struct index_state *istate, !(ce->ce_flags & CE_VALID)) updated->ce_flags &= ~CE_VALID; + /* istate->cache_changed is updated in the caller */ return updated; } @@ -1182,7 +1183,7 @@ int refresh_index(struct index_state *istate, unsigned int flags, * means the index is not valid anymore. */ ce->ce_flags &= ~CE_VALID; - istate->cache_changed = 1; + istate->cache_changed |= CE_ENTRY_CHANGED; } if (quiet) continue; diff --git a/resolve-undo.c b/resolve-undo.c index 44c697c36d..e9dff57824 100644 --- a/resolve-undo.c +++ b/resolve-undo.c @@ -110,7 +110,7 @@ void resolve_undo_clear_index(struct index_state *istate) string_list_clear(resolve_undo, 1); free(resolve_undo); istate->resolve_undo = NULL; - istate->cache_changed = 1; + istate->cache_changed = SOMETHING_CHANGED; } int unmerge_index_entry_at(struct index_state *istate, int pos) |