Imported Upstream version 2.15.2
[platform/upstream/git.git] / t / t3201-branch-contains.sh
index f86f4bc..0ef1b6f 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-test_description='branch --contains <commit>, --merged, and --no-merged'
+test_description='branch --contains <commit>, --no-contains <commit> --merged, and --no-merged'
 
 . ./test-lib.sh
 
@@ -45,6 +45,22 @@ test_expect_success 'branch --contains master' '
 
 '
 
+test_expect_success 'branch --no-contains=master' '
+
+       git branch --no-contains=master >actual &&
+       >expect &&
+       test_cmp expect actual
+
+'
+
+test_expect_success 'branch --no-contains master' '
+
+       git branch --no-contains master >actual &&
+       >expect &&
+       test_cmp expect actual
+
+'
+
 test_expect_success 'branch --contains=side' '
 
        git branch --contains=side >actual &&
@@ -55,6 +71,34 @@ test_expect_success 'branch --contains=side' '
 
 '
 
+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 &&
+       >expect &&
+       test_cmp expect actual
+
+'
+
 test_expect_success 'side: branch --merged' '
 
        git branch --merged >actual &&
@@ -66,6 +110,16 @@ test_expect_success 'side: branch --merged' '
 
 '
 
+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 &&
@@ -95,4 +149,71 @@ test_expect_success 'master: branch --no-merged' '
 
 '
 
+test_expect_success 'branch --no-merged with pattern implies --list' '
+
+       git branch --no-merged=master master >actual &&
+       >expect &&
+       test_cmp expect 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
+'
+
+# 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 c77a0a9 second on master
+       * topic  2c939f4 [ahead 1] foo
+         zzz    c77a0a9 second on master
+       EOF
+       test_i18ncmp expect actual
+'
+
+test_expect_success 'branch --contains combined with --no-contains' '
+       git branch --contains zzz --no-contains topic >actual &&
+       cat >expect <<-\EOF &&
+         master
+         side
+         zzz
+       EOF
+       test_cmp expect actual
+
+'
+
 test_done