mirror of
https://github.com/git/git
synced 2024-10-28 19:25:47 +00:00

'git rev-parse' can limit the number of characters in the hash it outputs using the '--short' option, thereby, making the 'cut' invocation redundant. Since using '--short' implies '--verify' as well, we can safely replace the latter with the former. This change results in the helper functions getting the hash in the same way 'summary' gets the hash internally. So, avoid the unnecessary invocation to 'cut' in the helper functions. Mentored-by: Christian Couder <chriscool@tuxfamily.org> Mentored-by: Kaartic Sivaraam <kaartic.sivaraam@gmail.com> Signed-off-by: Shourya Shukla <shouryashukla.oo@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
306 lines
5.8 KiB
Bash
Executable file
306 lines
5.8 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2008 Ping Yin
|
|
#
|
|
|
|
test_description='Summary support for submodules
|
|
|
|
This test tries to verify the sanity of summary subcommand of git submodule.
|
|
'
|
|
|
|
. ./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_i18ncmp actual expected
|
|
"
|
|
|
|
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_i18ncmp actual expected
|
|
"
|
|
|
|
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_i18ncmp actual expected
|
|
"
|
|
|
|
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_i18ncmp actual expected
|
|
"
|
|
|
|
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_i18ncmp 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_i18ncmp 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
|