Git fork

read-cache*.h: move declarations for read-cache.c functions from cache.h

For the functions defined in read-cache.c, move their declarations from
cache.h to a new header, read-cache-ll.h. Also move some related inline
functions from cache.h to read-cache.h. The purpose of the
read-cache-ll.h/read-cache.h split is that about 70% of the sites don't
need the inline functions and the extra headers they include.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

authored by

Elijah Newren and committed by
Junio C Hamano
08c46a49 bc47f16d

+603 -524
+1
add-interactive.c
··· 6 6 #include "gettext.h" 7 7 #include "hex.h" 8 8 #include "preload-index.h" 9 + #include "read-cache-ll.h" 9 10 #include "revision.h" 10 11 #include "refs.h" 11 12 #include "string-list.h"
+1
add-patch.c
··· 6 6 #include "environment.h" 7 7 #include "gettext.h" 8 8 #include "object-name.h" 9 + #include "read-cache-ll.h" 9 10 #include "strbuf.h" 10 11 #include "run-command.h" 11 12 #include "strvec.h"
+1
apply.c
··· 28 28 #include "object-file.h" 29 29 #include "parse-options.h" 30 30 #include "quote.h" 31 + #include "read-cache.h" 31 32 #include "rerere.h" 32 33 #include "apply.h" 33 34 #include "entry.h"
+1
attr.c
··· 16 16 #include "gettext.h" 17 17 #include "utf8.h" 18 18 #include "quote.h" 19 + #include "read-cache-ll.h" 19 20 #include "revision.h" 20 21 #include "object-store.h" 21 22 #include "setup.h"
+1
blame.c
··· 8 8 #include "diffcore.h" 9 9 #include "gettext.h" 10 10 #include "hex.h" 11 + #include "read-cache.h" 11 12 #include "setup.h" 12 13 #include "tag.h" 13 14 #include "trace2.h"
+1
builtin/add.c
··· 20 20 #include "preload-index.h" 21 21 #include "diff.h" 22 22 #include "diffcore.h" 23 + #include "read-cache.h" 23 24 #include "revision.h" 24 25 #include "bulk-checkin.h" 25 26 #include "strvec.h"
+1
builtin/checkout--worker.c
··· 6 6 #include "parallel-checkout.h" 7 7 #include "parse-options.h" 8 8 #include "pkt-line.h" 9 + #include "read-cache-ll.h" 9 10 10 11 static void packet_to_pc_item(const char *buffer, int len, 11 12 struct parallel_checkout_item *pc_item)
+1
builtin/checkout-index.c
··· 16 16 #include "parse-options.h" 17 17 #include "entry.h" 18 18 #include "parallel-checkout.h" 19 + #include "read-cache-ll.h" 19 20 #include "setup.h" 20 21 #include "sparse-index.h" 21 22
+1
builtin/checkout.c
··· 21 21 #include "object-store.h" 22 22 #include "parse-options.h" 23 23 #include "preload-index.h" 24 + #include "read-cache.h" 24 25 #include "refs.h" 25 26 #include "remote.h" 26 27 #include "resolve-undo.h"
+1
builtin/clean.c
··· 14 14 #include "dir.h" 15 15 #include "gettext.h" 16 16 #include "parse-options.h" 17 + #include "read-cache-ll.h" 17 18 #include "repository.h" 18 19 #include "setup.h" 19 20 #include "string-list.h"
+1
builtin/commit.c
··· 31 31 #include "object-name.h" 32 32 #include "parse-options.h" 33 33 #include "preload-index.h" 34 + #include "read-cache.h" 34 35 #include "string-list.h" 35 36 #include "rerere.h" 36 37 #include "unpack-trees.h"
+1
builtin/describe.c
··· 13 13 #include "exec-cmd.h" 14 14 #include "object-name.h" 15 15 #include "parse-options.h" 16 + #include "read-cache-ll.h" 16 17 #include "revision.h" 17 18 #include "diff.h" 18 19 #include "hashmap.h"
+1
builtin/diff-tree.c
··· 8 8 #include "log-tree.h" 9 9 #include "builtin.h" 10 10 #include "submodule.h" 11 + #include "read-cache-ll.h" 11 12 #include "repository.h" 12 13 #include "tree.h" 13 14
+1
builtin/diff.c
··· 17 17 #include "diff-merges.h" 18 18 #include "diffcore.h" 19 19 #include "preload-index.h" 20 + #include "read-cache-ll.h" 20 21 #include "revision.h" 21 22 #include "log-tree.h" 22 23 #include "builtin.h"
+1
builtin/difftool.c
··· 23 23 #include "gettext.h" 24 24 #include "hex.h" 25 25 #include "parse-options.h" 26 + #include "read-cache-ll.h" 26 27 #include "sparse-index.h" 27 28 #include "strvec.h" 28 29 #include "strbuf.h"
+1
builtin/fsck.c
··· 22 22 #include "object-file.h" 23 23 #include "object-name.h" 24 24 #include "object-store.h" 25 + #include "read-cache-ll.h" 25 26 #include "replace-object.h" 26 27 #include "resolve-undo.h" 27 28 #include "run-command.h"
+1
builtin/grep.c
··· 31 31 #include "object-store.h" 32 32 #include "packfile.h" 33 33 #include "pager.h" 34 + #include "read-cache-ll.h" 34 35 #include "write-or-die.h" 35 36 36 37 static const char *grep_prefix;
+1
builtin/ls-files.c
··· 21 21 #include "resolve-undo.h" 22 22 #include "string-list.h" 23 23 #include "pathspec.h" 24 + #include "read-cache.h" 24 25 #include "run-command.h" 25 26 #include "setup.h" 26 27 #include "sparse-index.h"
+1
builtin/merge-index.c
··· 1 1 #define USE_THE_INDEX_VARIABLE 2 2 #include "builtin.h" 3 3 #include "hex.h" 4 + #include "read-cache-ll.h" 4 5 #include "repository.h" 5 6 #include "run-command.h" 6 7 #include "sparse-index.h"
+1
builtin/mv.c
··· 19 19 #include "cache-tree.h" 20 20 #include "string-list.h" 21 21 #include "parse-options.h" 22 + #include "read-cache-ll.h" 22 23 #include "repository.h" 23 24 #include "setup.h" 24 25 #include "submodule.h"
+1
builtin/pull.c
··· 20 20 #include "oid-array.h" 21 21 #include "remote.h" 22 22 #include "dir.h" 23 + #include "read-cache-ll.h" 23 24 #include "rebase.h" 24 25 #include "refs.h" 25 26 #include "refspec.h"
+1
builtin/rev-parse.c
··· 18 18 #include "object-name.h" 19 19 #include "parse-options.h" 20 20 #include "diff.h" 21 + #include "read-cache-ll.h" 21 22 #include "revision.h" 22 23 #include "setup.h" 23 24 #include "split-index.h"
+1
builtin/rm.c
··· 16 16 #include "tree-walk.h" 17 17 #include "object-name.h" 18 18 #include "parse-options.h" 19 + #include "read-cache.h" 19 20 #include "repository.h" 20 21 #include "string-list.h" 21 22 #include "setup.h"
+1
builtin/stash.c
··· 18 18 #include "dir.h" 19 19 #include "entry.h" 20 20 #include "preload-index.h" 21 + #include "read-cache.h" 21 22 #include "rerere.h" 22 23 #include "revision.h" 23 24 #include "setup.h"
+1
builtin/submodule--helper.c
··· 13 13 #include "pathspec.h" 14 14 #include "preload-index.h" 15 15 #include "dir.h" 16 + #include "read-cache.h" 16 17 #include "setup.h" 17 18 #include "sparse-index.h" 18 19 #include "submodule.h"
+1
builtin/update-index.c
··· 22 22 #include "parse-options.h" 23 23 #include "pathspec.h" 24 24 #include "dir.h" 25 + #include "read-cache.h" 25 26 #include "repository.h" 26 27 #include "setup.h" 27 28 #include "sparse-index.h"
+1
builtin/worktree.c
··· 13 13 #include "parse-options.h" 14 14 #include "strvec.h" 15 15 #include "branch.h" 16 + #include "read-cache-ll.h" 16 17 #include "refs.h" 17 18 #include "repository.h" 18 19 #include "run-command.h"
+1
cache-tree.c
··· 9 9 #include "bulk-checkin.h" 10 10 #include "object-file.h" 11 11 #include "object-store.h" 12 + #include "read-cache-ll.h" 12 13 #include "replace-object.h" 13 14 #include "promisor-remote.h" 14 15 #include "sparse-index.h"
-520
cache.h
··· 2 2 #define CACHE_H 3 3 4 4 #include "git-compat-util.h" 5 - #include "strbuf.h" 6 - #include "hashmap.h" 7 - #include "pathspec.h" 8 - #include "object.h" 9 - #include "statinfo.h" 10 - 11 - /* 12 - * Basic data structures for the directory cache 13 - */ 14 - 15 - #define CACHE_SIGNATURE 0x44495243 /* "DIRC" */ 16 - struct cache_header { 17 - uint32_t hdr_signature; 18 - uint32_t hdr_version; 19 - uint32_t hdr_entries; 20 - }; 21 - 22 - #define INDEX_FORMAT_LB 2 23 - #define INDEX_FORMAT_UB 4 24 - 25 - struct cache_entry { 26 - struct hashmap_entry ent; 27 - struct stat_data ce_stat_data; 28 - unsigned int ce_mode; 29 - unsigned int ce_flags; 30 - unsigned int mem_pool_allocated; 31 - unsigned int ce_namelen; 32 - unsigned int index; /* for link extension */ 33 - struct object_id oid; 34 - char name[FLEX_ARRAY]; /* more */ 35 - }; 36 - 37 - #define CE_STAGEMASK (0x3000) 38 - #define CE_EXTENDED (0x4000) 39 - #define CE_VALID (0x8000) 40 - #define CE_STAGESHIFT 12 41 - 42 - /* 43 - * Range 0xFFFF0FFF in ce_flags is divided into 44 - * two parts: in-memory flags and on-disk ones. 45 - * Flags in CE_EXTENDED_FLAGS will get saved on-disk 46 - * if you want to save a new flag, add it in 47 - * CE_EXTENDED_FLAGS 48 - * 49 - * In-memory only flags 50 - */ 51 - #define CE_UPDATE (1 << 16) 52 - #define CE_REMOVE (1 << 17) 53 - #define CE_UPTODATE (1 << 18) 54 - #define CE_ADDED (1 << 19) 55 - 56 - #define CE_HASHED (1 << 20) 57 - #define CE_FSMONITOR_VALID (1 << 21) 58 - #define CE_WT_REMOVE (1 << 22) /* remove in work directory */ 59 - #define CE_CONFLICTED (1 << 23) 60 - 61 - #define CE_UNPACKED (1 << 24) 62 - #define CE_NEW_SKIP_WORKTREE (1 << 25) 63 - 64 - /* used to temporarily mark paths matched by pathspecs */ 65 - #define CE_MATCHED (1 << 26) 66 - 67 - #define CE_UPDATE_IN_BASE (1 << 27) 68 - #define CE_STRIP_NAME (1 << 28) 69 - 70 - /* 71 - * Extended on-disk flags 72 - */ 73 - #define CE_INTENT_TO_ADD (1 << 29) 74 - #define CE_SKIP_WORKTREE (1 << 30) 75 - /* CE_EXTENDED2 is for future extension */ 76 - #define CE_EXTENDED2 (1U << 31) 77 - 78 - #define CE_EXTENDED_FLAGS (CE_INTENT_TO_ADD | CE_SKIP_WORKTREE) 79 - 80 - /* 81 - * Safeguard to avoid saving wrong flags: 82 - * - CE_EXTENDED2 won't get saved until its semantic is known 83 - * - Bits in 0x0000FFFF have been saved in ce_flags already 84 - * - Bits in 0x003F0000 are currently in-memory flags 85 - */ 86 - #if CE_EXTENDED_FLAGS & 0x803FFFFF 87 - #error "CE_EXTENDED_FLAGS out of range" 88 - #endif 89 - 90 - /* Forward structure decls */ 91 - struct pathspec; 92 - struct tree; 93 - 94 - /* 95 - * Copy the sha1 and stat state of a cache entry from one to 96 - * another. But we never change the name, or the hash state! 97 - */ 98 - static inline void copy_cache_entry(struct cache_entry *dst, 99 - const struct cache_entry *src) 100 - { 101 - unsigned int state = dst->ce_flags & CE_HASHED; 102 - int mem_pool_allocated = dst->mem_pool_allocated; 103 - 104 - /* Don't copy hash chain and name */ 105 - memcpy(&dst->ce_stat_data, &src->ce_stat_data, 106 - offsetof(struct cache_entry, name) - 107 - offsetof(struct cache_entry, ce_stat_data)); 108 - 109 - /* Restore the hash state */ 110 - dst->ce_flags = (dst->ce_flags & ~CE_HASHED) | state; 111 - 112 - /* Restore the mem_pool_allocated flag */ 113 - dst->mem_pool_allocated = mem_pool_allocated; 114 - } 115 - 116 - static inline unsigned create_ce_flags(unsigned stage) 117 - { 118 - return (stage << CE_STAGESHIFT); 119 - } 120 - 121 - #define ce_namelen(ce) ((ce)->ce_namelen) 122 - #define ce_size(ce) cache_entry_size(ce_namelen(ce)) 123 - #define ce_stage(ce) ((CE_STAGEMASK & (ce)->ce_flags) >> CE_STAGESHIFT) 124 - #define ce_uptodate(ce) ((ce)->ce_flags & CE_UPTODATE) 125 - #define ce_skip_worktree(ce) ((ce)->ce_flags & CE_SKIP_WORKTREE) 126 - #define ce_mark_uptodate(ce) ((ce)->ce_flags |= CE_UPTODATE) 127 - #define ce_intent_to_add(ce) ((ce)->ce_flags & CE_INTENT_TO_ADD) 128 - 129 - static inline unsigned int ce_mode_from_stat(const struct cache_entry *ce, 130 - unsigned int mode) 131 - { 132 - extern int trust_executable_bit, has_symlinks; 133 - if (!has_symlinks && S_ISREG(mode) && 134 - ce && S_ISLNK(ce->ce_mode)) 135 - return ce->ce_mode; 136 - if (!trust_executable_bit && S_ISREG(mode)) { 137 - if (ce && S_ISREG(ce->ce_mode)) 138 - return ce->ce_mode; 139 - return create_ce_mode(0666); 140 - } 141 - return create_ce_mode(mode); 142 - } 143 - static inline int ce_to_dtype(const struct cache_entry *ce) 144 - { 145 - unsigned ce_mode = ntohl(ce->ce_mode); 146 - if (S_ISREG(ce_mode)) 147 - return DT_REG; 148 - else if (S_ISDIR(ce_mode) || S_ISGITLINK(ce_mode)) 149 - return DT_DIR; 150 - else if (S_ISLNK(ce_mode)) 151 - return DT_LNK; 152 - else 153 - return DT_UNKNOWN; 154 - } 155 - 156 - static inline int ce_path_match(struct index_state *istate, 157 - const struct cache_entry *ce, 158 - const struct pathspec *pathspec, 159 - char *seen) 160 - { 161 - return match_pathspec(istate, pathspec, ce->name, ce_namelen(ce), 0, seen, 162 - S_ISDIR(ce->ce_mode) || S_ISGITLINK(ce->ce_mode)); 163 - } 164 - 165 - #define cache_entry_size(len) (offsetof(struct cache_entry,name) + (len) + 1) 166 - 167 - #define SOMETHING_CHANGED (1 << 0) /* unclassified changes go here */ 168 - #define CE_ENTRY_CHANGED (1 << 1) 169 - #define CE_ENTRY_REMOVED (1 << 2) 170 - #define CE_ENTRY_ADDED (1 << 3) 171 - #define RESOLVE_UNDO_CHANGED (1 << 4) 172 - #define CACHE_TREE_CHANGED (1 << 5) 173 - #define SPLIT_INDEX_ORDERED (1 << 6) 174 - #define UNTRACKED_CHANGED (1 << 7) 175 - #define FSMONITOR_CHANGED (1 << 8) 176 - 177 - struct split_index; 178 - struct untracked_cache; 179 - struct progress; 180 - struct pattern_list; 181 - 182 - enum sparse_index_mode { 183 - /* 184 - * There are no sparse directories in the index at all. 185 - * 186 - * Repositories that don't use cone-mode sparse-checkout will 187 - * always have their indexes in this mode. 188 - */ 189 - INDEX_EXPANDED = 0, 190 - 191 - /* 192 - * The index has already been collapsed to sparse directories 193 - * whereever possible. 194 - */ 195 - INDEX_COLLAPSED, 196 - 197 - /* 198 - * The sparse directories that exist are outside the 199 - * sparse-checkout boundary, but it is possible that some file 200 - * entries could collapse to sparse directory entries. 201 - */ 202 - INDEX_PARTIALLY_SPARSE, 203 - }; 204 - 205 - struct index_state { 206 - struct cache_entry **cache; 207 - unsigned int version; 208 - unsigned int cache_nr, cache_alloc, cache_changed; 209 - struct string_list *resolve_undo; 210 - struct cache_tree *cache_tree; 211 - struct split_index *split_index; 212 - struct cache_time timestamp; 213 - unsigned name_hash_initialized : 1, 214 - initialized : 1, 215 - drop_cache_tree : 1, 216 - updated_workdir : 1, 217 - updated_skipworktree : 1, 218 - fsmonitor_has_run_once : 1; 219 - enum sparse_index_mode sparse_index; 220 - struct hashmap name_hash; 221 - struct hashmap dir_hash; 222 - struct object_id oid; 223 - struct untracked_cache *untracked; 224 - char *fsmonitor_last_update; 225 - struct ewah_bitmap *fsmonitor_dirty; 226 - struct mem_pool *ce_mem_pool; 227 - struct progress *progress; 228 - struct repository *repo; 229 - struct pattern_list *sparse_checkout_patterns; 230 - }; 231 - 232 - /** 233 - * A "struct index_state istate" must be initialized with 234 - * INDEX_STATE_INIT or the corresponding index_state_init(). 235 - * 236 - * If the variable won't be used again, use release_index() to free() 237 - * its resources. If it needs to be used again use discard_index(), 238 - * which does the same thing, but will use use index_state_init() at 239 - * the end. The discard_index() will use its own "istate->repo" as the 240 - * "r" argument to index_state_init() in that case. 241 - */ 242 - #define INDEX_STATE_INIT(r) { \ 243 - .repo = (r), \ 244 - } 245 - void index_state_init(struct index_state *istate, struct repository *r); 246 - void release_index(struct index_state *istate); 247 - 248 - /* Cache entry creation and cleanup */ 249 - 250 - /* 251 - * Create cache_entry intended for use in the specified index. Caller 252 - * is responsible for discarding the cache_entry with 253 - * `discard_cache_entry`. 254 - */ 255 - struct cache_entry *make_cache_entry(struct index_state *istate, 256 - unsigned int mode, 257 - const struct object_id *oid, 258 - const char *path, 259 - int stage, 260 - unsigned int refresh_options); 261 - 262 - struct cache_entry *make_empty_cache_entry(struct index_state *istate, 263 - size_t name_len); 264 - 265 - /* 266 - * Create a cache_entry that is not intended to be added to an index. If 267 - * `ce_mem_pool` is not NULL, the entry is allocated within the given memory 268 - * pool. Caller is responsible for discarding "loose" entries with 269 - * `discard_cache_entry()` and the memory pool with 270 - * `mem_pool_discard(ce_mem_pool, should_validate_cache_entries())`. 271 - */ 272 - struct cache_entry *make_transient_cache_entry(unsigned int mode, 273 - const struct object_id *oid, 274 - const char *path, 275 - int stage, 276 - struct mem_pool *ce_mem_pool); 277 - 278 - struct cache_entry *make_empty_transient_cache_entry(size_t len, 279 - struct mem_pool *ce_mem_pool); 280 - 281 - /* 282 - * Discard cache entry. 283 - */ 284 - void discard_cache_entry(struct cache_entry *ce); 285 - 286 - /* 287 - * Check configuration if we should perform extra validation on cache 288 - * entries. 289 - */ 290 - int should_validate_cache_entries(void); 291 - 292 - /* 293 - * Duplicate a cache_entry. Allocate memory for the new entry from a 294 - * memory_pool. Takes into account cache_entry fields that are meant 295 - * for managing the underlying memory allocation of the cache_entry. 296 - */ 297 - struct cache_entry *dup_cache_entry(const struct cache_entry *ce, struct index_state *istate); 298 - 299 - /* 300 - * Validate the cache entries in the index. This is an internal 301 - * consistency check that the cache_entry structs are allocated from 302 - * the expected memory pool. 303 - */ 304 - void validate_cache_entries(const struct index_state *istate); 305 - 306 - /* 307 - * Bulk prefetch all missing cache entries that are not GITLINKs and that match 308 - * the given predicate. This function should only be called if 309 - * repo_has_promisor_remote() returns true. 310 - */ 311 - typedef int (*must_prefetch_predicate)(const struct cache_entry *); 312 - void prefetch_cache_entries(const struct index_state *istate, 313 - must_prefetch_predicate must_prefetch); 314 - 315 - /* Initialize and use the cache information */ 316 - struct lock_file; 317 - int do_read_index(struct index_state *istate, const char *path, 318 - int must_exist); /* for testting only! */ 319 - int read_index_from(struct index_state *, const char *path, 320 - const char *gitdir); 321 - int is_index_unborn(struct index_state *); 322 - 323 - /* For use with `write_locked_index()`. */ 324 - #define COMMIT_LOCK (1 << 0) 325 - #define SKIP_IF_UNCHANGED (1 << 1) 326 - 327 - /* 328 - * Write the index while holding an already-taken lock. Close the lock, 329 - * and if `COMMIT_LOCK` is given, commit it. 330 - * 331 - * Unless a split index is in use, write the index into the lockfile. 332 - * 333 - * With a split index, write the shared index to a temporary file, 334 - * adjust its permissions and rename it into place, then write the 335 - * split index to the lockfile. If the temporary file for the shared 336 - * index cannot be created, fall back to the behavior described in 337 - * the previous paragraph. 338 - * 339 - * With `COMMIT_LOCK`, the lock is always committed or rolled back. 340 - * Without it, the lock is closed, but neither committed nor rolled 341 - * back. 342 - * 343 - * If `SKIP_IF_UNCHANGED` is given and the index is unchanged, nothing 344 - * is written (and the lock is rolled back if `COMMIT_LOCK` is given). 345 - */ 346 - int write_locked_index(struct index_state *, struct lock_file *lock, unsigned flags); 347 - 348 - void discard_index(struct index_state *); 349 - void move_index_extensions(struct index_state *dst, struct index_state *src); 350 - int unmerged_index(const struct index_state *); 351 - 352 - /** 353 - * Returns 1 if istate differs from tree, 0 otherwise. If tree is NULL, 354 - * compares istate to HEAD. If tree is NULL and on an unborn branch, 355 - * returns 1 if there are entries in istate, 0 otherwise. If an strbuf is 356 - * provided, the space-separated list of files that differ will be appended 357 - * to it. 358 - */ 359 - int repo_index_has_changes(struct repository *repo, 360 - struct tree *tree, 361 - struct strbuf *sb); 362 - 363 - int verify_path(const char *path, unsigned mode); 364 - int strcmp_offset(const char *s1, const char *s2, size_t *first_change); 365 - 366 - /* 367 - * Searches for an entry defined by name and namelen in the given index. 368 - * If the return value is positive (including 0) it is the position of an 369 - * exact match. If the return value is negative, the negated value minus 1 370 - * is the position where the entry would be inserted. 371 - * Example: The current index consists of these files and its stages: 372 - * 373 - * b#0, d#0, f#1, f#3 374 - * 375 - * index_name_pos(&index, "a", 1) -> -1 376 - * index_name_pos(&index, "b", 1) -> 0 377 - * index_name_pos(&index, "c", 1) -> -2 378 - * index_name_pos(&index, "d", 1) -> 1 379 - * index_name_pos(&index, "e", 1) -> -3 380 - * index_name_pos(&index, "f", 1) -> -3 381 - * index_name_pos(&index, "g", 1) -> -5 382 - */ 383 - int index_name_pos(struct index_state *, const char *name, int namelen); 384 - 385 - /* 386 - * Like index_name_pos, returns the position of an entry of the given name in 387 - * the index if one exists, otherwise returns a negative value where the negated 388 - * value minus 1 is the position where the index entry would be inserted. Unlike 389 - * index_name_pos, however, a sparse index is not expanded to find an entry 390 - * inside a sparse directory. 391 - */ 392 - int index_name_pos_sparse(struct index_state *, const char *name, int namelen); 393 - 394 - /* 395 - * Determines whether an entry with the given name exists within the 396 - * given index. The return value is 1 if an exact match is found, otherwise 397 - * it is 0. Note that, unlike index_name_pos, this function does not expand 398 - * the index if it is sparse. If an item exists within the full index but it 399 - * is contained within a sparse directory (and not in the sparse index), 0 is 400 - * returned. 401 - */ 402 - int index_entry_exists(struct index_state *, const char *name, int namelen); 403 - 404 - /* 405 - * Some functions return the negative complement of an insert position when a 406 - * precise match was not found but a position was found where the entry would 407 - * need to be inserted. This helper protects that logic from any integer 408 - * underflow. 409 - */ 410 - static inline int index_pos_to_insert_pos(uintmax_t pos) 411 - { 412 - if (pos > INT_MAX) 413 - die("overflow: -1 - %"PRIuMAX, pos); 414 - return -1 - (int)pos; 415 - } 416 - 417 - #define ADD_CACHE_OK_TO_ADD 1 /* Ok to add */ 418 - #define ADD_CACHE_OK_TO_REPLACE 2 /* Ok to replace file/directory */ 419 - #define ADD_CACHE_SKIP_DFCHECK 4 /* Ok to skip DF conflict checks */ 420 - #define ADD_CACHE_JUST_APPEND 8 /* Append only */ 421 - #define ADD_CACHE_NEW_ONLY 16 /* Do not replace existing ones */ 422 - #define ADD_CACHE_KEEP_CACHE_TREE 32 /* Do not invalidate cache-tree */ 423 - #define ADD_CACHE_RENORMALIZE 64 /* Pass along HASH_RENORMALIZE */ 424 - int add_index_entry(struct index_state *, struct cache_entry *ce, int option); 425 - void rename_index_entry_at(struct index_state *, int pos, const char *new_name); 426 - 427 - /* Remove entry, return true if there are more entries to go. */ 428 - int remove_index_entry_at(struct index_state *, int pos); 429 - 430 - void remove_marked_cache_entries(struct index_state *istate, int invalidate); 431 - int remove_file_from_index(struct index_state *, const char *path); 432 - #define ADD_CACHE_VERBOSE 1 433 - #define ADD_CACHE_PRETEND 2 434 - #define ADD_CACHE_IGNORE_ERRORS 4 435 - #define ADD_CACHE_IGNORE_REMOVAL 8 436 - #define ADD_CACHE_INTENT 16 437 - /* 438 - * These two are used to add the contents of the file at path 439 - * to the index, marking the working tree up-to-date by storing 440 - * the cached stat info in the resulting cache entry. A caller 441 - * that has already run lstat(2) on the path can call 442 - * add_to_index(), and all others can call add_file_to_index(); 443 - * the latter will do necessary lstat(2) internally before 444 - * calling the former. 445 - */ 446 - int add_to_index(struct index_state *, const char *path, struct stat *, int flags); 447 - int add_file_to_index(struct index_state *, const char *path, int flags); 448 - 449 - int chmod_index_entry(struct index_state *, struct cache_entry *ce, char flip); 450 - int ce_same_name(const struct cache_entry *a, const struct cache_entry *b); 451 - void set_object_name_for_intent_to_add_entry(struct cache_entry *ce); 452 - int index_name_is_other(struct index_state *, const char *, int); 453 - void *read_blob_data_from_index(struct index_state *, const char *, unsigned long *); 454 - 455 - /* do stat comparison even if CE_VALID is true */ 456 - #define CE_MATCH_IGNORE_VALID 01 457 - /* do not check the contents but report dirty on racily-clean entries */ 458 - #define CE_MATCH_RACY_IS_DIRTY 02 459 - /* do stat comparison even if CE_SKIP_WORKTREE is true */ 460 - #define CE_MATCH_IGNORE_SKIP_WORKTREE 04 461 - /* ignore non-existent files during stat update */ 462 - #define CE_MATCH_IGNORE_MISSING 0x08 463 - /* enable stat refresh */ 464 - #define CE_MATCH_REFRESH 0x10 465 - /* don't refresh_fsmonitor state or do stat comparison even if CE_FSMONITOR_VALID is true */ 466 - #define CE_MATCH_IGNORE_FSMONITOR 0X20 467 - int is_racy_timestamp(const struct index_state *istate, 468 - const struct cache_entry *ce); 469 - int has_racy_timestamp(struct index_state *istate); 470 - int ie_match_stat(struct index_state *, const struct cache_entry *, struct stat *, unsigned int); 471 - int ie_modified(struct index_state *, const struct cache_entry *, struct stat *, unsigned int); 472 - 473 - int match_stat_data_racy(const struct index_state *istate, 474 - const struct stat_data *sd, struct stat *st); 475 - 476 - void fill_stat_cache_info(struct index_state *istate, struct cache_entry *ce, struct stat *st); 477 - 478 - #define REFRESH_REALLY (1 << 0) /* ignore_valid */ 479 - #define REFRESH_UNMERGED (1 << 1) /* allow unmerged */ 480 - #define REFRESH_QUIET (1 << 2) /* be quiet about it */ 481 - #define REFRESH_IGNORE_MISSING (1 << 3) /* ignore non-existent */ 482 - #define REFRESH_IGNORE_SUBMODULES (1 << 4) /* ignore submodules */ 483 - #define REFRESH_IN_PORCELAIN (1 << 5) /* user friendly output, not "needs update" */ 484 - #define REFRESH_PROGRESS (1 << 6) /* show progress bar if stderr is tty */ 485 - #define REFRESH_IGNORE_SKIP_WORKTREE (1 << 7) /* ignore skip_worktree entries */ 486 - int refresh_index(struct index_state *, unsigned int flags, const struct pathspec *pathspec, char *seen, const char *header_msg); 487 - /* 488 - * Refresh the index and write it to disk. 489 - * 490 - * 'refresh_flags' is passed directly to 'refresh_index()', while 491 - * 'COMMIT_LOCK | write_flags' is passed to 'write_locked_index()', so 492 - * the lockfile is always either committed or rolled back. 493 - * 494 - * If 'gentle' is passed, errors locking the index are ignored. 495 - * 496 - * Return 1 if refreshing the index returns an error, -1 if writing 497 - * the index to disk fails, 0 on success. 498 - * 499 - * Note that if refreshing the index returns an error, we still write 500 - * out the index (unless locking fails). 501 - */ 502 - int repo_refresh_and_write_index(struct repository*, unsigned int refresh_flags, unsigned int write_flags, int gentle, const struct pathspec *, char *seen, const char *header_msg); 503 - 504 - struct cache_entry *refresh_cache_entry(struct index_state *, struct cache_entry *, unsigned int); 505 - 506 - void set_alternate_index_output(const char *); 507 - 508 - extern int verify_index_checksum; 509 - extern int verify_ce_order; 510 - 511 - int cmp_cache_name_compare(const void *a_, const void *b_); 512 - 513 - /* add */ 514 - /* 515 - * return 0 if success, 1 - if addition of a file failed and 516 - * ADD_FILES_IGNORE_ERRORS was specified in flags 517 - */ 518 - int add_files_to_cache(struct repository *repo, const char *prefix, 519 - const struct pathspec *pathspec, int include_sparse, 520 - int flags); 521 - 522 - /* ls-files */ 523 - void overlay_tree_on_index(struct index_state *istate, 524 - const char *tree_name, const char *prefix); 525 5 526 6 #endif /* CACHE_H */
+1
compat/precompose_utf8.c
··· 10 10 #include "environment.h" 11 11 #include "gettext.h" 12 12 #include "path.h" 13 + #include "strbuf.h" 13 14 #include "utf8.h" 14 15 #include "precompose_utf8.h" 15 16
+1
compat/sha1-chunked.c
··· 1 1 #include "cache.h" 2 + #include "hash-ll.h" 2 3 3 4 int git_SHA1_Update_Chunked(platform_SHA_CTX *c, const void *data, size_t len) 4 5 {
+1
config.c
··· 33 33 #include "replace-object.h" 34 34 #include "refs.h" 35 35 #include "setup.h" 36 + #include "strvec.h" 36 37 #include "trace2.h" 37 38 #include "worktree.h" 38 39 #include "ws.h"
+1
convert.c
··· 9 9 #include "attr.h" 10 10 #include "run-command.h" 11 11 #include "quote.h" 12 + #include "read-cache-ll.h" 12 13 #include "sigchain.h" 13 14 #include "pkt-line.h" 14 15 #include "sub-process.h"
+1
diff-lib.c
··· 9 9 #include "gettext.h" 10 10 #include "hex.h" 11 11 #include "object-name.h" 12 + #include "read-cache.h" 12 13 #include "revision.h" 13 14 #include "cache-tree.h" 14 15 #include "unpack-trees.h"
+1
diff.c
··· 39 39 #include "dir.h" 40 40 #include "object-file.h" 41 41 #include "object-name.h" 42 + #include "read-cache-ll.h" 42 43 #include "setup.h" 43 44 #include "strmap.h" 44 45 #include "ws.h"
+2 -1
diffcore-break.c
··· 1 1 /* 2 2 * Copyright (C) 2005 Junio C Hamano 3 3 */ 4 - #include "cache.h" 4 + #include "git-compat-util.h" 5 5 #include "diff.h" 6 6 #include "diffcore.h" 7 + #include "object.h" 7 8 #include "promisor-remote.h" 8 9 9 10 static int should_break(struct repository *r,
+1 -2
environment.h
··· 1 1 #ifndef ENVIRONMENT_H 2 2 #define ENVIRONMENT_H 3 3 4 - #include "strvec.h" 5 - 6 4 struct repository; 5 + struct strvec; 7 6 8 7 /* 9 8 * The character that begins a commented line in user-editable file
+2
fsmonitor.h
··· 4 4 #include "cache.h" 5 5 #include "dir.h" 6 6 #include "fsmonitor-settings.h" 7 + #include "object.h" 8 + #include "read-cache-ll.h" 7 9 #include "trace.h" 8 10 9 11 extern struct trace_key trace_fsmonitor;
+1
git.c
··· 5 5 #include "gettext.h" 6 6 #include "help.h" 7 7 #include "pager.h" 8 + #include "read-cache-ll.h" 8 9 #include "run-command.h" 9 10 #include "alias.h" 10 11 #include "replace-object.h"
+1
hash-lookup.c
··· 1 1 #include "cache.h" 2 2 #include "hash.h" 3 3 #include "hash-lookup.h" 4 + #include "read-cache-ll.h" 4 5 5 6 static uint32_t take2(const struct object_id *oid, size_t ofs) 6 7 {
+1
merge-ort-wrappers.c
··· 3 3 #include "hash.h" 4 4 #include "merge-ort.h" 5 5 #include "merge-ort-wrappers.h" 6 + #include "read-cache-ll.h" 6 7 #include "tree.h" 7 8 8 9 #include "commit.h"
+1
merge-ort.c
··· 37 37 #include "object-store.h" 38 38 #include "oid-array.h" 39 39 #include "promisor-remote.h" 40 + #include "read-cache-ll.h" 40 41 #include "revision.h" 41 42 #include "sparse-index.h" 42 43 #include "strmap.h"
+2
name-hash.c
··· 9 9 #include "environment.h" 10 10 #include "gettext.h" 11 11 #include "name-hash.h" 12 + #include "object.h" 13 + #include "read-cache-ll.h" 12 14 #include "thread-utils.h" 13 15 #include "trace.h" 14 16 #include "trace2.h"
+1
object-name.c
··· 18 18 #include "packfile.h" 19 19 #include "pretty.h" 20 20 #include "object-store.h" 21 + #include "read-cache-ll.h" 21 22 #include "repository.h" 22 23 #include "setup.h" 23 24 #include "submodule.h"
+1
oidmap.h
··· 1 1 #ifndef OIDMAP_H 2 2 #define OIDMAP_H 3 3 4 + #include "hash-ll.h" 4 5 #include "hashmap.h" 5 6 6 7 /*
+1
parallel-checkout.c
··· 8 8 #include "parallel-checkout.h" 9 9 #include "pkt-line.h" 10 10 #include "progress.h" 11 + #include "read-cache-ll.h" 11 12 #include "run-command.h" 12 13 #include "sigchain.h" 13 14 #include "streaming.h"
+1
pathspec.c
··· 6 6 #include "gettext.h" 7 7 #include "pathspec.h" 8 8 #include "attr.h" 9 + #include "read-cache.h" 9 10 #include "repository.h" 10 11 #include "setup.h" 11 12 #include "strvec.h"
+1
preload-index.c
··· 10 10 #include "config.h" 11 11 #include "preload-index.h" 12 12 #include "progress.h" 13 + #include "read-cache.h" 13 14 #include "thread-utils.h" 14 15 #include "repository.h" 15 16 #include "symlinks.h"
+481
read-cache-ll.h
··· 1 + #ifndef READ_CACHE_LL_H 2 + #define READ_CACHE_LL_H 3 + 4 + #include "hash-ll.h" 5 + #include "hashmap.h" 6 + #include "statinfo.h" 7 + 8 + /* 9 + * Basic data structures for the directory cache 10 + */ 11 + 12 + #define CACHE_SIGNATURE 0x44495243 /* "DIRC" */ 13 + struct cache_header { 14 + uint32_t hdr_signature; 15 + uint32_t hdr_version; 16 + uint32_t hdr_entries; 17 + }; 18 + 19 + #define INDEX_FORMAT_LB 2 20 + #define INDEX_FORMAT_UB 4 21 + 22 + struct cache_entry { 23 + struct hashmap_entry ent; 24 + struct stat_data ce_stat_data; 25 + unsigned int ce_mode; 26 + unsigned int ce_flags; 27 + unsigned int mem_pool_allocated; 28 + unsigned int ce_namelen; 29 + unsigned int index; /* for link extension */ 30 + struct object_id oid; 31 + char name[FLEX_ARRAY]; /* more */ 32 + }; 33 + 34 + #define CE_STAGEMASK (0x3000) 35 + #define CE_EXTENDED (0x4000) 36 + #define CE_VALID (0x8000) 37 + #define CE_STAGESHIFT 12 38 + 39 + /* 40 + * Range 0xFFFF0FFF in ce_flags is divided into 41 + * two parts: in-memory flags and on-disk ones. 42 + * Flags in CE_EXTENDED_FLAGS will get saved on-disk 43 + * if you want to save a new flag, add it in 44 + * CE_EXTENDED_FLAGS 45 + * 46 + * In-memory only flags 47 + */ 48 + #define CE_UPDATE (1 << 16) 49 + #define CE_REMOVE (1 << 17) 50 + #define CE_UPTODATE (1 << 18) 51 + #define CE_ADDED (1 << 19) 52 + 53 + #define CE_HASHED (1 << 20) 54 + #define CE_FSMONITOR_VALID (1 << 21) 55 + #define CE_WT_REMOVE (1 << 22) /* remove in work directory */ 56 + #define CE_CONFLICTED (1 << 23) 57 + 58 + #define CE_UNPACKED (1 << 24) 59 + #define CE_NEW_SKIP_WORKTREE (1 << 25) 60 + 61 + /* used to temporarily mark paths matched by pathspecs */ 62 + #define CE_MATCHED (1 << 26) 63 + 64 + #define CE_UPDATE_IN_BASE (1 << 27) 65 + #define CE_STRIP_NAME (1 << 28) 66 + 67 + /* 68 + * Extended on-disk flags 69 + */ 70 + #define CE_INTENT_TO_ADD (1 << 29) 71 + #define CE_SKIP_WORKTREE (1 << 30) 72 + /* CE_EXTENDED2 is for future extension */ 73 + #define CE_EXTENDED2 (1U << 31) 74 + 75 + #define CE_EXTENDED_FLAGS (CE_INTENT_TO_ADD | CE_SKIP_WORKTREE) 76 + 77 + /* 78 + * Safeguard to avoid saving wrong flags: 79 + * - CE_EXTENDED2 won't get saved until its semantic is known 80 + * - Bits in 0x0000FFFF have been saved in ce_flags already 81 + * - Bits in 0x003F0000 are currently in-memory flags 82 + */ 83 + #if CE_EXTENDED_FLAGS & 0x803FFFFF 84 + #error "CE_EXTENDED_FLAGS out of range" 85 + #endif 86 + 87 + /* Forward structure decls */ 88 + struct pathspec; 89 + struct tree; 90 + 91 + /* 92 + * Copy the sha1 and stat state of a cache entry from one to 93 + * another. But we never change the name, or the hash state! 94 + */ 95 + static inline void copy_cache_entry(struct cache_entry *dst, 96 + const struct cache_entry *src) 97 + { 98 + unsigned int state = dst->ce_flags & CE_HASHED; 99 + int mem_pool_allocated = dst->mem_pool_allocated; 100 + 101 + /* Don't copy hash chain and name */ 102 + memcpy(&dst->ce_stat_data, &src->ce_stat_data, 103 + offsetof(struct cache_entry, name) - 104 + offsetof(struct cache_entry, ce_stat_data)); 105 + 106 + /* Restore the hash state */ 107 + dst->ce_flags = (dst->ce_flags & ~CE_HASHED) | state; 108 + 109 + /* Restore the mem_pool_allocated flag */ 110 + dst->mem_pool_allocated = mem_pool_allocated; 111 + } 112 + 113 + static inline unsigned create_ce_flags(unsigned stage) 114 + { 115 + return (stage << CE_STAGESHIFT); 116 + } 117 + 118 + #define ce_namelen(ce) ((ce)->ce_namelen) 119 + #define ce_size(ce) cache_entry_size(ce_namelen(ce)) 120 + #define ce_stage(ce) ((CE_STAGEMASK & (ce)->ce_flags) >> CE_STAGESHIFT) 121 + #define ce_uptodate(ce) ((ce)->ce_flags & CE_UPTODATE) 122 + #define ce_skip_worktree(ce) ((ce)->ce_flags & CE_SKIP_WORKTREE) 123 + #define ce_mark_uptodate(ce) ((ce)->ce_flags |= CE_UPTODATE) 124 + #define ce_intent_to_add(ce) ((ce)->ce_flags & CE_INTENT_TO_ADD) 125 + 126 + #define cache_entry_size(len) (offsetof(struct cache_entry,name) + (len) + 1) 127 + 128 + #define SOMETHING_CHANGED (1 << 0) /* unclassified changes go here */ 129 + #define CE_ENTRY_CHANGED (1 << 1) 130 + #define CE_ENTRY_REMOVED (1 << 2) 131 + #define CE_ENTRY_ADDED (1 << 3) 132 + #define RESOLVE_UNDO_CHANGED (1 << 4) 133 + #define CACHE_TREE_CHANGED (1 << 5) 134 + #define SPLIT_INDEX_ORDERED (1 << 6) 135 + #define UNTRACKED_CHANGED (1 << 7) 136 + #define FSMONITOR_CHANGED (1 << 8) 137 + 138 + struct split_index; 139 + struct untracked_cache; 140 + struct progress; 141 + struct pattern_list; 142 + 143 + enum sparse_index_mode { 144 + /* 145 + * There are no sparse directories in the index at all. 146 + * 147 + * Repositories that don't use cone-mode sparse-checkout will 148 + * always have their indexes in this mode. 149 + */ 150 + INDEX_EXPANDED = 0, 151 + 152 + /* 153 + * The index has already been collapsed to sparse directories 154 + * whereever possible. 155 + */ 156 + INDEX_COLLAPSED, 157 + 158 + /* 159 + * The sparse directories that exist are outside the 160 + * sparse-checkout boundary, but it is possible that some file 161 + * entries could collapse to sparse directory entries. 162 + */ 163 + INDEX_PARTIALLY_SPARSE, 164 + }; 165 + 166 + struct index_state { 167 + struct cache_entry **cache; 168 + unsigned int version; 169 + unsigned int cache_nr, cache_alloc, cache_changed; 170 + struct string_list *resolve_undo; 171 + struct cache_tree *cache_tree; 172 + struct split_index *split_index; 173 + struct cache_time timestamp; 174 + unsigned name_hash_initialized : 1, 175 + initialized : 1, 176 + drop_cache_tree : 1, 177 + updated_workdir : 1, 178 + updated_skipworktree : 1, 179 + fsmonitor_has_run_once : 1; 180 + enum sparse_index_mode sparse_index; 181 + struct hashmap name_hash; 182 + struct hashmap dir_hash; 183 + struct object_id oid; 184 + struct untracked_cache *untracked; 185 + char *fsmonitor_last_update; 186 + struct ewah_bitmap *fsmonitor_dirty; 187 + struct mem_pool *ce_mem_pool; 188 + struct progress *progress; 189 + struct repository *repo; 190 + struct pattern_list *sparse_checkout_patterns; 191 + }; 192 + 193 + /** 194 + * A "struct index_state istate" must be initialized with 195 + * INDEX_STATE_INIT or the corresponding index_state_init(). 196 + * 197 + * If the variable won't be used again, use release_index() to free() 198 + * its resources. If it needs to be used again use discard_index(), 199 + * which does the same thing, but will use use index_state_init() at 200 + * the end. The discard_index() will use its own "istate->repo" as the 201 + * "r" argument to index_state_init() in that case. 202 + */ 203 + #define INDEX_STATE_INIT(r) { \ 204 + .repo = (r), \ 205 + } 206 + void index_state_init(struct index_state *istate, struct repository *r); 207 + void release_index(struct index_state *istate); 208 + 209 + /* Cache entry creation and cleanup */ 210 + 211 + /* 212 + * Create cache_entry intended for use in the specified index. Caller 213 + * is responsible for discarding the cache_entry with 214 + * `discard_cache_entry`. 215 + */ 216 + struct cache_entry *make_cache_entry(struct index_state *istate, 217 + unsigned int mode, 218 + const struct object_id *oid, 219 + const char *path, 220 + int stage, 221 + unsigned int refresh_options); 222 + 223 + struct cache_entry *make_empty_cache_entry(struct index_state *istate, 224 + size_t name_len); 225 + 226 + /* 227 + * Create a cache_entry that is not intended to be added to an index. If 228 + * `ce_mem_pool` is not NULL, the entry is allocated within the given memory 229 + * pool. Caller is responsible for discarding "loose" entries with 230 + * `discard_cache_entry()` and the memory pool with 231 + * `mem_pool_discard(ce_mem_pool, should_validate_cache_entries())`. 232 + */ 233 + struct cache_entry *make_transient_cache_entry(unsigned int mode, 234 + const struct object_id *oid, 235 + const char *path, 236 + int stage, 237 + struct mem_pool *ce_mem_pool); 238 + 239 + struct cache_entry *make_empty_transient_cache_entry(size_t len, 240 + struct mem_pool *ce_mem_pool); 241 + 242 + /* 243 + * Discard cache entry. 244 + */ 245 + void discard_cache_entry(struct cache_entry *ce); 246 + 247 + /* 248 + * Check configuration if we should perform extra validation on cache 249 + * entries. 250 + */ 251 + int should_validate_cache_entries(void); 252 + 253 + /* 254 + * Duplicate a cache_entry. Allocate memory for the new entry from a 255 + * memory_pool. Takes into account cache_entry fields that are meant 256 + * for managing the underlying memory allocation of the cache_entry. 257 + */ 258 + struct cache_entry *dup_cache_entry(const struct cache_entry *ce, struct index_state *istate); 259 + 260 + /* 261 + * Validate the cache entries in the index. This is an internal 262 + * consistency check that the cache_entry structs are allocated from 263 + * the expected memory pool. 264 + */ 265 + void validate_cache_entries(const struct index_state *istate); 266 + 267 + /* 268 + * Bulk prefetch all missing cache entries that are not GITLINKs and that match 269 + * the given predicate. This function should only be called if 270 + * repo_has_promisor_remote() returns true. 271 + */ 272 + typedef int (*must_prefetch_predicate)(const struct cache_entry *); 273 + void prefetch_cache_entries(const struct index_state *istate, 274 + must_prefetch_predicate must_prefetch); 275 + 276 + /* Initialize and use the cache information */ 277 + struct lock_file; 278 + int do_read_index(struct index_state *istate, const char *path, 279 + int must_exist); /* for testting only! */ 280 + int read_index_from(struct index_state *, const char *path, 281 + const char *gitdir); 282 + int is_index_unborn(struct index_state *); 283 + 284 + /* For use with `write_locked_index()`. */ 285 + #define COMMIT_LOCK (1 << 0) 286 + #define SKIP_IF_UNCHANGED (1 << 1) 287 + 288 + /* 289 + * Write the index while holding an already-taken lock. Close the lock, 290 + * and if `COMMIT_LOCK` is given, commit it. 291 + * 292 + * Unless a split index is in use, write the index into the lockfile. 293 + * 294 + * With a split index, write the shared index to a temporary file, 295 + * adjust its permissions and rename it into place, then write the 296 + * split index to the lockfile. If the temporary file for the shared 297 + * index cannot be created, fall back to the behavior described in 298 + * the previous paragraph. 299 + * 300 + * With `COMMIT_LOCK`, the lock is always committed or rolled back. 301 + * Without it, the lock is closed, but neither committed nor rolled 302 + * back. 303 + * 304 + * If `SKIP_IF_UNCHANGED` is given and the index is unchanged, nothing 305 + * is written (and the lock is rolled back if `COMMIT_LOCK` is given). 306 + */ 307 + int write_locked_index(struct index_state *, struct lock_file *lock, unsigned flags); 308 + 309 + void discard_index(struct index_state *); 310 + void move_index_extensions(struct index_state *dst, struct index_state *src); 311 + int unmerged_index(const struct index_state *); 312 + 313 + /** 314 + * Returns 1 if istate differs from tree, 0 otherwise. If tree is NULL, 315 + * compares istate to HEAD. If tree is NULL and on an unborn branch, 316 + * returns 1 if there are entries in istate, 0 otherwise. If an strbuf is 317 + * provided, the space-separated list of files that differ will be appended 318 + * to it. 319 + */ 320 + int repo_index_has_changes(struct repository *repo, 321 + struct tree *tree, 322 + struct strbuf *sb); 323 + 324 + int verify_path(const char *path, unsigned mode); 325 + int strcmp_offset(const char *s1, const char *s2, size_t *first_change); 326 + 327 + /* 328 + * Searches for an entry defined by name and namelen in the given index. 329 + * If the return value is positive (including 0) it is the position of an 330 + * exact match. If the return value is negative, the negated value minus 1 331 + * is the position where the entry would be inserted. 332 + * Example: The current index consists of these files and its stages: 333 + * 334 + * b#0, d#0, f#1, f#3 335 + * 336 + * index_name_pos(&index, "a", 1) -> -1 337 + * index_name_pos(&index, "b", 1) -> 0 338 + * index_name_pos(&index, "c", 1) -> -2 339 + * index_name_pos(&index, "d", 1) -> 1 340 + * index_name_pos(&index, "e", 1) -> -3 341 + * index_name_pos(&index, "f", 1) -> -3 342 + * index_name_pos(&index, "g", 1) -> -5 343 + */ 344 + int index_name_pos(struct index_state *, const char *name, int namelen); 345 + 346 + /* 347 + * Like index_name_pos, returns the position of an entry of the given name in 348 + * the index if one exists, otherwise returns a negative value where the negated 349 + * value minus 1 is the position where the index entry would be inserted. Unlike 350 + * index_name_pos, however, a sparse index is not expanded to find an entry 351 + * inside a sparse directory. 352 + */ 353 + int index_name_pos_sparse(struct index_state *, const char *name, int namelen); 354 + 355 + /* 356 + * Determines whether an entry with the given name exists within the 357 + * given index. The return value is 1 if an exact match is found, otherwise 358 + * it is 0. Note that, unlike index_name_pos, this function does not expand 359 + * the index if it is sparse. If an item exists within the full index but it 360 + * is contained within a sparse directory (and not in the sparse index), 0 is 361 + * returned. 362 + */ 363 + int index_entry_exists(struct index_state *, const char *name, int namelen); 364 + 365 + /* 366 + * Some functions return the negative complement of an insert position when a 367 + * precise match was not found but a position was found where the entry would 368 + * need to be inserted. This helper protects that logic from any integer 369 + * underflow. 370 + */ 371 + static inline int index_pos_to_insert_pos(uintmax_t pos) 372 + { 373 + if (pos > INT_MAX) 374 + die("overflow: -1 - %"PRIuMAX, pos); 375 + return -1 - (int)pos; 376 + } 377 + 378 + #define ADD_CACHE_OK_TO_ADD 1 /* Ok to add */ 379 + #define ADD_CACHE_OK_TO_REPLACE 2 /* Ok to replace file/directory */ 380 + #define ADD_CACHE_SKIP_DFCHECK 4 /* Ok to skip DF conflict checks */ 381 + #define ADD_CACHE_JUST_APPEND 8 /* Append only */ 382 + #define ADD_CACHE_NEW_ONLY 16 /* Do not replace existing ones */ 383 + #define ADD_CACHE_KEEP_CACHE_TREE 32 /* Do not invalidate cache-tree */ 384 + #define ADD_CACHE_RENORMALIZE 64 /* Pass along HASH_RENORMALIZE */ 385 + int add_index_entry(struct index_state *, struct cache_entry *ce, int option); 386 + void rename_index_entry_at(struct index_state *, int pos, const char *new_name); 387 + 388 + /* Remove entry, return true if there are more entries to go. */ 389 + int remove_index_entry_at(struct index_state *, int pos); 390 + 391 + void remove_marked_cache_entries(struct index_state *istate, int invalidate); 392 + int remove_file_from_index(struct index_state *, const char *path); 393 + #define ADD_CACHE_VERBOSE 1 394 + #define ADD_CACHE_PRETEND 2 395 + #define ADD_CACHE_IGNORE_ERRORS 4 396 + #define ADD_CACHE_IGNORE_REMOVAL 8 397 + #define ADD_CACHE_INTENT 16 398 + /* 399 + * These two are used to add the contents of the file at path 400 + * to the index, marking the working tree up-to-date by storing 401 + * the cached stat info in the resulting cache entry. A caller 402 + * that has already run lstat(2) on the path can call 403 + * add_to_index(), and all others can call add_file_to_index(); 404 + * the latter will do necessary lstat(2) internally before 405 + * calling the former. 406 + */ 407 + int add_to_index(struct index_state *, const char *path, struct stat *, int flags); 408 + int add_file_to_index(struct index_state *, const char *path, int flags); 409 + 410 + int chmod_index_entry(struct index_state *, struct cache_entry *ce, char flip); 411 + int ce_same_name(const struct cache_entry *a, const struct cache_entry *b); 412 + void set_object_name_for_intent_to_add_entry(struct cache_entry *ce); 413 + int index_name_is_other(struct index_state *, const char *, int); 414 + void *read_blob_data_from_index(struct index_state *, const char *, unsigned long *); 415 + 416 + /* do stat comparison even if CE_VALID is true */ 417 + #define CE_MATCH_IGNORE_VALID 01 418 + /* do not check the contents but report dirty on racily-clean entries */ 419 + #define CE_MATCH_RACY_IS_DIRTY 02 420 + /* do stat comparison even if CE_SKIP_WORKTREE is true */ 421 + #define CE_MATCH_IGNORE_SKIP_WORKTREE 04 422 + /* ignore non-existent files during stat update */ 423 + #define CE_MATCH_IGNORE_MISSING 0x08 424 + /* enable stat refresh */ 425 + #define CE_MATCH_REFRESH 0x10 426 + /* don't refresh_fsmonitor state or do stat comparison even if CE_FSMONITOR_VALID is true */ 427 + #define CE_MATCH_IGNORE_FSMONITOR 0X20 428 + int is_racy_timestamp(const struct index_state *istate, 429 + const struct cache_entry *ce); 430 + int has_racy_timestamp(struct index_state *istate); 431 + int ie_match_stat(struct index_state *, const struct cache_entry *, struct stat *, unsigned int); 432 + int ie_modified(struct index_state *, const struct cache_entry *, struct stat *, unsigned int); 433 + 434 + int match_stat_data_racy(const struct index_state *istate, 435 + const struct stat_data *sd, struct stat *st); 436 + 437 + void fill_stat_cache_info(struct index_state *istate, struct cache_entry *ce, struct stat *st); 438 + 439 + #define REFRESH_REALLY (1 << 0) /* ignore_valid */ 440 + #define REFRESH_UNMERGED (1 << 1) /* allow unmerged */ 441 + #define REFRESH_QUIET (1 << 2) /* be quiet about it */ 442 + #define REFRESH_IGNORE_MISSING (1 << 3) /* ignore non-existent */ 443 + #define REFRESH_IGNORE_SUBMODULES (1 << 4) /* ignore submodules */ 444 + #define REFRESH_IN_PORCELAIN (1 << 5) /* user friendly output, not "needs update" */ 445 + #define REFRESH_PROGRESS (1 << 6) /* show progress bar if stderr is tty */ 446 + #define REFRESH_IGNORE_SKIP_WORKTREE (1 << 7) /* ignore skip_worktree entries */ 447 + int refresh_index(struct index_state *, unsigned int flags, const struct pathspec *pathspec, char *seen, const char *header_msg); 448 + /* 449 + * Refresh the index and write it to disk. 450 + * 451 + * 'refresh_flags' is passed directly to 'refresh_index()', while 452 + * 'COMMIT_LOCK | write_flags' is passed to 'write_locked_index()', so 453 + * the lockfile is always either committed or rolled back. 454 + * 455 + * If 'gentle' is passed, errors locking the index are ignored. 456 + * 457 + * Return 1 if refreshing the index returns an error, -1 if writing 458 + * the index to disk fails, 0 on success. 459 + * 460 + * Note that if refreshing the index returns an error, we still write 461 + * out the index (unless locking fails). 462 + */ 463 + int repo_refresh_and_write_index(struct repository*, unsigned int refresh_flags, unsigned int write_flags, int gentle, const struct pathspec *, char *seen, const char *header_msg); 464 + 465 + struct cache_entry *refresh_cache_entry(struct index_state *, struct cache_entry *, unsigned int); 466 + 467 + void set_alternate_index_output(const char *); 468 + 469 + extern int verify_index_checksum; 470 + extern int verify_ce_order; 471 + 472 + int cmp_cache_name_compare(const void *a_, const void *b_); 473 + 474 + int add_files_to_cache(struct repository *repo, const char *prefix, 475 + const struct pathspec *pathspec, int include_sparse, 476 + int flags); 477 + 478 + void overlay_tree_on_index(struct index_state *istate, 479 + const char *tree_name, const char *prefix); 480 + 481 + #endif /* READ_CACHE_LL_H */
+1
read-cache.c
··· 28 28 #include "name-hash.h" 29 29 #include "object-name.h" 30 30 #include "preload-index.h" 31 + #include "read-cache.h" 31 32 #include "resolve-undo.h" 32 33 #include "revision.h" 33 34 #include "run-command.h"
+45
read-cache.h
··· 1 + #ifndef READ_CACHE_H 2 + #define READ_CACHE_H 3 + 4 + #include "read-cache-ll.h" 5 + #include "object.h" 6 + #include "pathspec.h" 7 + 8 + static inline unsigned int ce_mode_from_stat(const struct cache_entry *ce, 9 + unsigned int mode) 10 + { 11 + extern int trust_executable_bit, has_symlinks; 12 + if (!has_symlinks && S_ISREG(mode) && 13 + ce && S_ISLNK(ce->ce_mode)) 14 + return ce->ce_mode; 15 + if (!trust_executable_bit && S_ISREG(mode)) { 16 + if (ce && S_ISREG(ce->ce_mode)) 17 + return ce->ce_mode; 18 + return create_ce_mode(0666); 19 + } 20 + return create_ce_mode(mode); 21 + } 22 + 23 + static inline int ce_to_dtype(const struct cache_entry *ce) 24 + { 25 + unsigned ce_mode = ntohl(ce->ce_mode); 26 + if (S_ISREG(ce_mode)) 27 + return DT_REG; 28 + else if (S_ISDIR(ce_mode) || S_ISGITLINK(ce_mode)) 29 + return DT_DIR; 30 + else if (S_ISLNK(ce_mode)) 31 + return DT_LNK; 32 + else 33 + return DT_UNKNOWN; 34 + } 35 + 36 + static inline int ce_path_match(struct index_state *istate, 37 + const struct cache_entry *ce, 38 + const struct pathspec *pathspec, 39 + char *seen) 40 + { 41 + return match_pathspec(istate, pathspec, ce->name, ce_namelen(ce), 0, seen, 42 + S_ISDIR(ce->ce_mode) || S_ISGITLINK(ce->ce_mode)); 43 + } 44 + 45 + #endif /* READ_CACHE_H */
+1
repository.c
··· 10 10 #include "config.h" 11 11 #include "object.h" 12 12 #include "lockfile.h" 13 + #include "read-cache-ll.h" 13 14 #include "remote.h" 14 15 #include "setup.h" 15 16 #include "submodule-config.h"
+1
rerere.c
··· 7 7 #include "hex.h" 8 8 #include "lockfile.h" 9 9 #include "string-list.h" 10 + #include "read-cache-ll.h" 10 11 #include "rerere.h" 11 12 #include "xdiff-interface.h" 12 13 #include "dir.h"
+1
resolve-undo.c
··· 1 1 #include "cache.h" 2 2 #include "dir.h" 3 3 #include "hash.h" 4 + #include "read-cache.h" 4 5 #include "resolve-undo.h" 5 6 #include "sparse-index.h" 6 7 #include "string-list.h"
+1
revision.c
··· 31 31 #include "bisect.h" 32 32 #include "packfile.h" 33 33 #include "worktree.h" 34 + #include "read-cache.h" 34 35 #include "setup.h" 35 36 #include "sparse-index.h" 36 37 #include "strvec.h"
+1
split-index.c
··· 3 3 #include "gettext.h" 4 4 #include "hash.h" 5 5 #include "mem-pool.h" 6 + #include "read-cache-ll.h" 6 7 #include "split-index.h" 7 8 #include "strbuf.h" 8 9 #include "ewah/ewok.h"
+1
submodule.c
··· 28 28 #include "object-name.h" 29 29 #include "object-store.h" 30 30 #include "commit-reach.h" 31 + #include "read-cache-ll.h" 31 32 #include "setup.h" 32 33 #include "shallow.h" 33 34 #include "trace2.h"
+1
t/helper/test-cache-tree.c
··· 6 6 #include "tree.h" 7 7 #include "cache-tree.h" 8 8 #include "parse-options.h" 9 + #include "read-cache-ll.h" 9 10 #include "repository.h" 10 11 #include "setup.h" 11 12
+1
t/helper/test-dump-cache-tree.c
··· 5 5 #include "hex.h" 6 6 #include "tree.h" 7 7 #include "cache-tree.h" 8 + #include "read-cache-ll.h" 8 9 #include "repository.h" 9 10 #include "setup.h" 10 11
+1
t/helper/test-dump-fsmonitor.c
··· 1 1 #include "test-tool.h" 2 2 #include "cache.h" 3 + #include "read-cache-ll.h" 3 4 #include "repository.h" 4 5 #include "setup.h" 5 6
+1
t/helper/test-dump-split-index.c
··· 2 2 #include "test-tool.h" 3 3 #include "cache.h" 4 4 #include "hex.h" 5 + #include "read-cache-ll.h" 5 6 #include "repository.h" 6 7 #include "setup.h" 7 8 #include "split-index.h"
+1
t/helper/test-dump-untracked-cache.c
··· 3 3 #include "cache.h" 4 4 #include "dir.h" 5 5 #include "hex.h" 6 + #include "read-cache-ll.h" 6 7 #include "repository.h" 7 8 #include "setup.h" 8 9
+1
t/helper/test-fast-rebase.c
··· 21 21 #include "lockfile.h" 22 22 #include "merge-ort.h" 23 23 #include "object-name.h" 24 + #include "read-cache-ll.h" 24 25 #include "refs.h" 25 26 #include "revision.h" 26 27 #include "sequencer.h"
+1
t/helper/test-fsmonitor-client.c
··· 7 7 #include "cache.h" 8 8 #include "parse-options.h" 9 9 #include "fsmonitor-ipc.h" 10 + #include "read-cache-ll.h" 10 11 #include "repository.h" 11 12 #include "setup.h" 12 13 #include "thread-utils.h"
+1
t/helper/test-hash-speed.c
··· 1 1 #include "test-tool.h" 2 2 #include "cache.h" 3 + #include "hash-ll.h" 3 4 4 5 #define NUM_SECONDS 3 5 6
+1
t/helper/test-index-version.c
··· 1 1 #include "test-tool.h" 2 2 #include "cache.h" 3 + #include "read-cache-ll.h" 3 4 4 5 int cmd__index_version(int argc UNUSED, const char **argv UNUSED) 5 6 {
+1
t/helper/test-lazy-init-name-hash.c
··· 4 4 #include "environment.h" 5 5 #include "name-hash.h" 6 6 #include "parse-options.h" 7 + #include "read-cache-ll.h" 7 8 #include "repository.h" 8 9 #include "setup.h" 9 10 #include "trace.h"
+1
t/helper/test-path-utils.c
··· 3 3 #include "abspath.h" 4 4 #include "environment.h" 5 5 #include "path.h" 6 + #include "read-cache-ll.h" 6 7 #include "setup.h" 7 8 #include "string-list.h" 8 9 #include "trace.h"
+1
t/helper/test-read-cache.c
··· 2 2 #include "test-tool.h" 3 3 #include "cache.h" 4 4 #include "config.h" 5 + #include "read-cache-ll.h" 5 6 #include "repository.h" 6 7 #include "setup.h" 7 8 #include "wrapper.h"
+1
t/helper/test-scrap-cache-tree.c
··· 2 2 #include "test-tool.h" 3 3 #include "cache.h" 4 4 #include "lockfile.h" 5 + #include "read-cache-ll.h" 5 6 #include "repository.h" 6 7 #include "setup.h" 7 8 #include "tree.h"
+1
t/helper/test-sha1.c
··· 1 1 #include "test-tool.h" 2 2 #include "cache.h" 3 + #include "hash-ll.h" 3 4 4 5 int cmd__sha1(int ac, const char **av) 5 6 {
+1
t/helper/test-sha256.c
··· 1 1 #include "test-tool.h" 2 2 #include "cache.h" 3 + #include "hash-ll.h" 3 4 4 5 int cmd__sha256(int ac, const char **av) 5 6 {
+1
t/helper/test-strcmp-offset.c
··· 1 1 #include "test-tool.h" 2 2 #include "cache.h" 3 + #include "read-cache-ll.h" 3 4 4 5 int cmd__strcmp_offset(int argc UNUSED, const char **argv) 5 6 {
+1
t/helper/test-write-cache.c
··· 2 2 #include "test-tool.h" 3 3 #include "cache.h" 4 4 #include "lockfile.h" 5 + #include "read-cache-ll.h" 5 6 #include "repository.h" 6 7 #include "setup.h" 7 8
+1
unpack-trees.c
··· 15 15 #include "progress.h" 16 16 #include "refs.h" 17 17 #include "attr.h" 18 + #include "read-cache.h" 18 19 #include "split-index.h" 19 20 #include "sparse-index.h" 20 21 #include "submodule.h"
+1 -1
unpack-trees.h
··· 1 1 #ifndef UNPACK_TREES_H 2 2 #define UNPACK_TREES_H 3 3 4 - #include "cache.h" 5 4 #include "convert.h" 5 + #include "read-cache-ll.h" 6 6 #include "strvec.h" 7 7 #include "string-list.h" 8 8 #include "tree-walk.h"
+1
wt-status.c
··· 18 18 #include "refs.h" 19 19 #include "submodule.h" 20 20 #include "column.h" 21 + #include "read-cache.h" 21 22 #include "setup.h" 22 23 #include "strbuf.h" 23 24 #include "trace.h"