git-commit-vandalism/t/t3201-branch-contains.sh
Johannes Schindelin 94287e788b t3201: finalize transitioning to using the branch name main
In 66713e84e7 (tests: prepare aligned mentions of the default branch
name, 2020-10-23), we started that transition, trying to prepare for a
time when `git init` would use that name for the initial branch.

Even if that time has not arrived, we can complete the transition by
making the test script independent of the default branch name. This also
allows us to drop the `PREPARE_FOR_MAIN_BRANCH` prereq from one test
case.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-12-16 17:41:40 -08:00

268 lines
5.3 KiB
Bash
Executable File

#!/bin/sh
test_description='branch --contains <commit>, --no-contains <commit> --merged, and --no-merged'
. ./test-lib.sh
test_expect_success setup '
>file &&
git add file &&
test_tick &&
git commit -m initial &&
git branch -M main &&
git branch side &&
echo 1 >file &&
test_tick &&
git commit -a -m "second on main" &&
git checkout side &&
echo 1 >file &&
test_tick &&
git commit -a -m "second on side" &&
git merge main
'
test_expect_success 'branch --contains=main' '
git branch --contains=main >actual &&
{
echo " main" && echo "* side"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --contains main' '
git branch --contains main >actual &&
{
echo " main" && echo "* side"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --no-contains=main' '
git branch --no-contains=main >actual &&
test_must_be_empty actual
'
test_expect_success 'branch --no-contains main' '
git branch --no-contains main >actual &&
test_must_be_empty actual
'
test_expect_success 'branch --contains=side' '
git branch --contains=side >actual &&
{
echo "* side"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --no-contains=side' '
git branch --no-contains=side >actual &&
{
echo " main"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --contains with pattern implies --list' '
git branch --contains=main main >actual &&
{
echo " main"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --no-contains with pattern implies --list' '
git branch --no-contains=main main >actual &&
test_must_be_empty actual
'
test_expect_success 'side: branch --merged' '
git branch --merged >actual &&
{
echo " main" &&
echo "* side"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --merged with pattern implies --list' '
git branch --merged=side main >actual &&
{
echo " main"
} >expect &&
test_cmp expect actual
'
test_expect_success 'side: branch --no-merged' '
git branch --no-merged >actual &&
test_must_be_empty actual
'
test_expect_success 'main: branch --merged' '
git checkout main &&
git branch --merged >actual &&
{
echo "* main"
} >expect &&
test_cmp expect actual
'
test_expect_success 'main: branch --no-merged' '
git branch --no-merged >actual &&
{
echo " side"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --no-merged with pattern implies --list' '
git branch --no-merged=main main >actual &&
test_must_be_empty actual
'
test_expect_success 'implicit --list conflicts with modification options' '
test_must_fail git branch --contains=main -d &&
test_must_fail git branch --contains=main -m foo &&
test_must_fail git branch --no-contains=main -d &&
test_must_fail git branch --no-contains=main -m foo
'
test_expect_success 'Assert that --contains only works on commits, not trees & blobs' '
test_must_fail git branch --contains main^{tree} &&
blob=$(git hash-object -w --stdin <<-\EOF
Some blob
EOF
) &&
test_must_fail git branch --contains $blob &&
test_must_fail git branch --no-contains $blob
'
test_expect_success 'multiple branch --contains' '
git checkout -b side2 main &&
>feature &&
git add feature &&
git commit -m "add feature" &&
git checkout -b next main &&
git merge side &&
git branch --contains side --contains side2 >actual &&
cat >expect <<-\EOF &&
* next
side
side2
EOF
test_cmp expect actual
'
test_expect_success 'multiple branch --merged' '
git branch --merged next --merged main >actual &&
cat >expect <<-\EOF &&
main
* next
side
EOF
test_cmp expect actual
'
test_expect_success 'multiple branch --no-contains' '
git branch --no-contains side --no-contains side2 >actual &&
cat >expect <<-\EOF &&
main
EOF
test_cmp expect actual
'
test_expect_success 'multiple branch --no-merged' '
git branch --no-merged next --no-merged main >actual &&
cat >expect <<-\EOF &&
side2
EOF
test_cmp expect actual
'
test_expect_success 'branch --contains combined with --no-contains' '
git checkout -b seen main &&
git merge side &&
git merge side2 &&
git branch --contains side --no-contains side2 >actual &&
cat >expect <<-\EOF &&
next
side
EOF
test_cmp expect actual
'
test_expect_success 'branch --merged combined with --no-merged' '
git branch --merged seen --no-merged next >actual &&
cat >expect <<-\EOF &&
* seen
side2
EOF
test_cmp expect actual
'
# We want to set up a case where the walk for the tracking info
# of one branch crosses the tip of another branch (and make sure
# that the latter walk does not mess up our flag to see if it was
# merged).
#
# Here "topic" tracks "main" with one extra commit, and "zzz" points to the
# same tip as main The name "zzz" must come alphabetically after "topic"
# as we process them in that order.
test_expect_success 'branch --merged with --verbose' '
git branch --track topic main &&
git branch zzz topic &&
git checkout topic &&
test_commit foo &&
git branch --merged topic >actual &&
cat >expect <<-\EOF &&
main
* topic
zzz
EOF
test_cmp expect actual &&
git branch --verbose --merged topic >actual &&
cat >expect <<-EOF &&
main $(git rev-parse --short main) second on main
* topic $(git rev-parse --short topic ) [ahead 1] foo
zzz $(git rev-parse --short zzz ) second on main
EOF
test_i18ncmp expect actual
'
test_done