Code

Encode a few extra flags per index entry.
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 16 Apr 2005 04:45:38 +0000 (21:45 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 16 Apr 2005 04:45:38 +0000 (21:45 -0700)
This will allow us to have the same name in different "states" in the
index at the same time. Which in turn seems to be a very simple way to
merge.

cache.h
read-tree.c
update-cache.c

diff --git a/cache.h b/cache.h
index 5b3cd95aa19e8028a9a5b921135356f30b83a02e..bce48b00df855fdd4adf83ca875a17d16b359f54 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -59,10 +59,14 @@ struct cache_entry {
        unsigned int ce_gid;
        unsigned int ce_size;
        unsigned char sha1[20];
-       unsigned short ce_namelen;
+       unsigned short ce_flags;
        char name[0];
 };
 
+#define CE_NAMEMASK (0x0fff)
+#define CE_STAGE1   (0x1000)
+#define CE_STAGE2   (0x2000)
+
 const char *sha1_file_directory;
 struct cache_entry **active_cache;
 unsigned int active_nr, active_alloc;
@@ -71,7 +75,7 @@ unsigned int active_nr, active_alloc;
 #define DEFAULT_DB_ENVIRONMENT ".git/objects"
 
 #define cache_entry_size(len) ((offsetof(struct cache_entry,name) + (len) + 8) & ~7)
-#define ce_namelen(ce) ntohs((ce)->ce_namelen)
+#define ce_namelen(ce) (CE_NAMEMASK & ntohs((ce)->ce_flags))
 #define ce_size(ce) cache_entry_size(ce_namelen(ce))
 
 #define alloc_nr(x) (((x)+16)*3/2)
index 5c6588da4fc95c39e8f5ec8209780509903e56e4..7ee1275b0c603626b9af1103627be070275ed97e 100644 (file)
@@ -14,7 +14,7 @@ static int read_one_entry(unsigned char *sha1, const char *base, int baselen, co
        memset(ce, 0, size);
 
        ce->ce_mode = htonl(mode);
-       ce->ce_namelen = htons(baselen + len);
+       ce->ce_flags = htons(baselen + len);
        memcpy(ce->name, base, baselen);
        memcpy(ce->name + baselen, pathname, len+1);
        memcpy(ce->sha1, sha1, 20);
index 065705a9b4350a907ce7e9ac4e661de894f9fd6a..134ba7439891d698c4b82223a9e872d3a77e5edb 100644 (file)
@@ -107,7 +107,7 @@ static int add_file_to_cache(char *path)
        memcpy(ce->name, path, namelen);
        fill_stat_cache_info(ce, &st);
        ce->ce_mode = htonl(st.st_mode);
-       ce->ce_namelen = htons(namelen);
+       ce->ce_flags = htons(namelen);
 
        if (index_fd(path, namelen, ce, fd, &st) < 0)
                return -1;
@@ -259,7 +259,7 @@ static int add_cacheinfo(char *arg1, char *arg2, char *arg3)
 
        memcpy(ce->sha1, sha1, 20);
        memcpy(ce->name, arg3, len);
-       ce->ce_namelen = htons(len);
+       ce->ce_flags = htons(len);
        ce->ce_mode = htonl(mode);
        return add_cache_entry(ce, allow_add);
 }