Imported Upstream version 2.23.3
[platform/upstream/git.git] / t / t6007-rev-list-cherry-pick-file.sh
index 28d4f6b..f026837 100755 (executable)
@@ -57,7 +57,7 @@ test_expect_success '--left-right' '
        git rev-list --left-right B...C > actual &&
        git name-rev --stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
-       test_cmp actual.named expect
+       test_cmp expect actual.named
 '
 
 test_expect_success '--count' '
@@ -77,14 +77,14 @@ test_expect_success '--cherry-pick bar does not come up empty' '
        git rev-list --left-right --cherry-pick B...C -- bar > actual &&
        git name-rev --stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
-       test_cmp actual.named expect
+       test_cmp expect actual.named
 '
 
 test_expect_success 'bar does not come up empty' '
        git rev-list --left-right B...C -- bar > actual &&
        git name-rev --stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
-       test_cmp actual.named expect
+       test_cmp expect actual.named
 '
 
 cat >expect <<EOF
@@ -96,7 +96,45 @@ test_expect_success '--cherry-pick bar does not come up empty (II)' '
        git rev-list --left-right --cherry-pick F...E -- bar > actual &&
        git name-rev --stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
-       test_cmp actual.named expect
+       test_cmp expect actual.named
+'
+
+test_expect_success 'name-rev multiple --refs combine inclusive' '
+       git rev-list --left-right --cherry-pick F...E -- bar >actual &&
+       git name-rev --stdin --name-only --refs="*tags/F" --refs="*tags/E" \
+               <actual >actual.named &&
+       test_cmp expect actual.named
+'
+
+cat >expect <<EOF
+<tags/F
+EOF
+
+test_expect_success 'name-rev --refs excludes non-matched patterns' '
+       git rev-list --left-right --right-only --cherry-pick F...E -- bar >>expect &&
+       git rev-list --left-right --cherry-pick F...E -- bar >actual &&
+       git name-rev --stdin --name-only --refs="*tags/F" \
+               <actual >actual.named &&
+       test_cmp expect actual.named
+'
+
+cat >expect <<EOF
+<tags/F
+EOF
+
+test_expect_success 'name-rev --exclude excludes matched patterns' '
+       git rev-list --left-right --right-only --cherry-pick F...E -- bar >>expect &&
+       git rev-list --left-right --cherry-pick F...E -- bar >actual &&
+       git name-rev --stdin --name-only --refs="*tags/*" --exclude="*E" \
+               <actual >actual.named &&
+       test_cmp expect actual.named
+'
+
+test_expect_success 'name-rev --no-refs clears the refs list' '
+       git rev-list --left-right --cherry-pick F...E -- bar >expect &&
+       git name-rev --stdin --name-only --refs="*tags/F" --refs="*tags/E" --no-refs --refs="*tags/G" \
+               <expect >actual &&
+       test_cmp expect actual
 '
 
 cat >expect <<EOF
@@ -110,7 +148,7 @@ test_expect_success '--cherry-mark' '
        git rev-list --cherry-mark F...E -- bar > actual &&
        git name-rev --stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
-       test_cmp actual.named expect
+       test_cmp expect actual.named
 '
 
 cat >expect <<EOF
@@ -124,7 +162,7 @@ test_expect_success '--cherry-mark --left-right' '
        git rev-list --cherry-mark --left-right F...E -- bar > actual &&
        git name-rev --stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
-       test_cmp actual.named expect
+       test_cmp expect actual.named
 '
 
 cat >expect <<EOF
@@ -135,14 +173,14 @@ test_expect_success '--cherry-pick --right-only' '
        git rev-list --cherry-pick --right-only F...E -- bar > actual &&
        git name-rev --stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
-       test_cmp actual.named expect
+       test_cmp expect actual.named
 '
 
 test_expect_success '--cherry-pick --left-only' '
        git rev-list --cherry-pick --left-only E...F -- bar > actual &&
        git name-rev --stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
-       test_cmp actual.named expect
+       test_cmp expect actual.named
 '
 
 cat >expect <<EOF
@@ -154,7 +192,7 @@ test_expect_success '--cherry' '
        git rev-list --cherry F...E -- bar > actual &&
        git name-rev --stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
-       test_cmp actual.named expect
+       test_cmp expect actual.named
 '
 
 cat >expect <<EOF
@@ -163,7 +201,7 @@ EOF
 
 test_expect_success '--cherry --count' '
        git rev-list --cherry --count F...E -- bar > actual &&
-       test_cmp actual expect
+       test_cmp expect actual
 '
 
 cat >expect <<EOF
@@ -172,7 +210,7 @@ EOF
 
 test_expect_success '--cherry-mark --count' '
        git rev-list --cherry-mark --count F...E -- bar > actual &&
-       test_cmp actual expect
+       test_cmp expect actual
 '
 
 cat >expect <<EOF
@@ -181,7 +219,7 @@ EOF
 
 test_expect_success '--cherry-mark --left-right --count' '
        git rev-list --cherry-mark --left-right --count F...E -- bar > actual &&
-       test_cmp actual expect
+       test_cmp expect actual
 '
 
 test_expect_success '--cherry-pick with independent, but identical branches' '
@@ -207,4 +245,25 @@ test_expect_success '--count --left-right' '
        test_cmp expect actual
 '
 
+# Corrupt the object store deliberately to make sure
+# the object is not even checked for its existence.
+remove_loose_object () {
+       sha1="$(git rev-parse "$1")" &&
+       remainder=${sha1#??} &&
+       firsttwo=${sha1%$remainder} &&
+       rm .git/objects/$firsttwo/$remainder
+}
+
+test_expect_success '--cherry-pick avoids looking at full diffs' '
+       git checkout -b shy-diff &&
+       test_commit dont-look-at-me &&
+       echo Hello >dont-look-at-me.t &&
+       test_tick &&
+       git commit -m tip dont-look-at-me.t &&
+       git checkout -b mainline HEAD^ &&
+       test_commit to-cherry-pick &&
+       remove_loose_object shy-diff^:dont-look-at-me.t &&
+       git rev-list --cherry-pick ...shy-diff
+'
+
 test_done