summaryrefslogtreecommitdiff
path: root/cache-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'cache-tree.c')
-rw-r--r--cache-tree.c8
1 files changed, 6 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;