* [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; 5+ 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] 5+ 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; 5+ 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] 5+ 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
2026-10-15 15:47 ` Dorine Tipo
0 siblings, 1 reply; 5+ 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] 5+ messages in thread* Re: [Outreachy PATCH 1/2] t0410: use rev-parse to get the subtree OID
2026-10-14 20:01 ` Junio C Hamano
@ 2026-10-15 15:47 ` Dorine Tipo
0 siblings, 0 replies; 5+ messages in thread
From: Dorine Tipo @ 2026-10-15 15:47 UTC (permalink / raw)
To: Junio C Hamano
Cc: git, kaartic.sivaraam, christian.couder, siddharthasthana31,
usmanakinyemi202
On Wed, Oct 14, 2026 at 01:01:29PM -0700, Junio C Hamano wrote:
>
> [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.
>
>
Thank you, that makes sense. I'll add that to the second paragraph in v2.
I'll wait a little to see if any changes are needed on patch 2/2, then
send v2 with everything together.
^ permalink raw reply [flat|nested] 5+ 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; 5+ 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] 5+ messages in thread
end of thread, other threads:[~2026-10-15 15:47 UTC | newest]
Thread overview: 5+ 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-15 15:47 ` Dorine Tipo
2026-10-14 13:45 ` [Outreachy PATCH 2/2] t0410: keep git's exit code in test_grep calls Dorine Tipo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.