aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2015-09-01 16:31:29 -0700
committerJunio C Hamano <gitster@pobox.com>2015-09-01 16:31:29 -0700
commit81d0e33a225950b3837953572e4ace283341f762 (patch)
treeedcca9b75eb0ce9fbaace4ebe3c396b9ecdaaf7f
parent0fb8e2423444e104004062ff34f6f6f594c0ff80 (diff)
parent475a34451f86d1b954c5da37f04ed044544cf6e4 (diff)
downloadgit-81d0e33a225950b3837953572e4ace283341f762.tar.gz
git-81d0e33a225950b3837953572e4ace283341f762.tar.xz
Merge branch 'dt/commit-preserve-base-index-upon-opportunistic-cache-tree-update'
When re-priming the cache-tree opportunistically while committing the in-core index as-is, we mistakenly invalidated the in-core index too aggressively, causing the experimental split-index code to unnecessarily rewrite the on-disk index file(s). * dt/commit-preserve-base-index-upon-opportunistic-cache-tree-update: commit: don't rewrite shared index unnecessarily
-rw-r--r--builtin/commit.c4
-rwxr-xr-xt/t0090-cache-tree.sh10
-rw-r--r--test-dump-split-index.c6
3 files changed, 15 insertions, 5 deletions
diff --git a/builtin/commit.c b/builtin/commit.c
index b37cb6c8b..63772d016 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -405,10 +405,8 @@ static const char *prepare_index(int argc, const char **argv, const char *prefix
hold_locked_index(&index_lock, 1);
refresh_cache_or_die(refresh_flags);
if (active_cache_changed
- || !cache_tree_fully_valid(active_cache_tree)) {
+ || !cache_tree_fully_valid(active_cache_tree))
update_main_cache_tree(WRITE_TREE_SILENT);
- active_cache_changed = 1;
- }
if (active_cache_changed) {
if (write_locked_index(&the_index, &index_lock,
COMMIT_LOCK))
diff --git a/t/t0090-cache-tree.sh b/t/t0090-cache-tree.sh
index 055cc1900..adfd4f0b5 100755
--- a/t/t0090-cache-tree.sh
+++ b/t/t0090-cache-tree.sh
@@ -242,4 +242,14 @@ test_expect_success 'no phantom error when switching trees' '
! test -s errors
'
+test_expect_success 'switching trees does not invalidate shared index' '
+ git update-index --split-index &&
+ >split &&
+ git add split &&
+ test-dump-split-index .git/index | grep -v ^own >before &&
+ git commit -m "as-is" &&
+ test-dump-split-index .git/index | grep -v ^own >after &&
+ test_cmp before after
+'
+
test_done
diff --git a/test-dump-split-index.c b/test-dump-split-index.c
index 9cf3112c9..861d28c9b 100644
--- a/test-dump-split-index.c
+++ b/test-dump-split-index.c
@@ -26,9 +26,11 @@ int main(int ac, char **av)
sha1_to_hex(ce->sha1), ce_stage(ce), ce->name);
}
printf("replacements:");
- ewah_each_bit(si->replace_bitmap, show_bit, NULL);
+ if (si->replace_bitmap)
+ ewah_each_bit(si->replace_bitmap, show_bit, NULL);
printf("\ndeletions:");
- ewah_each_bit(si->delete_bitmap, show_bit, NULL);
+ if (si->delete_bitmap)
+ ewah_each_bit(si->delete_bitmap, show_bit, NULL);
printf("\n");
return 0;
}