[PATCH 08/32] read-cache: be specific what part of the index has changed

2014-06-13 Thread Nguyễn Thái Ngọc Duy
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 pclo...@gmail.com
---
 builtin/update-index.c |  6 +++---
 cache.h|  5 +
 read-cache.c   | 11 ++-
 resolve-undo.c |  2 +-
 4 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/builtin/update-index.c b/builtin/update-index.c
index 42cbe4b..d2654d6 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;
}
 
diff --git a/cache.h b/cache.h
index 57ad318..31d4541 100644
--- a/cache.h
+++ b/cache.h
@@ -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 c0c2e39..035c72e 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 44c697c..e9dff57 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)
-- 
1.9.1.346.ga2b5940

--
To unsubscribe from this list: send the line unsubscribe git 

[PATCH 08/32] read-cache: be specific what part of the index has changed

2014-04-28 Thread Nguyễn Thái Ngọc Duy
Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
---
 cache.h  |  4 
 read-cache.c | 11 ++-
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/cache.h b/cache.h
index 57ad318..d692b74 100644
--- a/cache.h
+++ b/cache.h
@@ -268,6 +268,10 @@ static inline unsigned int canon_mode(unsigned int mode)
 
 #define cache_entry_size(len) (offsetof(struct cache_entry,name) + (len) + 1)
 
+#define CE_ENTRY_CHANGED   (1  0)
+#define CE_ENTRY_REMOVED   (1  1)
+#define CE_ENTRY_ADDED (1  2)
+
 struct index_state {
struct cache_entry **cache;
unsigned int version;
diff --git a/read-cache.c b/read-cache.c
index 9819363..6971fc4 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;
-- 
1.9.1.346.ga2b5940

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html