Merge branch 'jl/maint-1.7.10-recurse-submodules-with-symlink' into maint
[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 an empty non-ff commit without --allow-empty' '
57         git checkout master &&
58         echo fourth >>file2 &&
59         git add file2 &&
60         git commit -m "fourth" &&
61         test_must_fail git cherry-pick empty-branch2
62 '
63
64 test_expect_success 'cherry pick an empty non-ff commit with --allow-empty' '
65         git checkout master &&
66         git cherry-pick --allow-empty empty-branch2
67 '
68
69 test_expect_success 'cherry pick with --keep-redundant-commits' '
70         git checkout master &&
71         git cherry-pick --keep-redundant-commits HEAD^
72 '
73
74 test_expect_success 'cherry-pick a commit that becomes no-op (prep)' '
75         git checkout master &&
76         git branch fork &&
77         echo foo >file2 &&
78         git add file2 &&
79         test_tick &&
80         git commit -m "add file2 on master" &&
81
82         git checkout fork &&
83         echo foo >file2 &&
84         git add file2 &&
85         test_tick &&
86         git commit -m "add file2 on the side"
87 '
88
89 test_expect_success 'cherry-pick a no-op without --keep-redundant' '
90         git reset --hard &&
91         git checkout fork^0 &&
92         test_must_fail git cherry-pick master
93 '
94
95 test_expect_success 'cherry-pick a no-op with --keep-redundant' '
96         git reset --hard &&
97         git checkout fork^0 &&
98         git cherry-pick --keep-redundant-commits master &&
99         git show -s --format='%s' >actual &&
100         echo "add file2 on master" >expect &&
101         test_cmp expect actual
102 '
103
104 test_done