Merge branch 'pw/add-p-recount'
[git] / t / t3422-rebase-incompatible-options.sh
1 #!/bin/sh
2
3 test_description='test if rebase detects and aborts on incompatible options'
4 . ./test-lib.sh
5
6 test_expect_success 'setup' '
7         test_seq 2 9 >foo &&
8         git add foo &&
9         git commit -m orig &&
10
11         git branch A &&
12         git branch B &&
13
14         git checkout A &&
15         test_seq 1 9 >foo &&
16         git add foo &&
17         git commit -m A &&
18
19         git checkout B &&
20         echo "q qfoo();" | q_to_tab >>foo &&
21         git add foo &&
22         git commit -m B
23 '
24
25 #
26 # Rebase has lots of useful options like --whitepsace=fix, which are
27 # actually all built in terms of flags to git-am.  Since neither
28 # --merge nor --interactive (nor any options that imply those two) use
29 # git-am, using them together will result in flags like --whitespace=fix
30 # being ignored.  Make sure rebase warns the user and aborts instead.
31 #
32
33 test_rebase_am_only () {
34         opt=$1
35         shift
36         test_expect_success "$opt incompatible with --merge" "
37                 git checkout B^0 &&
38                 test_must_fail git rebase $opt --merge A
39         "
40
41         test_expect_success "$opt incompatible with --strategy=ours" "
42                 git checkout B^0 &&
43                 test_must_fail git rebase $opt --strategy=ours A
44         "
45
46         test_expect_success "$opt incompatible with --strategy-option=ours" "
47                 git checkout B^0 &&
48                 test_must_fail git rebase $opt --strategy-option=ours A
49         "
50
51         test_expect_success "$opt incompatible with --interactive" "
52                 git checkout B^0 &&
53                 test_must_fail git rebase $opt --interactive A
54         "
55
56         test_expect_success "$opt incompatible with --exec" "
57                 git checkout B^0 &&
58                 test_must_fail git rebase $opt --exec 'true' A
59         "
60
61 }
62
63 test_rebase_am_only --whitespace=fix
64 test_rebase_am_only --ignore-whitespace
65 test_rebase_am_only --committer-date-is-author-date
66 test_rebase_am_only -C4
67
68 test_expect_success REBASE_P '--preserve-merges incompatible with --signoff' '
69         git checkout B^0 &&
70         test_must_fail git rebase --preserve-merges --signoff A
71 '
72
73 test_expect_success REBASE_P \
74         '--preserve-merges incompatible with --rebase-merges' '
75         git checkout B^0 &&
76         test_must_fail git rebase --preserve-merges --rebase-merges A
77 '
78
79 test_expect_success '--rebase-merges incompatible with --strategy' '
80         git checkout B^0 &&
81         test_must_fail git rebase --rebase-merges -s resolve A
82 '
83
84 test_expect_success '--rebase-merges incompatible with --strategy-option' '
85         git checkout B^0 &&
86         test_must_fail git rebase --rebase-merges -Xignore-space-change A
87 '
88
89 test_done