From: Junio C Hamano Date: Wed, 25 Apr 2007 05:13:22 +0000 (-0700) Subject: Merge branch 'jc/the-index' X-Git-Tag: v1.5.2-rc1~29 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/da94faf671c6b7c4db1ae07137bd93e31e232b4c?ds=inline;hp=-c Merge branch 'jc/the-index' * jc/the-index: Make read-cache.c "the_index" free. Move index-related variables into a structure. --- da94faf671c6b7c4db1ae07137bd93e31e232b4c diff --combined cache.h index 23e8f24d5c,74e47dffa2..f05b67ad45 --- a/cache.h +++ b/cache.h @@@ -24,9 -24,6 +24,9 @@@ #define DTYPE(de) DT_UNKNOWN #endif +/* unknown mode (impossible combination S_IFIFO|S_IFCHR) */ +#define S_IFINVALID 0030000 + /* * A "directory link" is a link to another git directory. * @@@ -146,9 -143,37 +146,37 @@@ static inline unsigned int ce_mode_from #define cache_entry_size(len) ((offsetof(struct cache_entry,name) + (len) + 8) & ~7) - extern struct cache_entry **active_cache; - extern unsigned int active_nr, active_alloc, active_cache_changed; - extern struct cache_tree *active_cache_tree; + struct index_state { + struct cache_entry **cache; + unsigned int cache_nr, cache_alloc, cache_changed; + struct cache_tree *cache_tree; + time_t timestamp; + void *mmap; + size_t mmap_size; + }; + + extern struct index_state the_index; + + #ifndef NO_THE_INDEX_COMPATIBILITY_MACROS + #define active_cache (the_index.cache) + #define active_nr (the_index.cache_nr) + #define active_alloc (the_index.cache_alloc) + #define active_cache_changed (the_index.cache_changed) + #define active_cache_tree (the_index.cache_tree) + + #define read_cache() read_index(&the_index) + #define read_cache_from(path) read_index_from(&the_index, (path)) + #define write_cache(newfd, cache, entries) write_index(&the_index, (newfd)) + #define discard_cache() discard_index(&the_index) + #define cache_name_pos(name, namelen) index_name_pos(&the_index,(name),(namelen)) + #define add_cache_entry(ce, option) add_index_entry(&the_index, (ce), (option)) + #define remove_cache_entry_at(pos) remove_index_entry_at(&the_index, (pos)) + #define remove_file_from_cache(path) remove_file_from_index(&the_index, (path)) + #define add_file_to_cache(path, verbose) add_file_to_index(&the_index, (path), (verbose)) + #define refresh_cache(flags) refresh_index(&the_index, flags) + #define ce_match_stat(ce, st, really) ie_match_stat(&the_index, (ce), (st), (really)) + #define ce_modified(ce, st, really) ie_modified(&the_index, (ce), (st), (really)) + #endif enum object_type { OBJ_BAD = -1, @@@ -198,23 -223,23 +226,23 @@@ extern void verify_non_filename(const c #define alloc_nr(x) (((x)+16)*3/2) /* Initialize and use the cache information */ - extern int read_cache(void); - extern int read_cache_from(const char *path); - extern int write_cache(int newfd, struct cache_entry **cache, int entries); - extern int discard_cache(void); + extern int read_index(struct index_state *); + extern int read_index_from(struct index_state *, const char *path); + extern int write_index(struct index_state *, int newfd); + extern int discard_index(struct index_state *); extern int verify_path(const char *path); - extern int cache_name_pos(const char *name, int namelen); + extern int index_name_pos(struct index_state *, const char *name, int namelen); #define ADD_CACHE_OK_TO_ADD 1 /* Ok to add */ #define ADD_CACHE_OK_TO_REPLACE 2 /* Ok to replace file/directory */ #define ADD_CACHE_SKIP_DFCHECK 4 /* Ok to skip DF conflict checks */ - extern int add_cache_entry(struct cache_entry *ce, int option); + extern int add_index_entry(struct index_state *, struct cache_entry *ce, int option); extern struct cache_entry *refresh_cache_entry(struct cache_entry *ce, int really); - extern int remove_cache_entry_at(int pos); - extern int remove_file_from_cache(const char *path); - extern int add_file_to_cache(const char *path, int verbose); + extern int remove_index_entry_at(struct index_state *, int pos); + extern int remove_file_from_index(struct index_state *, const char *path); + extern int add_file_to_index(struct index_state *, const char *path, int verbose); extern int ce_same_name(struct cache_entry *a, struct cache_entry *b); - extern int ce_match_stat(struct cache_entry *ce, struct stat *st, int); - extern int ce_modified(struct cache_entry *ce, struct stat *st, int); + extern int ie_match_stat(struct index_state *, struct cache_entry *, struct stat *, int); + extern int ie_modified(struct index_state *, struct cache_entry *, struct stat *, int); extern int ce_path_match(const struct cache_entry *ce, const char **pathspec); extern int index_fd(unsigned char *sha1, int fd, struct stat *st, int write_object, enum object_type type, const char *path); extern int read_pipe(int fd, char** return_buf, unsigned long* return_size); @@@ -226,7 -251,7 +254,7 @@@ extern void fill_stat_cache_info(struc #define REFRESH_UNMERGED 0x0002 /* allow unmerged */ #define REFRESH_QUIET 0x0004 /* be quiet about it */ #define REFRESH_IGNORE_MISSING 0x0008 /* ignore non-existent */ - extern int refresh_cache(unsigned int flags); + extern int refresh_index(struct index_state *, unsigned int flags); struct lock_file { struct lock_file *next; @@@ -342,7 -367,6 +370,7 @@@ static inline unsigned int hexval(unsig #define DEFAULT_ABBREV 7 extern int get_sha1(const char *str, unsigned char *sha1); +extern int get_sha1_with_mode(const char *str, unsigned char *sha1, unsigned *mode); extern int get_sha1_hex(const char *hex, unsigned char *sha1); extern char *sha1_to_hex(const unsigned char *sha1); /* static buffer result! */ extern int read_ref(const char *filename, unsigned char *sha1);