Merge branch 'js/plug-leaks' into maint
[git] / t / t3407-rebase-abort.sh
1 #!/bin/sh
2
3 test_description='git rebase --abort tests'
4
5 . ./test-lib.sh
6
7 ### Test that we handle space characters properly
8 work_dir="$(pwd)/test dir"
9
10 test_expect_success setup '
11         mkdir -p "$work_dir" &&
12         cd "$work_dir" &&
13         git init &&
14         echo a > a &&
15         git add a &&
16         git commit -m a &&
17         git branch to-rebase &&
18
19         echo b > a &&
20         git commit -a -m b &&
21         echo c > a &&
22         git commit -a -m c &&
23
24         git checkout to-rebase &&
25         echo d > a &&
26         git commit -a -m "merge should fail on this" &&
27         echo e > a &&
28         git commit -a -m "merge should fail on this, too" &&
29         git branch pre-rebase
30 '
31
32 testrebase() {
33         type=$1
34         dotest=$2
35
36         test_expect_success "rebase$type --abort" '
37                 cd "$work_dir" &&
38                 # Clean up the state from the previous one
39                 git reset --hard pre-rebase &&
40                 test_must_fail git rebase$type master &&
41                 test_path_is_dir "$dotest" &&
42                 git rebase --abort &&
43                 test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
44                 test ! -d "$dotest"
45         '
46
47         test_expect_success "rebase$type --abort after --skip" '
48                 cd "$work_dir" &&
49                 # Clean up the state from the previous one
50                 git reset --hard pre-rebase &&
51                 test_must_fail git rebase$type master &&
52                 test_path_is_dir "$dotest" &&
53                 test_must_fail git rebase --skip &&
54                 test $(git rev-parse HEAD) = $(git rev-parse master) &&
55                 git rebase --abort &&
56                 test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
57                 test ! -d "$dotest"
58         '
59
60         test_expect_success "rebase$type --abort after --continue" '
61                 cd "$work_dir" &&
62                 # Clean up the state from the previous one
63                 git reset --hard pre-rebase &&
64                 test_must_fail git rebase$type master &&
65                 test_path_is_dir "$dotest" &&
66                 echo c > a &&
67                 echo d >> a &&
68                 git add a &&
69                 test_must_fail git rebase --continue &&
70                 test $(git rev-parse HEAD) != $(git rev-parse master) &&
71                 git rebase --abort &&
72                 test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
73                 test ! -d "$dotest"
74         '
75
76         test_expect_success "rebase$type --abort does not update reflog" '
77                 cd "$work_dir" &&
78                 # Clean up the state from the previous one
79                 git reset --hard pre-rebase &&
80                 git reflog show to-rebase > reflog_before &&
81                 test_must_fail git rebase$type master &&
82                 git rebase --abort &&
83                 git reflog show to-rebase > reflog_after &&
84                 test_cmp reflog_before reflog_after &&
85                 rm reflog_before reflog_after
86         '
87
88         test_expect_success 'rebase --abort can not be used with other options' '
89                 cd "$work_dir" &&
90                 # Clean up the state from the previous one
91                 git reset --hard pre-rebase &&
92                 test_must_fail git rebase$type master &&
93                 test_must_fail git rebase -v --abort &&
94                 test_must_fail git rebase --abort -v &&
95                 git rebase --abort
96         '
97 }
98
99 testrebase "" .git/rebase-apply
100 testrebase " --merge" .git/rebase-merge
101
102 test_expect_success 'rebase --quit' '
103         cd "$work_dir" &&
104         # Clean up the state from the previous one
105         git reset --hard pre-rebase &&
106         test_must_fail git rebase master &&
107         test_path_is_dir .git/rebase-apply &&
108         head_before=$(git rev-parse HEAD) &&
109         git rebase --quit &&
110         test $(git rev-parse HEAD) = $head_before &&
111         test ! -d .git/rebase-apply
112 '
113
114 test_expect_success 'rebase --merge --quit' '
115         cd "$work_dir" &&
116         # Clean up the state from the previous one
117         git reset --hard pre-rebase &&
118         test_must_fail git rebase --merge master &&
119         test_path_is_dir .git/rebase-merge &&
120         head_before=$(git rev-parse HEAD) &&
121         git rebase --quit &&
122         test $(git rev-parse HEAD) = $head_before &&
123         test ! -d .git/rebase-merge
124 '
125
126 test_done