3780877e4e838d6bba8c016b0ecb7ec69a1359a2
[git/git.git] / t / t3427-rebase-subtree.sh
1 #!/bin/sh
2
3 test_description='git rebase tests for -Xsubtree
4
5 This test runs git rebase and tests the subtree strategy.
6 '
7 . ./test-lib.sh
8 . "$TEST_DIRECTORY"/lib-rebase.sh
9
10 commit_message() {
11 git log --pretty=format:%s -1 "$1"
12 }
13
14 test_expect_success 'setup' '
15 test_commit README &&
16 mkdir files &&
17 (
18 cd files &&
19 git init &&
20 test_commit master1 &&
21 test_commit master2 &&
22 test_commit master3
23 ) &&
24 git fetch files master &&
25 git branch files-master FETCH_HEAD &&
26 git read-tree --prefix=files_subtree files-master &&
27 git checkout -- files_subtree &&
28 tree=$(git write-tree) &&
29 head=$(git rev-parse HEAD) &&
30 rev=$(git rev-parse --verify files-master^0) &&
31 commit=$(git commit-tree -p $head -p $rev -m "Add subproject master" $tree) &&
32 git update-ref HEAD $commit &&
33 (
34 cd files_subtree &&
35 test_commit master4
36 ) &&
37 test_commit files_subtree/master5
38 '
39
40 # FAILURE: Does not preserve master4.
41 test_expect_failure 'Rebase -Xsubtree --preserve-merges --onto commit 4' '
42 reset_rebase &&
43 git checkout -b rebase-preserve-merges-4 master &&
44 git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
45 git commit -m "Empty commit" --allow-empty &&
46 git rebase -Xsubtree=files_subtree --preserve-merges --onto files-master master &&
47 verbose test "$(commit_message HEAD~)" = "files_subtree/master4"
48 '
49
50 # FAILURE: Does not preserve master5.
51 test_expect_failure 'Rebase -Xsubtree --preserve-merges --onto commit 5' '
52 reset_rebase &&
53 git checkout -b rebase-preserve-merges-5 master &&
54 git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
55 git commit -m "Empty commit" --allow-empty &&
56 git rebase -Xsubtree=files_subtree --preserve-merges --onto files-master master &&
57 verbose test "$(commit_message HEAD)" = "files_subtree/master5"
58 '
59
60 # FAILURE: Does not preserve master4.
61 test_expect_failure 'Rebase -Xsubtree --keep-empty --preserve-merges --onto commit 4' '
62 reset_rebase &&
63 git checkout -b rebase-keep-empty-4 master &&
64 git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
65 git commit -m "Empty commit" --allow-empty &&
66 git rebase -Xsubtree=files_subtree --keep-empty --preserve-merges --onto files-master master &&
67 verbose test "$(commit_message HEAD~2)" = "files_subtree/master4"
68 '
69
70 # FAILURE: Does not preserve master5.
71 test_expect_failure 'Rebase -Xsubtree --keep-empty --preserve-merges --onto commit 5' '
72 reset_rebase &&
73 git checkout -b rebase-keep-empty-5 master &&
74 git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
75 git commit -m "Empty commit" --allow-empty &&
76 git rebase -Xsubtree=files_subtree --keep-empty --preserve-merges --onto files-master master &&
77 verbose test "$(commit_message HEAD~)" = "files_subtree/master5"
78 '
79
80 # FAILURE: Does not preserve Empty.
81 test_expect_failure 'Rebase -Xsubtree --keep-empty --preserve-merges --onto empty commit' '
82 reset_rebase &&
83 git checkout -b rebase-keep-empty-empty master &&
84 git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
85 git commit -m "Empty commit" --allow-empty &&
86 git rebase -Xsubtree=files_subtree --keep-empty --preserve-merges --onto files-master master &&
87 verbose test "$(commit_message HEAD)" = "Empty commit"
88 '
89
90 # FAILURE: fatal: Could not parse object
91 test_expect_failure 'Rebase -Xsubtree --onto commit 4' '
92 reset_rebase &&
93 git checkout -b rebase-onto-4 master &&
94 git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
95 git commit -m "Empty commit" --allow-empty &&
96 git rebase -Xsubtree=files_subtree --onto files-master master &&
97 verbose test "$(commit_message HEAD~2)" = "files_subtree/master4"
98 '
99
100 # FAILURE: fatal: Could not parse object
101 test_expect_failure 'Rebase -Xsubtree --onto commit 5' '
102 reset_rebase &&
103 git checkout -b rebase-onto-5 master &&
104 git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
105 git commit -m "Empty commit" --allow-empty &&
106 git rebase -Xsubtree=files_subtree --onto files-master master &&
107 verbose test "$(commit_message HEAD~)" = "files_subtree/master5"
108 '
109 # FAILURE: fatal: Could not parse object
110 test_expect_failure 'Rebase -Xsubtree --onto empty commit' '
111 reset_rebase &&
112 git checkout -b rebase-onto-empty master &&
113 git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
114 git commit -m "Empty commit" --allow-empty &&
115 git rebase -Xsubtree=files_subtree --onto files-master master &&
116 verbose test "$(commit_message HEAD)" = "Empty commit"
117 '
118
119 test_done