#!/bin/sh global test_description := ''test cherry-picking (and reverting) a root commit'' source ./test-lib.sh test_expect_success setup ' echo first > file1 && git add file1 && test_tick && git commit -m "first" && git symbolic-ref HEAD refs/heads/second && rm .git/index file1 && echo second > file2 && git add file2 && test_tick && git commit -m "second" && git symbolic-ref HEAD refs/heads/third && rm .git/index file2 && echo third > file3 && git add file3 && test_tick && git commit -m "third" ' test_expect_success 'cherry-pick a root commit' ' git checkout second^0 && git cherry-pick master && echo first >expect && test_cmp expect file1 ' test_expect_success 'revert a root commit' ' git revert master && test_path_is_missing file1 ' test_expect_success 'cherry-pick a root commit with an external strategy' ' git cherry-pick --strategy=resolve master && echo first >expect && test_cmp expect file1 ' test_expect_success 'revert a root commit with an external strategy' ' git revert --strategy=resolve master && test_path_is_missing file1 ' test_expect_success 'cherry-pick two root commits' ' echo first >expect.file1 && echo second >expect.file2 && echo third >expect.file3 && git checkout second^0 && git cherry-pick master third && test_cmp expect.file1 file1 && test_cmp expect.file2 file2 && test_cmp expect.file3 file3 && git rev-parse --verify HEAD^^ && test_must_fail git rev-parse --verify HEAD^^^ ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"test cherry-picking (and reverting) a root commit">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\n"> <"\techo first > file1 &&\n"> <"\tgit add file1 &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m \"first\" &&\n"> <"\n"> <"\tgit symbolic-ref HEAD refs/heads/second &&\n"> <"\trm .git/index file1 &&\n"> <"\techo second > file2 &&\n"> <"\tgit add file2 &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m \"second\" &&\n"> <"\n"> <"\tgit symbolic-ref HEAD refs/heads/third &&\n"> <"\trm .git/index file2 &&\n"> <"\techo third > file3 &&\n"> <"\tgit add file3 &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m \"third\"\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"cherry-pick a root commit">)} { (SQ <"\n"> <"\n"> <"\tgit checkout second^0 &&\n"> <"\tgit cherry-pick master &&\n"> <"\techo first >expect &&\n"> <"\ttest_cmp expect file1\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"revert a root commit">)} {(SQ <"\n"> <"\n"> <"\tgit revert master &&\n"> <"\ttest_path_is_missing file1\n"> <"\n">)} ) (C {(test_expect_success)} {(SQ <"cherry-pick a root commit with an external strategy">)} { (SQ <"\n"> <"\n"> <"\tgit cherry-pick --strategy=resolve master &&\n"> <"\techo first >expect &&\n"> <"\ttest_cmp expect file1\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"revert a root commit with an external strategy">)} { (SQ <"\n"> <"\n"> <"\tgit revert --strategy=resolve master &&\n"> <"\ttest_path_is_missing file1\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"cherry-pick two root commits">)} { (SQ <"\n"> <"\n"> <"\techo first >expect.file1 &&\n"> <"\techo second >expect.file2 &&\n"> <"\techo third >expect.file3 &&\n"> <"\n"> <"\tgit checkout second^0 &&\n"> <"\tgit cherry-pick master third &&\n"> <"\n"> <"\ttest_cmp expect.file1 file1 &&\n"> <"\ttest_cmp expect.file2 file2 &&\n"> <"\ttest_cmp expect.file3 file3 &&\n"> <"\tgit rev-parse --verify HEAD^^ &&\n"> <"\ttest_must_fail git rev-parse --verify HEAD^^^\n"> <"\n"> ) } ) (C {(test_done)}) ] )