mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
Encode a few extra flags per index entry.
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.
This commit is contained in:
parent
13e897e580
commit
f5cabd13d8
8
cache.h
8
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)
|
|
@ -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);
|
|
@ -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);
|
||||
}
|
Loading…
Reference in a new issue