* [Outreachy PATCH 0/2] t0410: fix exit code and hash assumptions in the missing-tree test @ 2026-10-14 13:45 Dorine Tipo 2026-10-14 13:45 ` [Outreachy PATCH 1/2] t0410: use rev-parse to get the subtree OID Dorine Tipo 2026-10-14 13:45 ` [Outreachy PATCH 2/2] t0410: keep git's exit code in test_grep calls Dorine Tipo 0 siblings, 2 replies; 4+ messages in thread From: Dorine Tipo @ 2026-10-14 13:45 UTC (permalink / raw) To: git Cc: kaartic.sivaraam, christian.couder, siddharthasthana31, usmanakinyemi202, Dorine Tipo This series cleans up the 'rev-list stops traversal at missing and promised tree' test in t0410: - Patch 1 replaces the 'git ls-tree | grep | head | cut' pipeline that finds the OID of a_dir with 'git rev-parse HEAD:a_dir'. The pipeline drops git's exit code, and its cut assumes a SHA-1 length, so it yields an abbreviated OID under SHA-256. - Patch 2 stores the output of 'git rev-parse' in variables before passing it to test_grep, so a failure in git stops the && chain. I ran the full test suite with both SHA-1 and SHA-256, and it passes. There are more places in t0410 that pass "$(git ...)" directly as an argument. If this approach looks good, I'm happy to convert the rest in a follow-up. This is my microproject for Outreachy. Dorine Tipo (2): t0410: use rev-parse to get the subtree OID t0410: keep git's exit code in test_grep calls t/t0410-partial-clone.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Outreachy PATCH 1/2] t0410: use rev-parse to get the subtree OID 2026-10-14 13:45 [Outreachy PATCH 0/2] t0410: fix exit code and hash assumptions in the missing-tree test Dorine Tipo @ 2026-10-14 13:45 ` Dorine Tipo 2026-10-14 20:01 ` Junio C Hamano 2026-10-14 13:45 ` [Outreachy PATCH 2/2] t0410: keep git's exit code in test_grep calls Dorine Tipo 1 sibling, 1 reply; 4+ messages in thread From: Dorine Tipo @ 2026-10-14 13:45 UTC (permalink / raw) To: git Cc: kaartic.sivaraam, christian.couder, siddharthasthana31, usmanakinyemi202, Dorine Tipo The 'rev-list stops traversal at missing and promised tree' test gets the OID of a_dir by piping 'git ls-tree' through grep, head and cut. The pipeline goes against t/README which says not to pipe the output of a git command, since only the last command's exit code is kept. 'cut -b13-52' also assumes a 40-character SHA-1 name, so under SHA-256 TREE2 holds an abbreviated OID. Use 'git rev-parse HEAD:a_dir' instead. It returns the full OID in a single command, the same way TREE is computed with 'git rev-parse foo^{tree}' just above. Signed-off-by: Dorine Tipo <dorine.a.tipo@gmail.com> --- t/t0410-partial-clone.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/t/t0410-partial-clone.sh b/t/t0410-partial-clone.sh index 788e9a1631..a24b663f73 100755 --- a/t/t0410-partial-clone.sh +++ b/t/t0410-partial-clone.sh @@ -405,7 +405,7 @@ test_expect_success 'rev-list stops traversal at missing and promised tree' ' TREE=$(git -C repo rev-parse foo^{tree}) && # a tree referenced by HEAD^{tree} (tree referenced from tree) - TREE2=$(git -C repo ls-tree HEAD^{tree} | grep " tree " | head -1 | cut -b13-52) && + TREE2=$(git -C repo rev-parse HEAD:a_dir) && promise_and_delete "$TREE" && promise_and_delete "$TREE2" && -- 2.34.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Outreachy PATCH 1/2] t0410: use rev-parse to get the subtree OID 2026-10-14 13:45 ` [Outreachy PATCH 1/2] t0410: use rev-parse to get the subtree OID Dorine Tipo @ 2026-10-14 20:01 ` Junio C Hamano 0 siblings, 0 replies; 4+ messages in thread From: Junio C Hamano @ 2026-10-14 20:01 UTC (permalink / raw) To: Dorine Tipo Cc: git, kaartic.sivaraam, christian.couder, siddharthasthana31, usmanakinyemi202 Dorine Tipo <dorine.a.tipo@gmail.com> writes: > The 'rev-list stops traversal at missing and promised tree' test gets > the OID of a_dir by piping 'git ls-tree' through grep, head and cut. > > The pipeline goes against t/README which says not to pipe the output > of a git command, since only the last command's exit code is kept. > 'cut -b13-52' also assumes a 40-character SHA-1 name, so under SHA-256 > TREE2 holds an abbreviated OID. > > Use 'git rev-parse HEAD:a_dir' instead. It returns the full OID in a > single command, the same way TREE is computed with > 'git rev-parse foo^{tree}' just above. > > Signed-off-by: Dorine Tipo <dorine.a.tipo@gmail.com> > --- > t/t0410-partial-clone.sh | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/t/t0410-partial-clone.sh b/t/t0410-partial-clone.sh > index 788e9a1631..a24b663f73 100755 > --- a/t/t0410-partial-clone.sh > +++ b/t/t0410-partial-clone.sh > @@ -405,7 +405,7 @@ test_expect_success 'rev-list stops traversal at missing and promised tree' ' > TREE=$(git -C repo rev-parse foo^{tree}) && > > # a tree referenced by HEAD^{tree} (tree referenced from tree) > - TREE2=$(git -C repo ls-tree HEAD^{tree} | grep " tree " | head -1 | cut -b13-52) && > + TREE2=$(git -C repo rev-parse HEAD:a_dir) && > > promise_and_delete "$TREE" && > promise_and_delete "$TREE2" && [devil's advocate hat on] That may avoid piping, but are they chekcing the same thing? If HEAD had a tree that sorts before a_dir due to a bug, the original test would have used that tree instead of the tree of a_dir. Later tests may have noticed that the tree object is not what is expected for a_dir and led to the discovery of such a bug. The new test goes directly to a_dir so it wouldn't catch such a bug. [devil's advoicate hat off] Arguably, the use of "head -1" in the original pipeline is unnecessary as 'repo' prepared there only has a_dir/something and nothing else, and if the extra tree that was added by a bug sorted after a_dir, it would have hidden such a bug, instead of catching it. So in the sense, it would be better to assume that the tree would be created in a shape that we expect and explicitly name the directory we are interested in i.e., "HEAD:a_dir". So, one thing we may want to add to the second paragraph of the proposed log message is that the original assumed silently that the first tree object in ls-tree output is the tree we are intrerested in, without even validating what path the tree was stored at, and it would be an improvement to name 'a_dir' explicitly in the test. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Outreachy PATCH 2/2] t0410: keep git's exit code in test_grep calls 2026-10-14 13:45 [Outreachy PATCH 0/2] t0410: fix exit code and hash assumptions in the missing-tree test Dorine Tipo 2026-10-14 13:45 ` [Outreachy PATCH 1/2] t0410: use rev-parse to get the subtree OID Dorine Tipo @ 2026-10-14 13:45 ` Dorine Tipo 1 sibling, 0 replies; 4+ messages in thread From: Dorine Tipo @ 2026-10-14 13:45 UTC (permalink / raw) To: git Cc: kaartic.sivaraam, christian.couder, siddharthasthana31, usmanakinyemi202, Dorine Tipo The 'rev-list stops traversal at missing and promised tree' test passes "$(git -C repo rev-parse ...)" directly to test_grep. t/README says not to use command substitution in a way that discards git's exit code: the && chain only sees test_grep's exit code, so a failure in git is not caught there. Assign the rev-parse output to variables first and pass those to test_grep instead. Signed-off-by: Dorine Tipo <dorine.a.tipo@gmail.com> --- t/t0410-partial-clone.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/t/t0410-partial-clone.sh b/t/t0410-partial-clone.sh index a24b663f73..57da830105 100755 --- a/t/t0410-partial-clone.sh +++ b/t/t0410-partial-clone.sh @@ -413,9 +413,13 @@ test_expect_success 'rev-list stops traversal at missing and promised tree' ' git -C repo config core.repositoryformatversion 1 && git -C repo config extensions.partialclone "arbitrary string" && git -C repo rev-list --exclude-promisor-objects --objects HEAD >out && - test_grep $(git -C repo rev-parse foo) out && + + FOO=$(git -C repo rev-parse foo) && + HEAD_OID=$(git -C repo rev-parse HEAD) && + + test_grep "$FOO" out && test_grep ! $TREE out && - test_grep $(git -C repo rev-parse HEAD) out && + test_grep "$HEAD_OID" out && test_grep ! $TREE2 out ' -- 2.34.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-10-14 20:01 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-10-14 13:45 [Outreachy PATCH 0/2] t0410: fix exit code and hash assumptions in the missing-tree test Dorine Tipo 2026-10-14 13:45 ` [Outreachy PATCH 1/2] t0410: use rev-parse to get the subtree OID Dorine Tipo 2026-10-14 20:01 ` Junio C Hamano 2026-10-14 13:45 ` [Outreachy PATCH 2/2] t0410: keep git's exit code in test_grep calls Dorine Tipo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox