diff options
-rw-r--r-- | cache-tree.c | 8 | ||||
-rw-r--r-- | cache-tree.h | 1 |
2 files changed, 7 insertions, 2 deletions
diff --git a/cache-tree.c b/cache-tree.c index 2fc7730df6..12dcf0b036 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -232,14 +232,17 @@ static int update_one(struct cache_tree *it, int missing_ok = flags & WRITE_TREE_MISSING_OK; int dryrun = flags & WRITE_TREE_DRY_RUN; int repair = flags & WRITE_TREE_REPAIR; + int toplevel = flags & WRITE_TREE_TOPLEVEL; int to_invalidate = 0; int i; assert(!(dryrun && repair)); + flags &= ~WRITE_TREE_TOPLEVEL; *skip_count = 0; - if (0 <= it->entry_count && has_sha1_file(it->sha1)) + if (0 <= it->entry_count && + (toplevel ? freshen_object : has_sha1_file)(it->sha1)) return it->entry_count; /* @@ -409,7 +412,8 @@ int cache_tree_update(struct index_state *istate, int flags) if (i) return i; - i = update_one(it, cache, entries, "", 0, &skip, flags); + i = update_one(it, cache, entries, "", 0, &skip, + flags | WRITE_TREE_TOPLEVEL); if (i < 0) return i; istate->cache_changed |= CACHE_TREE_CHANGED; diff --git a/cache-tree.h b/cache-tree.h index f18789ceff..7e03620349 100644 --- a/cache-tree.h +++ b/cache-tree.h @@ -39,6 +39,7 @@ int update_main_cache_tree(int); #define WRITE_TREE_DRY_RUN 4 #define WRITE_TREE_SILENT 8 #define WRITE_TREE_REPAIR 16 +#define WRITE_TREE_TOPLEVEL 32 /* error return codes */ #define WRITE_TREE_UNREADABLE_INDEX (-1) |