v5 fixes some minor comments from round 4 and a big mistake in 5/5.
Junio's scary feeling turns out true. There is a missing invalidation
in keep_entry() which is not added in 6/7. 7/7 makes sure that similar
problems will not slip through.
I had to rebase this series on top of 'master' because 7/7 caught a
bad cache-tree situation that has been fixed by Elijah in ad3762042a
(read-cache: fix directory/file conflict handling in
read_index_unmerged() - 2018-07-31). I believe the issue was we prime
cache-tree in 'git reset --hard' even though the index has conflicts.
Range-diff (before the rebase):
1: a192faf79e ! 1: ed8763726b trace.h: support nested performance tracing
@@ -49,13 +49,16 @@
struct untracked_cache_dir *untracked;
- uint64_t start = getnanotime();
- if (has_symlink_leading_path(path, len))
+- if (has_symlink_leading_path(path, len))
++ trace_performance_enter();
++
++ if (has_symlink_leading_path(path, len)) {
++ trace_performance_leave("read directory %.*s", len, path);
return dir->nr;
++ }
-+ trace_performance_enter();
untracked = validate_untracked_cache(dir, len, pathspec);
if (!untracked)
- /*
@@
dir->nr = i;
}
2: 9afe7c488a = 2: 9b70652fa2 unpack-trees: add performance tracing
3: 74101edb60 ! 3: 8b3cfea623 unpack-trees: optimize walking same trees with
cache-tree
@@ -141,7 +141,7 @@
+
+ /*
+ * Do what unpack_callback() and unpack_nondirectories() normally
-+ * do. But we walk all paths recursively in just one loop instead.
++ * do. But we walk all paths in an iterative loop instead.
+ *
+ * D/F conflicts and higher stage entries are not a concern
+ * because cache-tree would be invalidated and we would never
4: 9261c5920e = 4: 5af28d44ca unpack-trees: reduce malloc in cache-tree walk
5: 43fac1154f = 5: 5657c92fe9 unpack-trees: reuse (still valid) cache-tree
from src_index
-: -- > 6: 3b91783afc unpack-trees: add missing cache invalidation
-: -- > 7: 0d5464c0dc cache-tree: verify valid cache-tree in the test
suite
Nguyễn Thái Ngọc Duy (7):
trace.h: support nested performance tracing
unpack-trees: add performance tracing
unpack-trees: optimize walking same trees with cache-tree
unpack-trees: reduce malloc in cache-tree walk
unpack-trees: reuse (still valid) cache-tree from src_index
unpack-trees: add missing cache invalidation
cache-tree: verify valid cache-tree in the test suite
cache-tree.c| 80 +
cache-tree.h| 1 +
diff-lib.c | 4 +-
dir.c | 9 ++-
name-hash.c | 4 +-
preload-index.c | 4 +-
read-cache.c| 16 +++--
t/test-lib.sh | 6 ++
trace.c | 69 --
trace.h | 15 +
unpack-trees.c | 154 +++-
11 files changed, 340 insertions(+), 22 deletions(-)
--
2.18.0.1004.g6639190530