git/t/t3201-branch-contains.sh
Johannes Schindelin 66713e84e7 tests: prepare aligned mentions of the default branch name
In some tests, the default branch name is part of aligned output. As we
want to change the default branch name to `main`, which is two
characters shorter than the old default branch name, we will have to
adjust those tests.

Since we use the original default branch name until the entire test
suite has been adjusted accordingly, the touched test cases need to be
guarded by a prereq (that is so far disabled so that they are skipped
for now).

The test cases that depend on those test cases that are newly guarded by
that prereq naturally have to be guarded, too.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-10-23 08:57:42 -07:00

266 lines
5.4 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 side &&
echo 1 >file &&
test_tick &&
git commit -a -m "second on master" &&
git checkout side &&
echo 1 >file &&
test_tick &&
git commit -a -m "second on side" &&
git merge master
'
test_expect_success 'branch --contains=master' '
git branch --contains=master >actual &&
{
echo " master" && echo "* side"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --contains master' '
git branch --contains master >actual &&
{
echo " master" && echo "* side"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --no-contains=master' '
git branch --no-contains=master >actual &&
test_must_be_empty actual
'
test_expect_success 'branch --no-contains master' '
git branch --no-contains master >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 " master"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --contains with pattern implies --list' '
git branch --contains=master master >actual &&
{
echo " master"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --no-contains with pattern implies --list' '
git branch --no-contains=master master >actual &&
test_must_be_empty actual
'
test_expect_success 'side: branch --merged' '
git branch --merged >actual &&
{
echo " master" &&
echo "* side"
} >expect &&
test_cmp expect actual
'
test_expect_success 'branch --merged with pattern implies --list' '
git branch --merged=side master >actual &&
{
echo " master"
} >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 'master: branch --merged' '
git checkout master &&
git branch --merged >actual &&
{
echo "* master"
} >expect &&
test_cmp expect actual
'
test_expect_success 'master: 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=master master >actual &&
test_must_be_empty actual
'
test_expect_success 'implicit --list conflicts with modification options' '
test_must_fail git branch --contains=master -d &&
test_must_fail git branch --contains=master -m foo &&
test_must_fail git branch --no-contains=master -d &&
test_must_fail git branch --no-contains=master -m foo
'
test_expect_success 'Assert that --contains only works on commits, not trees & blobs' '
test_must_fail git branch --contains master^{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 master &&
>feature &&
git add feature &&
git commit -m "add feature" &&
git checkout -b next master &&
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 master >actual &&
cat >expect <<-\EOF &&
master
* 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 &&
master
EOF
test_cmp expect actual
'
test_expect_success 'multiple branch --no-merged' '
git branch --no-merged next --no-merged master >actual &&
cat >expect <<-\EOF &&
side2
EOF
test_cmp expect actual
'
test_expect_success 'branch --contains combined with --no-contains' '
git checkout -b seen master &&
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 "master" with one extra commit, and "zzz" points to the
# same tip as master The name "zzz" must come alphabetically after "topic"
# as we process them in that order.
test_expect_success PREPARE_FOR_MAIN_BRANCH 'branch --merged with --verbose' '
git branch --track topic master &&
git branch zzz topic &&
git checkout topic &&
test_commit foo &&
git branch --merged topic >actual &&
cat >expect <<-\EOF &&
master
* 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