[PATCH 2/3] test-dump-cache-tree: Improve output format and exit code
Make test-dump-cache-tree more useful for testing. Do not treat known invalid trees as errors (and do not produce non-zero exit code), because we can fall back to the non-cache-tree codepath. Signed-off-by: David Turner dtur...@twitter.com --- t/t0090-cache-tree.sh | 28 +--- test-dump-cache-tree.c | 24 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/t/t0090-cache-tree.sh b/t/t0090-cache-tree.sh index 98fb1ab..8437c5f 100755 --- a/t/t0090-cache-tree.sh +++ b/t/t0090-cache-tree.sh @@ -21,10 +21,13 @@ test_shallow_cache_tree () { cmp_cache_tree expect } +# Test that the cache-tree for a given directory is invalid. +# If no directory is given, check that the root is invalid test_invalid_cache_tree () { - echo invalid (0 subtrees) expect - printf SHA #(ref) (%d entries, 0 subtrees)\n $(git ls-files|wc -l) expect - cmp_cache_tree expect + test-dump-cache-tree actual + sed -e s/$_x40/SHA/ -e s/[0-9]* subtrees//g actual filtered + expect=$(printf invalid $1 ()\n) + fgrep $expect filtered } test_no_cache_tree () { @@ -49,6 +52,25 @@ test_expect_success 'git-add invalidates cache-tree' ' test_invalid_cache_tree ' +test_expect_success 'git-add in subdir invalidates cache-tree' ' + test_when_finished git reset --hard; git read-tree HEAD + mkdir dirx + echo I changed this file dirx/foo + git add dirx/foo + test_invalid_cache_tree +' + +test_expect_success 'git-add in subdir does not invalidate sibling cache-tree' ' + git tag no-children + test_when_finished git reset --hard no-children; git read-tree HEAD + mkdir dir1 dir2 + test_commit dir1/a + test_commit dir2/b + echo I changed this file dir1/a + git add dir1/a + test_invalid_cache_tree dir1/ +' + test_expect_success 'update-index invalidates cache-tree' ' test_when_finished git reset --hard; git read-tree HEAD echo I changed this file foo diff --git a/test-dump-cache-tree.c b/test-dump-cache-tree.c index 47eab97..ad42ca1 100644 --- a/test-dump-cache-tree.c +++ b/test-dump-cache-tree.c @@ -6,12 +6,12 @@ static void dump_one(struct cache_tree *it, const char *pfx, const char *x) { if (it-entry_count 0) - printf(%-40s %s%s (%d subtrees)\n, - invalid, x, pfx, it-subtree_nr); + printf(%-40s %s (%d subtrees)%s\n, + invalid, pfx, it-subtree_nr, x); else - printf(%s %s%s (%d entries, %d subtrees)\n, - sha1_to_hex(it-sha1), x, pfx, - it-entry_count, it-subtree_nr); + printf(%s %s (%d entries, %d subtrees)%s\n, + sha1_to_hex(it-sha1), pfx, + it-entry_count, it-subtree_nr, x); } static int dump_cache_tree(struct cache_tree *it, @@ -25,19 +25,19 @@ static int dump_cache_tree(struct cache_tree *it, /* missing in either */ return 0; - if (it-entry_count 0) { + if (it-entry_count 0) + /* invalid */ dump_one(it, pfx, ); - dump_one(ref, pfx, #(ref) ); - if (it-subtree_nr != ref-subtree_nr) - errs = 1; - } else { - dump_one(it, pfx, ); if (hashcmp(it-sha1, ref-sha1) || ref-entry_count != it-entry_count || ref-subtree_nr != it-subtree_nr) { - dump_one(ref, pfx, #(ref) ); + /* claims to be valid but is lying */ + dump_one(ref, pfx, #(error)); errs = 1; + } else { + /* is actually valid */ + dump_one(it, pfx, ); } } -- 2.0.0.390.gcb682f8 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 2/3] test-dump-cache-tree: Improve output format and exit code
David Turner dtur...@twopensource.com writes: Make test-dump-cache-tree more useful for testing. Do not treat known invalid trees as errors (and do not produce non-zero exit code), because we can fall back to the non-cache-tree codepath. Under-explained. more useful is subjective so I won't complain about it being not explained enough, but I cannot quite parse and understand the second sentence. It is not we treat known invalid trees as errors. I think what you meant is we insist that a cache-tree entry, even if it is an invalidated one, must record the correct number of subtrees and signal errors otherwise, which is wrong. I honestly cannot guess what you meant to say by because we can diff --git a/test-dump-cache-tree.c b/test-dump-cache-tree.c index 47eab97..ad42ca1 100644 --- a/test-dump-cache-tree.c +++ b/test-dump-cache-tree.c @@ -6,12 +6,12 @@ static void dump_one(struct cache_tree *it, const char *pfx, const char *x) { if (it-entry_count 0) - printf(%-40s %s%s (%d subtrees)\n, -invalid, x, pfx, it-subtree_nr); + printf(%-40s %s (%d subtrees)%s\n, +invalid, pfx, it-subtree_nr, x); else - printf(%s %s%s (%d entries, %d subtrees)\n, -sha1_to_hex(it-sha1), x, pfx, -it-entry_count, it-subtree_nr); + printf(%s %s (%d entries, %d subtrees)%s\n, +sha1_to_hex(it-sha1), pfx, +it-entry_count, it-subtree_nr, x); I am guessing this is related to the more useful, but I cannot offhand tell what this output shuffling is about. It would be better to illustrate in the log message to support the more useful claim by showing how improved/readable the output got with this change. } static int dump_cache_tree(struct cache_tree *it, @@ -25,19 +25,19 @@ static int dump_cache_tree(struct cache_tree *it, /* missing in either */ return 0; - if (it-entry_count 0) { + if (it-entry_count 0) + /* invalid */ dump_one(it, pfx, ); - dump_one(ref, pfx, #(ref) ); Unfortunately this is not quite what we would want; this #(ref) output is so that we can see what tree object we should be referring to, while debugging, if this entry were not invalidated; losing that does not Improve output---it loses information from the output. - if (it-subtree_nr != ref-subtree_nr) - errs = 1; I am guessing that this is the change you did not explain quite enough with do not treat ... as errors. This code expects that even an invalidated cache-tree entry knows how many subtrees it has, which is unreasonable. I do not recall offhand if we used to have some code to ensure that such an invariant holds or not, but when invalidating a directory (say t/) by adding a new subdirectory and a new file in it (e.g. t/dir/file) to the index, we do not do anything other than to invalidate t/ and t/dir/, and I do not think the codepath recounts the number of subdirectories to adjust subtree_nr in any way to match the reality, so removal of this check is the right thing to do. - } else { - dump_one(it, pfx, ); if (hashcmp(it-sha1, ref-sha1) || ref-entry_count != it-entry_count || ref-subtree_nr != it-subtree_nr) { - dump_one(ref, pfx, #(ref) ); + /* claims to be valid but is lying */ + dump_one(ref, pfx, #(error)); errs = 1; + } else { + /* is actually valid */ + dump_one(it, pfx, ); } } -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 2/3] test-dump-cache-tree: Improve output format and exit code
Make test-dump-cache-tree more useful for testing. Do not treat known invalid trees as errors (and do not produce non-zero exit code), because we can fall back to the non-cache-tree codepath. Signed-off-by: David Turner dtur...@twitter.com --- t/t0090-cache-tree.sh | 28 +--- test-dump-cache-tree.c | 24 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/t/t0090-cache-tree.sh b/t/t0090-cache-tree.sh index 7c60675..5383258 100755 --- a/t/t0090-cache-tree.sh +++ b/t/t0090-cache-tree.sh @@ -21,10 +21,13 @@ test_shallow_cache_tree () { cmp_cache_tree expect } +# Test that the cache-tree for a given directory is invalid. +# If no directory is given, check that the root is invalid test_invalid_cache_tree () { - echo invalid (0 subtrees) expect - printf SHA #(ref) (%d entries, 0 subtrees)\n $(git ls-files|wc -l) expect - cmp_cache_tree expect + test-dump-cache-tree actual + sed -e s/$_x40/SHA/ -e s/[0-9]* subtrees//g actual filtered + expect=$(printf invalid $1 ()\n) + fgrep $expect filtered } test_no_cache_tree () { @@ -49,6 +52,25 @@ test_expect_success 'git-add invalidates cache-tree' ' test_invalid_cache_tree ' +test_expect_success 'git-add in subdir invalidates cache-tree' ' + test_when_finished git reset --hard; git read-tree HEAD + mkdir dirx + echo I changed this file dirx/foo + git add dirx/foo + test_invalid_cache_tree +' + +test_expect_success 'git-add in subdir does not invalidate sibling cache-tree' ' + git tag no-children + test_when_finished git reset --hard no-children; git read-tree HEAD + mkdir dir1 dir2 + test_commit dir1/a + test_commit dir2/b + echo I changed this file dir1/a + git add dir1/a + test_invalid_cache_tree dir1/ +' + test_expect_success 'update-index invalidates cache-tree' ' test_when_finished git reset --hard; git read-tree HEAD echo I changed this file foo diff --git a/test-dump-cache-tree.c b/test-dump-cache-tree.c index 47eab97..ad42ca1 100644 --- a/test-dump-cache-tree.c +++ b/test-dump-cache-tree.c @@ -6,12 +6,12 @@ static void dump_one(struct cache_tree *it, const char *pfx, const char *x) { if (it-entry_count 0) - printf(%-40s %s%s (%d subtrees)\n, - invalid, x, pfx, it-subtree_nr); + printf(%-40s %s (%d subtrees)%s\n, + invalid, pfx, it-subtree_nr, x); else - printf(%s %s%s (%d entries, %d subtrees)\n, - sha1_to_hex(it-sha1), x, pfx, - it-entry_count, it-subtree_nr); + printf(%s %s (%d entries, %d subtrees)%s\n, + sha1_to_hex(it-sha1), pfx, + it-entry_count, it-subtree_nr, x); } static int dump_cache_tree(struct cache_tree *it, @@ -25,19 +25,19 @@ static int dump_cache_tree(struct cache_tree *it, /* missing in either */ return 0; - if (it-entry_count 0) { + if (it-entry_count 0) + /* invalid */ dump_one(it, pfx, ); - dump_one(ref, pfx, #(ref) ); - if (it-subtree_nr != ref-subtree_nr) - errs = 1; - } else { - dump_one(it, pfx, ); if (hashcmp(it-sha1, ref-sha1) || ref-entry_count != it-entry_count || ref-subtree_nr != it-subtree_nr) { - dump_one(ref, pfx, #(ref) ); + /* claims to be valid but is lying */ + dump_one(ref, pfx, #(error)); errs = 1; + } else { + /* is actually valid */ + dump_one(it, pfx, ); } } -- 2.0.0.390.gcb682f8 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 2/3] test-dump-cache-tree: Improve output format and exit code
On Mon, Jun 30, 2014 at 8:13 PM, David Turner dtur...@twopensource.com wrote: Make test-dump-cache-tree more useful for testing. Do not treat known invalid trees as errors (and do not produce non-zero exit code), because we can fall back to the non-cache-tree codepath. Signed-off-by: David Turner dtur...@twitter.com --- t/t0090-cache-tree.sh | 28 +--- test-dump-cache-tree.c | 24 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/t/t0090-cache-tree.sh b/t/t0090-cache-tree.sh index 7c60675..5383258 100755 --- a/t/t0090-cache-tree.sh +++ b/t/t0090-cache-tree.sh @@ -21,10 +21,13 @@ test_shallow_cache_tree () { cmp_cache_tree expect } +# Test that the cache-tree for a given directory is invalid. +# If no directory is given, check that the root is invalid test_invalid_cache_tree () { - echo invalid (0 subtrees) expect - printf SHA #(ref) (%d entries, 0 subtrees)\n $(git ls-files|wc -l) expect - cmp_cache_tree expect + test-dump-cache-tree actual + sed -e s/$_x40/SHA/ -e s/[0-9]* subtrees//g actual filtered + expect=$(printf invalid $1 ()\n) + fgrep $expect filtered } test_no_cache_tree () { @@ -49,6 +52,25 @@ test_expect_success 'git-add invalidates cache-tree' ' test_invalid_cache_tree ' +test_expect_success 'git-add in subdir invalidates cache-tree' ' + test_when_finished git reset --hard; git read-tree HEAD + mkdir dirx + echo I changed this file dirx/foo Style: drop whitespace after + git add dirx/foo + test_invalid_cache_tree +' + +test_expect_success 'git-add in subdir does not invalidate sibling cache-tree' ' + git tag no-children Broken -chain. + test_when_finished git reset --hard no-children; git read-tree HEAD + mkdir dir1 dir2 + test_commit dir1/a + test_commit dir2/b + echo I changed this file dir1/a Style: drop whitespace after + git add dir1/a + test_invalid_cache_tree dir1/ +' + test_expect_success 'update-index invalidates cache-tree' ' test_when_finished git reset --hard; git read-tree HEAD echo I changed this file foo diff --git a/test-dump-cache-tree.c b/test-dump-cache-tree.c index 47eab97..ad42ca1 100644 --- a/test-dump-cache-tree.c +++ b/test-dump-cache-tree.c @@ -6,12 +6,12 @@ static void dump_one(struct cache_tree *it, const char *pfx, const char *x) { if (it-entry_count 0) - printf(%-40s %s%s (%d subtrees)\n, - invalid, x, pfx, it-subtree_nr); + printf(%-40s %s (%d subtrees)%s\n, + invalid, pfx, it-subtree_nr, x); else - printf(%s %s%s (%d entries, %d subtrees)\n, - sha1_to_hex(it-sha1), x, pfx, - it-entry_count, it-subtree_nr); + printf(%s %s (%d entries, %d subtrees)%s\n, + sha1_to_hex(it-sha1), pfx, + it-entry_count, it-subtree_nr, x); } static int dump_cache_tree(struct cache_tree *it, @@ -25,19 +25,19 @@ static int dump_cache_tree(struct cache_tree *it, /* missing in either */ return 0; - if (it-entry_count 0) { + if (it-entry_count 0) + /* invalid */ dump_one(it, pfx, ); - dump_one(ref, pfx, #(ref) ); - if (it-subtree_nr != ref-subtree_nr) - errs = 1; - } else { - dump_one(it, pfx, ); if (hashcmp(it-sha1, ref-sha1) || ref-entry_count != it-entry_count || ref-subtree_nr != it-subtree_nr) { - dump_one(ref, pfx, #(ref) ); + /* claims to be valid but is lying */ + dump_one(ref, pfx, #(error)); errs = 1; + } else { + /* is actually valid */ + dump_one(it, pfx, ); } } -- 2.0.0.390.gcb682f8 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 2/3] test-dump-cache-tree: Improve output format and exit code
Make test-dump-cache-tree more useful for testing. Do not treat known invalid trees as errors (and do not produce non-zero exit code), because we can fall back to the non-cache-tree codepath. Signed-off-by: David Turner dtur...@twitter.com --- t/t0090-cache-tree.sh | 28 +--- test-dump-cache-tree.c | 24 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/t/t0090-cache-tree.sh b/t/t0090-cache-tree.sh index 7c60675..5383258 100755 --- a/t/t0090-cache-tree.sh +++ b/t/t0090-cache-tree.sh @@ -21,10 +21,13 @@ test_shallow_cache_tree () { cmp_cache_tree expect } +# Test that the cache-tree for a given directory is invalid. +# If no directory is given, check that the root is invalid test_invalid_cache_tree () { - echo invalid (0 subtrees) expect - printf SHA #(ref) (%d entries, 0 subtrees)\n $(git ls-files|wc -l) expect - cmp_cache_tree expect + test-dump-cache-tree actual + sed -e s/$_x40/SHA/ -e s/[0-9]* subtrees//g actual filtered + expect=$(printf invalid $1 ()\n) + fgrep $expect filtered } test_no_cache_tree () { @@ -49,6 +52,25 @@ test_expect_success 'git-add invalidates cache-tree' ' test_invalid_cache_tree ' +test_expect_success 'git-add in subdir invalidates cache-tree' ' + test_when_finished git reset --hard; git read-tree HEAD + mkdir dirx + echo I changed this file dirx/foo + git add dirx/foo + test_invalid_cache_tree +' + +test_expect_success 'git-add in subdir does not invalidate sibling cache-tree' ' + git tag no-children + test_when_finished git reset --hard no-children; git read-tree HEAD + mkdir dir1 dir2 + test_commit dir1/a + test_commit dir2/b + echo I changed this file dir1/a + git add dir1/a + test_invalid_cache_tree dir1/ +' + test_expect_success 'update-index invalidates cache-tree' ' test_when_finished git reset --hard; git read-tree HEAD echo I changed this file foo diff --git a/test-dump-cache-tree.c b/test-dump-cache-tree.c index 47eab97..ad42ca1 100644 --- a/test-dump-cache-tree.c +++ b/test-dump-cache-tree.c @@ -6,12 +6,12 @@ static void dump_one(struct cache_tree *it, const char *pfx, const char *x) { if (it-entry_count 0) - printf(%-40s %s%s (%d subtrees)\n, - invalid, x, pfx, it-subtree_nr); + printf(%-40s %s (%d subtrees)%s\n, + invalid, pfx, it-subtree_nr, x); else - printf(%s %s%s (%d entries, %d subtrees)\n, - sha1_to_hex(it-sha1), x, pfx, - it-entry_count, it-subtree_nr); + printf(%s %s (%d entries, %d subtrees)%s\n, + sha1_to_hex(it-sha1), pfx, + it-entry_count, it-subtree_nr, x); } static int dump_cache_tree(struct cache_tree *it, @@ -25,19 +25,19 @@ static int dump_cache_tree(struct cache_tree *it, /* missing in either */ return 0; - if (it-entry_count 0) { + if (it-entry_count 0) + /* invalid */ dump_one(it, pfx, ); - dump_one(ref, pfx, #(ref) ); - if (it-subtree_nr != ref-subtree_nr) - errs = 1; - } else { - dump_one(it, pfx, ); if (hashcmp(it-sha1, ref-sha1) || ref-entry_count != it-entry_count || ref-subtree_nr != it-subtree_nr) { - dump_one(ref, pfx, #(ref) ); + /* claims to be valid but is lying */ + dump_one(ref, pfx, #(error)); errs = 1; + } else { + /* is actually valid */ + dump_one(it, pfx, ); } } -- 2.0.0.390.gcb682f8 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html