]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-objects tests: cover blindspots in stdin handling
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Mon, 21 Jun 2021 15:03:37 +0000 (17:03 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 29 Jun 2021 03:27:27 +0000 (20:27 -0700)
Cover blindspots in the testing of stdin handling, including the
"!len" condition added in b5d97e6b0a0 (pack-objects: run rev-list
equivalent internally., 2006-09-04). The codepath taken with --revs
and read_object_list_from_stdin() acts differently in some of these
common cases, let's test for those.

The "--stdin --revs" test being added here stresses the combination of
--stdin-packs and the revision.c --stdin argument, some of this was
covered in a test added in 339bce27f4f (builtin/pack-objects.c: add
'--stdin-packs' option, 2021-02-22), but let's make sure that
GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS=true keeps erroring out about
--stdin, and it isn't picked up by the revision.c API's handling of
that option.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t5300-pack-object.sh

index 5c5e53f0be9e2073a1e81ffe4c3323c1c784e4da..65e991e37061d62273e0835d7b5c7e26d994746a 100755 (executable)
@@ -34,6 +34,91 @@ test_expect_success 'setup' '
        } >expect
 '
 
+test_expect_success 'setup pack-object <stdin' '
+       git init pack-object-stdin &&
+       test_commit -C pack-object-stdin one &&
+       test_commit -C pack-object-stdin two
+
+'
+
+test_expect_success 'pack-object <stdin parsing: basic [|--revs]' '
+       cat >in <<-EOF &&
+       $(git -C pack-object-stdin rev-parse one)
+       EOF
+
+       git -C pack-object-stdin pack-objects basic-stdin <in &&
+       idx=$(echo pack-object-stdin/basic-stdin-*.idx) &&
+       git show-index <"$idx" >actual &&
+       test_line_count = 1 actual &&
+
+       git -C pack-object-stdin pack-objects --revs basic-stdin-revs <in &&
+       idx=$(echo pack-object-stdin/basic-stdin-revs-*.idx) &&
+       git show-index <"$idx" >actual &&
+       test_line_count = 3 actual
+'
+
+test_expect_success 'pack-object <stdin parsing: [|--revs] bad line' '
+       cat >in <<-EOF &&
+       $(git -C pack-object-stdin rev-parse one)
+       garbage
+       $(git -C pack-object-stdin rev-parse two)
+       EOF
+
+       sed "s/^> //g" >err.expect <<-EOF &&
+       fatal: expected object ID, got garbage:
+       >  garbage
+
+       EOF
+       test_must_fail git -C pack-object-stdin pack-objects bad-line-stdin <in 2>err.actual &&
+       test_cmp err.expect err.actual &&
+
+       cat >err.expect <<-EOF &&
+       fatal: bad revision '"'"'garbage'"'"'
+       EOF
+       test_must_fail git -C pack-object-stdin pack-objects --revs bad-line-stdin-revs <in 2>err.actual &&
+       test_cmp err.expect err.actual
+'
+
+test_expect_success 'pack-object <stdin parsing: [|--revs] empty line' '
+       cat >in <<-EOF &&
+       $(git -C pack-object-stdin rev-parse one)
+
+       $(git -C pack-object-stdin rev-parse two)
+       EOF
+
+       sed -e "s/^> //g" -e "s/Z$//g" >err.expect <<-EOF &&
+       fatal: expected object ID, got garbage:
+       >  Z
+
+       EOF
+       test_must_fail git -C pack-object-stdin pack-objects empty-line-stdin <in 2>err.actual &&
+       test_cmp err.expect err.actual &&
+
+       git -C pack-object-stdin pack-objects --revs empty-line-stdin-revs <in &&
+       idx=$(echo pack-object-stdin/empty-line-stdin-revs-*.idx) &&
+       git show-index <"$idx" >actual &&
+       test_line_count = 3 actual
+'
+
+test_expect_success 'pack-object <stdin parsing: [|--revs] with --stdin' '
+       cat >in <<-EOF &&
+       $(git -C pack-object-stdin rev-parse one)
+       $(git -C pack-object-stdin rev-parse two)
+       EOF
+
+       # There is the "--stdin-packs is incompatible with --revs"
+       # test below, but we should make sure that the revision.c
+       # --stdin is not picked up
+       cat >err.expect <<-EOF &&
+       fatal: disallowed abbreviated or ambiguous option '"'"'stdin'"'"'
+       EOF
+       test_must_fail git -C pack-object-stdin pack-objects stdin-with-stdin-option --stdin <in 2>err.actual &&
+       test_cmp err.expect err.actual &&
+
+       test_must_fail git -C pack-object-stdin pack-objects --stdin --revs stdin-with-stdin-option-revs 2>err.actual <in &&
+       test_cmp err.expect err.actual
+'
+
 # usage: check_deltas <stderr_from_pack_objects> <cmp_op> <nr_deltas>
 # e.g.: check_deltas stderr -gt 0
 check_deltas() {