summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cache-tree.c8
-rw-r--r--cache-tree.h1
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)