Merge branch 'km/maint-doc-git-reset'
[git] / t / t3505-cherry-pick-empty.sh
1 #!/bin/sh
2
3 test_description='test cherry-picking an empty commit'
4
5 . ./test-lib.sh
6
7 test_expect_success setup '
8
9         echo first > file1 &&
10         git add file1 &&
11         test_tick &&
12         git commit -m "first" &&
13
14         git checkout -b empty-branch &&
15         test_tick &&
16         git commit --allow-empty -m "empty" &&
17
18         echo third >> file1 &&
19         git add file1 &&
20         test_tick &&
21         git commit --allow-empty-message -m "" &&
22
23         git checkout master &&
24         git checkout -b empty-branch2 &&
25         test_tick &&
26         git commit --allow-empty -m "empty"
27
28 '
29
30 test_expect_success 'cherry-pick an empty commit' '
31         git checkout master && {
32                 git cherry-pick empty-branch^
33                 test "$?" = 1
34         }
35 '
36
37 test_expect_success 'index lockfile was removed' '
38
39         test ! -f .git/index.lock
40
41 '
42
43 test_expect_success 'cherry-pick a commit with an empty message' '
44         git checkout master && {
45                 git cherry-pick empty-branch
46                 test "$?" = 1
47         }
48 '
49
50 test_expect_success 'index lockfile was removed' '
51
52         test ! -f .git/index.lock
53
54 '
55
56 test_expect_success 'cherry-pick a commit with an empty message with --allow-empty-message' '
57         git checkout -f master &&
58         git cherry-pick --allow-empty-message empty-branch
59 '
60
61 test_expect_success 'cherry pick an empty non-ff commit without --allow-empty' '
62         git checkout master &&
63         echo fourth >>file2 &&
64         git add file2 &&
65         git commit -m "fourth" &&
66         test_must_fail git cherry-pick empty-branch2
67 '
68
69 test_expect_success 'cherry pick an empty non-ff commit with --allow-empty' '
70         git checkout master &&
71         git cherry-pick --allow-empty empty-branch2
72 '
73
74 test_expect_success 'cherry pick with --keep-redundant-commits' '
75         git checkout master &&
76         git cherry-pick --keep-redundant-commits HEAD^
77 '
78
79 test_expect_success 'cherry-pick a commit that becomes no-op (prep)' '
80         git checkout master &&
81         git branch fork &&
82         echo foo >file2 &&
83         git add file2 &&
84         test_tick &&
85         git commit -m "add file2 on master" &&
86
87         git checkout fork &&
88         echo foo >file2 &&
89         git add file2 &&
90         test_tick &&
91         git commit -m "add file2 on the side"
92 '
93
94 test_expect_success 'cherry-pick a no-op without --keep-redundant' '
95         git reset --hard &&
96         git checkout fork^0 &&
97         test_must_fail git cherry-pick master
98 '
99
100 test_expect_success 'cherry-pick a no-op with --keep-redundant' '
101         git reset --hard &&
102         git checkout fork^0 &&
103         git cherry-pick --keep-redundant-commits master &&
104         git show -s --format='%s' >actual &&
105         echo "add file2 on master" >expect &&
106         test_cmp expect actual
107 '
108
109 test_done