]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/sh | |
2 | # | |
3 | # Copyright (c) 2008 Stephen Haberman | |
4 | # | |
5 | ||
6 | test_description='git rebase preserve merges | |
7 | ||
8 | This test runs git rebase with preserve merges and ensures commits | |
9 | dropped by the --cherry-pick flag have their childrens parents | |
10 | rewritten. | |
11 | ' | |
12 | . ./test-lib.sh | |
13 | ||
14 | if ! test_have_prereq REBASE_P; then | |
15 | skip_all='skipping git rebase -p tests, as asked for' | |
16 | test_done | |
17 | fi | |
18 | ||
19 | # set up two branches like this: | |
20 | # | |
21 | # A - B - C - D - E | |
22 | # \ | |
23 | # F - G - H | |
24 | # \ | |
25 | # I | |
26 | # | |
27 | # where B, D and G touch the same file. | |
28 | ||
29 | test_expect_success 'setup' ' | |
30 | test_commit A file1 && | |
31 | test_commit B file1 1 && | |
32 | test_commit C file2 && | |
33 | test_commit D file1 2 && | |
34 | test_commit E file3 && | |
35 | git checkout A && | |
36 | test_commit F file4 && | |
37 | test_commit G file1 3 && | |
38 | test_commit H file5 && | |
39 | git checkout F && | |
40 | test_commit I file6 | |
41 | ' | |
42 | ||
43 | # A - B - C - D - E | |
44 | # \ \ \ | |
45 | # F - G - H -- L \ --> L | |
46 | # \ | \ | |
47 | # I -- G2 -- J -- K I -- K | |
48 | # G2 = same changes as G | |
49 | test_expect_success 'skip same-resolution merges with -p' ' | |
50 | git checkout H && | |
51 | test_must_fail git merge E && | |
52 | test_commit L file1 23 && | |
53 | git checkout I && | |
54 | test_commit G2 file1 3 && | |
55 | test_must_fail git merge E && | |
56 | test_commit J file1 23 && | |
57 | test_commit K file7 file7 && | |
58 | git rebase -i -p L && | |
59 | test $(git rev-parse HEAD^^) = $(git rev-parse L) && | |
60 | test "23" = "$(cat file1)" && | |
61 | test "I" = "$(cat file6)" && | |
62 | test "file7" = "$(cat file7)" | |
63 | ' | |
64 | ||
65 | # A - B - C - D - E | |
66 | # \ \ \ | |
67 | # F - G - H -- L2 \ --> L2 | |
68 | # \ | \ | |
69 | # I -- G3 --- J2 -- K2 I -- G3 -- K2 | |
70 | # G2 = different changes as G | |
71 | test_expect_success 'keep different-resolution merges with -p' ' | |
72 | git checkout H && | |
73 | test_must_fail git merge E && | |
74 | test_commit L2 file1 23 && | |
75 | git checkout I && | |
76 | test_commit G3 file1 4 && | |
77 | test_must_fail git merge E && | |
78 | test_commit J2 file1 24 && | |
79 | test_commit K2 file7 file7 && | |
80 | test_must_fail git rebase -i -p L2 && | |
81 | echo 234 > file1 && | |
82 | git add file1 && | |
83 | git rebase --continue && | |
84 | test $(git rev-parse HEAD^^^) = $(git rev-parse L2) && | |
85 | test "234" = "$(cat file1)" && | |
86 | test "I" = "$(cat file6)" && | |
87 | test "file7" = "$(cat file7)" | |
88 | ' | |
89 | ||
90 | test_done |