From c8bae7493d2f2910b57f13ded012e86bdcfb0532 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 16:47:53 +0200 Subject: Adding upstream version 1:2.39.2. Signed-off-by: Daniel Baumann --- t/t7401-submodule-summary.sh | 316 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 316 insertions(+) create mode 100755 t/t7401-submodule-summary.sh (limited to 't/t7401-submodule-summary.sh') diff --git a/t/t7401-submodule-summary.sh b/t/t7401-submodule-summary.sh new file mode 100755 index 0000000..542b333 --- /dev/null +++ b/t/t7401-submodule-summary.sh @@ -0,0 +1,316 @@ +#!/bin/sh +# +# Copyright (c) 2008 Ping Yin +# + +test_description='Summary support for submodules + +This test script tries to verify the sanity of summary subcommand of git submodule. +' + +# NOTE: This test script uses 'git add' instead of 'git submodule add' to add +# submodules to the superproject. Some submodule subcommands such as init and +# deinit might not work as expected in this script. t7421 does not have this +# caveat. +# +# NEEDSWORK: This test script is old fashioned and may need a big cleanup due to +# various reasons, one of them being that there are lots of commands taking place +# outside of 'test_expect_success' block, which is no longer in good-style. + +TEST_PASSES_SANITIZE_LEAK=true +. ./test-lib.sh + +add_file () { + sm=$1 + shift + owd=$(pwd) + cd "$sm" + for name; do + echo "$name" >"$name" && + git add "$name" && + test_tick && + git commit -m "Add $name" + done >/dev/null + git rev-parse --short HEAD + cd "$owd" +} +commit_file () { + test_tick && + git commit "$@" -m "Commit $*" >/dev/null +} + +test_create_repo sm1 && +add_file . foo >/dev/null + +head1=$(add_file sm1 foo1 foo2) + +test_expect_success 'added submodule' " + git add sm1 && + git submodule summary >actual && + cat >expected <<-EOF && + * sm1 0000000...$head1 (2): + > Add foo2 + + EOF + test_cmp expected actual +" + +test_expect_success 'added submodule (subdirectory)' " + mkdir sub && + ( + cd sub && + git submodule summary >../actual + ) && + cat >expected <<-EOF && + * ../sm1 0000000...$head1 (2): + > Add foo2 + + EOF + test_cmp expected actual +" + +test_expect_success 'added submodule (subdirectory only)' " + ( + cd sub && + git submodule summary . >../actual + ) && + test_must_be_empty actual +" + +test_expect_success 'added submodule (subdirectory with explicit path)' " + ( + cd sub && + git submodule summary ../sm1 >../actual + ) && + cat >expected <<-EOF && + * ../sm1 0000000...$head1 (2): + > Add foo2 + + EOF + test_cmp expected actual +" + +commit_file sm1 && +head2=$(add_file sm1 foo3) + +test_expect_success 'modified submodule(forward)' " + git submodule summary >actual && + cat >expected <<-EOF && + * sm1 $head1...$head2 (1): + > Add foo3 + + EOF + test_cmp expected actual +" + +test_expect_success 'modified submodule(forward), --files' " + git submodule summary --files >actual && + cat >expected <<-EOF && + * sm1 $head1...$head2 (1): + > Add foo3 + + EOF + test_cmp expected actual +" + +test_expect_success 'no ignore=all setting has any effect' " + git config -f .gitmodules submodule.sm1.path sm1 && + git config -f .gitmodules submodule.sm1.ignore all && + git config submodule.sm1.ignore all && + git config diff.ignoreSubmodules all && + git submodule summary >actual && + cat >expected <<-EOF && + * sm1 $head1...$head2 (1): + > Add foo3 + + EOF + test_cmp expected actual && + git config --unset diff.ignoreSubmodules && + git config --remove-section submodule.sm1 && + git config -f .gitmodules --remove-section submodule.sm1 +" + + +commit_file sm1 && +head3=$( + cd sm1 && + git reset --hard HEAD~2 >/dev/null && + git rev-parse --short HEAD +) + +test_expect_success 'modified submodule(backward)' " + git submodule summary >actual && + cat >expected <<-EOF && + * sm1 $head2...$head3 (2): + < Add foo3 + < Add foo2 + + EOF + test_cmp expected actual +" + +head4=$(add_file sm1 foo4 foo5) && +head4_full=$(GIT_DIR=sm1/.git git rev-parse --verify HEAD) +test_expect_success 'modified submodule(backward and forward)' " + git submodule summary >actual && + cat >expected <<-EOF && + * sm1 $head2...$head4 (4): + > Add foo5 + > Add foo4 + < Add foo3 + < Add foo2 + + EOF + test_cmp expected actual +" + +test_expect_success '--summary-limit' " + git submodule summary -n 3 >actual && + cat >expected <<-EOF && + * sm1 $head2...$head4 (4): + > Add foo5 + > Add foo4 + < Add foo3 + + EOF + test_cmp expected actual +" + +commit_file sm1 && +mv sm1 sm1-bak && +echo sm1 >sm1 && +head5=$(git hash-object sm1 | cut -c1-7) && +git add sm1 && +rm -f sm1 && +mv sm1-bak sm1 + +test_expect_success 'typechanged submodule(submodule->blob), --cached' " + git submodule summary --cached >actual && + cat >expected <<-EOF && + * sm1 $head4(submodule)->$head5(blob) (3): + < Add foo5 + + EOF + test_cmp expected actual +" + +test_expect_success 'typechanged submodule(submodule->blob), --files' " + git submodule summary --files >actual && + cat >expected <<-EOF && + * sm1 $head5(blob)->$head4(submodule) (3): + > Add foo5 + + EOF + test_cmp expected actual +" + +rm -rf sm1 && +git checkout-index sm1 +test_expect_success 'typechanged submodule(submodule->blob)' " + git submodule summary >actual && + cat >expected <<-EOF && + * sm1 $head4(submodule)->$head5(blob): + + EOF + test_cmp expected actual +" + +rm -f sm1 && +test_create_repo sm1 && +head6=$(add_file sm1 foo6 foo7) +test_expect_success 'nonexistent commit' " + git submodule summary >actual && + cat >expected <<-EOF && + * sm1 $head4...$head6: + Warn: sm1 doesn't contain commit $head4_full + + EOF + test_cmp expected actual +" + +commit_file +test_expect_success 'typechanged submodule(blob->submodule)' " + git submodule summary >actual && + cat >expected <<-EOF && + * sm1 $head5(blob)->$head6(submodule) (2): + > Add foo7 + + EOF + test_cmp expected actual +" + +commit_file sm1 && +rm -rf sm1 +test_expect_success 'deleted submodule' " + git submodule summary >actual && + cat >expected <<-EOF && + * sm1 $head6...0000000: + + EOF + test_cmp expected actual +" + +test_expect_success 'create second submodule' ' + test_create_repo sm2 && + head7=$(add_file sm2 foo8 foo9) && + git add sm2 +' + +test_expect_success 'multiple submodules' " + git submodule summary >actual && + cat >expected <<-EOF && + * sm1 $head6...0000000: + + * sm2 0000000...$head7 (2): + > Add foo9 + + EOF + test_cmp expected actual +" + +test_expect_success 'path filter' " + git submodule summary sm2 >actual && + cat >expected <<-EOF && + * sm2 0000000...$head7 (2): + > Add foo9 + + EOF + test_cmp expected actual +" + +commit_file sm2 +test_expect_success 'given commit' " + git submodule summary HEAD^ >actual && + cat >expected <<-EOF && + * sm1 $head6...0000000: + + * sm2 0000000...$head7 (2): + > Add foo9 + + EOF + test_cmp expected actual +" + +test_expect_success '--for-status' " + git submodule summary --for-status HEAD^ >actual && + test_cmp - actual <<-EOF + * sm1 $head6...0000000: + + * sm2 0000000...$head7 (2): + > Add foo9 + + EOF +" + +test_expect_success 'fail when using --files together with --cached' " + test_must_fail git submodule summary --files --cached +" + +test_expect_success 'should not fail in an empty repo' " + git init xyzzy && + cd xyzzy && + git submodule summary >output 2>&1 && + test_must_be_empty output +" + +test_done -- cgit v1.2.3