diff --git a/builtin/fsck.c b/builtin/fsck.c index 5f91116d73..04846d46f9 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -759,6 +759,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix) if (keep_cache_objects) { verify_index_checksum = 1; + verify_ce_order = 1; read_cache(); for (i = 0; i < active_nr; i++) { unsigned int mode; diff --git a/cache.h b/cache.h index cb7fb7c004..89f5d24579 100644 --- a/cache.h +++ b/cache.h @@ -745,6 +745,7 @@ extern int hold_locked_index(struct lock_file *, int); extern void set_alternate_index_output(const char *); extern int verify_index_checksum; +extern int verify_ce_order; /* Environment bits from configuration mechanism */ extern int trust_executable_bit; diff --git a/read-cache.c b/read-cache.c index f3d125c114..b13a1cb8f2 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1511,6 +1511,9 @@ struct ondisk_cache_entry_extended { /* Allow fsck to force verification of the index checksum. */ int verify_index_checksum; +/* Allow fsck to force verification of the cache entry order. */ +int verify_ce_order; + static int verify_hdr(struct cache_header *hdr, unsigned long size) { git_SHA_CTX c; @@ -1668,6 +1671,9 @@ static void check_ce_order(struct index_state *istate) { unsigned int i; + if (!verify_ce_order) + return; + for (i = 1; i < istate->cache_nr; i++) { struct cache_entry *ce = istate->cache[i - 1]; struct cache_entry *next_ce = istate->cache[i];