From: "Roger Koranteng via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Jeff King <peff@peff.net>, Elijah Newren <newren@gmail.com>,
Patrick Steinhardt <ps@pks.im>,
Junio C Hamano <gitster@pobox.com>,
Kaartic Sivaraam <kaartic.sivaraam@gmail.com>,
Christian Couder <christian.couder@gmail.com>,
Siddharth Asthana <siddharthasthana31@gmail.com>,
Usman Akinyemi <usmanakinyemi202@gmail.com>,
Laveesh Bansal <laveeshb@laveeshbansal.com>,
Roger Koranteng <rogerkorantenng@gmail.com>,
Roger Koranteng <rogerkorantenng@gmail.com>
Subject: [PATCH v2] t1010: add basic tests for mktree --batch
Date: Tue, 10 Nov 2026 22:13:27 +0000 [thread overview]
Message-ID: <pull.2270.v2.git.1794348807240.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2270.git.1792497283164.gitgitgadget@gmail.com>
From: Roger Koranteng <rogerkorantenng@gmail.com>
The only "mktree --batch" test in t1010 is the one checking that it
survives a concurrent repack. Nothing covers basic batch mode, which
is how the leak fixed in 6272f3bd17 (mktree: plug per-tree leak in
--batch mode, 2026-08-29) went unnoticed.
Add a few tests for it. Two trees in one batch should get the same
IDs as running plain "mktree" on each, a trailing blank line should
not add an extra tree, -z input should work, and a tree that names a
missing object should make mktree die after printing the trees before
it. While at it, check that a blank line is rejected without --batch.
Suggested-by: Jeff King <peff@peff.net>
Tested-by: Laveesh Bansal <laveeshb@laveeshbansal.com>
Signed-off-by: Roger Koranteng <rogerkorantenng@gmail.com>
---
t1010: add basic tests for mktree --batch
v2: check the error message in the missing-object test, and move the
blank-line question out of the commit message.
One test feeds two blank lines in a row and expects an empty tree in
between. That is what mktree does today, but the documentation says
trees are separated by "a single blank line", so I am not sure it is
intended. Is it, or should mktree reject it?
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2270%2Frogerkorantenng%2Fmktree-batch-tests-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2270/rogerkorantenng/mktree-batch-tests-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/2270
Range-diff vs v1:
1: 7a928dccb0 ! 1: 40f09c123f t1010: add basic tests for mktree --batch
@@ Commit message
missing object should make mktree die after printing the trees before
it. While at it, check that a blank line is rejected without --batch.
- One test feeds two blank lines in a row and expects an empty tree in
- between. That is what mktree does today, but the documentation says
- trees are separated by "a single blank line", so I am not sure it is
- intended. The test records the current behaviour.
-
Suggested-by: Jeff King <peff@peff.net>
+ Tested-by: Laveesh Bansal <laveeshb@laveeshbansal.com>
Signed-off-by: Roger Koranteng <rogerkorantenng@gmail.com>
## t/t1010-mktree.sh ##
@@ t/t1010-mktree.sh: test_expect_success PIPE 'mktree --batch survives a concurren
+ echo &&
+ cat top.withsub
+ } >input &&
-+ test_must_fail git mktree --batch <input >actual &&
-+ test_cmp tree actual
++ test_must_fail git mktree --batch <input >actual 2>err &&
++ test_cmp tree actual &&
++ test_grep "object $missing is unavailable" err
+'
+
test_done
t/t1010-mktree.sh | 74 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
diff --git a/t/t1010-mktree.sh b/t/t1010-mktree.sh
index cecba55d45..bf03b62215 100755
--- a/t/t1010-mktree.sh
+++ b/t/t1010-mktree.sh
@@ -117,4 +117,78 @@ test_expect_success PIPE 'mktree --batch survives a concurrent repack retiring a
)
'
+test_expect_success 'mktree --batch writes one tree per input block' '
+ {
+ cat top &&
+ echo &&
+ cat top.withsub
+ } >input &&
+ cat tree tree.withsub >expect &&
+ git mktree --batch <input >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'mktree --batch ignores a trailing blank line' '
+ {
+ cat top &&
+ echo &&
+ cat top.withsub &&
+ echo
+ } >input &&
+ cat tree tree.withsub >expect &&
+ git mktree --batch <input >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'mktree --batch: two blank lines give an empty tree' '
+ {
+ cat top &&
+ echo &&
+ echo &&
+ cat top.withsub
+ } >input &&
+ {
+ cat tree &&
+ git mktree </dev/null &&
+ cat tree.withsub
+ } >expect &&
+ git mktree --batch <input >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'mktree rejects a blank line without --batch' '
+ {
+ cat top &&
+ echo &&
+ cat top.withsub
+ } >input &&
+ test_must_fail git mktree <input 2>err &&
+ test_grep "blank line only valid in batch mode" err
+'
+
+test_expect_success 'mktree --batch -z reads NUL-terminated input' '
+ {
+ git ls-tree -z $(cat tree) &&
+ printf "\0" &&
+ git ls-tree -z $(cat tree.withsub)
+ } >input &&
+ cat tree tree.withsub >expect &&
+ git mktree --batch -z <input >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'mktree --batch stops at a tree with a missing object' '
+ missing=$(test_oid deadbeef) &&
+ {
+ cat top &&
+ echo &&
+ printf "100644 blob %s\tmissing\n" "$missing" &&
+ echo &&
+ cat top.withsub
+ } >input &&
+ test_must_fail git mktree --batch <input >actual 2>err &&
+ test_cmp tree actual &&
+ test_grep "object $missing is unavailable" err
+'
+
test_done
base-commit: 47fdf2208c5b94c8cc01c106b8f7c85efb91c926
--
gitgitgadget
next prev parent reply other threads:[~2026-11-10 22:13 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-20 11:54 [PATCH] t1010: add basic tests for mktree --batch Roger Koranteng via GitGitGadget
2026-11-09 23:12 ` Laveesh Bansal
2026-11-10 22:13 ` Roger Koranteng via GitGitGadget [this message]
2026-11-11 21:50 ` [PATCH v2] " Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.2270.v2.git.1794348807240.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=kaartic.sivaraam@gmail.com \
--cc=laveeshb@laveeshbansal.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--cc=ps@pks.im \
--cc=rogerkorantenng@gmail.com \
--cc=siddharthasthana31@gmail.com \
--cc=usmanakinyemi202@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.