tvl-depot/third_party/git/t/t3201-branch-contains.sh
Vincent Ambo f4609b896f merge(3p/git): Merge git subtree at v2.29.2
This also bumps the stable nixpkgs to 20.09 as of 2020-11-21, because
there is some breakage in the git build related to the netrc
credentials helper which someone has taken care of in nixpkgs.

The stable channel is not used for anything other than git, so this
should be fine.

Change-Id: I3575a19dab09e1e9556cf8231d717de9890484fb
2020-11-21 19:45:56 +01: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 '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 &&
master $(git rev-parse --short master) second on master
* topic $(git rev-parse --short topic ) [ahead 1] foo
zzz $(git rev-parse --short zzz ) second on master
EOF
test_i18ncmp expect actual
'
test_done