summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c347ea5)
raw | patch | inline | side by side (parent: c347ea5)
author | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Sat, 16 Apr 2005 05:51:44 +0000 (22:51 -0700) | ||
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Sat, 16 Apr 2005 05:51:44 +0000 (22:51 -0700) |
This is what allows us to have multiple states of the same file in
the index, and what makes it always sort correctly.
the index, and what makes it always sort correctly.
cache.h | patch | blob | history | |
read-cache.c | patch | blob | history |
index bce48b00df855fdd4adf83ca875a17d16b359f54..cc8f686b66502e8b741deaa70cd08a7a34437979 100644 (file)
--- a/cache.h
+++ b/cache.h
char name[0];
};
-#define CE_NAMEMASK (0x0fff)
-#define CE_STAGE1 (0x1000)
-#define CE_STAGE2 (0x2000)
+#define CE_NAMEMASK (0x0fff)
+#define CE_STAGEMASK (0x3000)
+
+#define create_ce_flags(len, stage) ((len) | ((stage) << 12))
const char *sha1_file_directory;
struct cache_entry **active_cache;
diff --git a/read-cache.c b/read-cache.c
index 4173b4e454f2a44babedd753894f7ba65ab56880..acc6e236d307c87a20468b25a765426eaebb5137 100644 (file)
--- a/read-cache.c
+++ b/read-cache.c
return changed;
}
-int cache_name_compare(const char *name1, int len1, const char *name2, int len2)
+int cache_name_compare(const char *name1, int flags1, const char *name2, int flags2)
{
+ int len1 = flags1 & CE_NAMEMASK;
+ int len2 = flags2 & CE_NAMEMASK;
int len = len1 < len2 ? len1 : len2;
int cmp;
@@ -325,6 +327,10 @@ int cache_name_compare(const char *name1, int len1, const char *name2, int len2)
return -1;
if (len1 > len2)
return 1;
+ if (flags1 < flags2)
+ return -1;
+ if (flags1 > flags2)
+ return 1;
return 0;
}
while (last > first) {
int next = (last + first) >> 1;
struct cache_entry *ce = active_cache[next];
- int cmp = cache_name_compare(name, namelen, ce->name, ce_namelen(ce));
+ int cmp = cache_name_compare(name, namelen, ce->name, htons(ce->ce_flags));
if (!cmp)
return next;
if (cmp < 0) {
{
int pos;
- pos = cache_name_pos(ce->name, ce_namelen(ce));
+ pos = cache_name_pos(ce->name, htons(ce->ce_flags));
/* existing match? Just replace it */
if (pos >= 0) {