1
+#!/bin/sh
2
+
3
+test_description='git-am command-line options override saved options'
4
+
5
+. ./test-lib.sh
6
+. "$TEST_DIRECTORY"/lib-terminal.sh
7
+
8
+format_patch () {
9
+ git format-patch --stdout -1 "$1" >"$1".eml
10
+}
11
+
12
+test_expect_success 'setup' '
13
+ test_commit initial file &&
14
+ test_commit first file &&
15
+
16
+ git checkout initial &&
17
+ git mv file file2 &&
18
+ test_tick &&
19
+ git commit -m renamed-file &&
20
+ git tag renamed-file &&
21
+
22
+ git checkout -b side initial &&
23
+ test_commit side1 file &&
24
+ test_commit side2 file &&
25
+
26
+ format_patch side1 &&
27
+ format_patch side2
28
+'
29
+
30
+test_expect_success TTY '--3way overrides --no-3way' '
31
+ rm -fr .git/rebase-apply &&
32
+ git reset --hard &&
33
+ git checkout renamed-file &&
34
+
35
+ # Applying side1 will fail as the file has been renamed.
36
+ test_must_fail git am --no-3way side[12].eml &&
37
+ test_path_is_dir .git/rebase-apply &&
38
+ test_cmp_rev renamed-file HEAD &&
39
+ test -z "$(git ls-files -u)" &&
40
+
41
+ # Applying side1 with am --3way will succeed due to the threeway-merge.
42
+ # Applying side2 will fail as --3way does not apply to it.
43
+ test_must_fail test_terminal git am --3way </dev/zero &&
44
+ test_path_is_dir .git/rebase-apply &&
45
+ test side1 = "$(cat file2)"
46
+'
47
+
48
+test_expect_success '--no-quiet overrides --quiet' '
49
+ rm -fr .git/rebase-apply &&
50
+ git reset --hard &&
51
+ git checkout first &&
52
+
53
+ # Applying side1 will be quiet.
54
+ test_must_fail git am --quiet side[123].eml >out &&
55
+ test_path_is_dir .git/rebase-apply &&
56
+ ! test_i18ngrep "^Applying: " out &&
57
+ echo side1 >file &&
58
+ git add file &&
59
+
60
+ # Applying side1 will not be quiet.
61
+ # Applying side2 will be quiet.
62
+ git am --no-quiet --continue >out &&
63
+ echo "Applying: side1" >expected &&
64
+ test_i18ncmp expected out
65
+'
66
+
67
+test_expect_success TTY '--reject overrides --no-reject' '
68
+ rm -fr .git/rebase-apply &&
69
+ git reset --hard &&
70
+ git checkout first &&
71
+ rm -f file.rej &&
72
+
73
+ test_must_fail git am --no-reject side1.eml &&
74
+ test_path_is_dir .git/rebase-apply &&
75
+ test_path_is_missing file.rej &&
76
+
77
+ test_must_fail test_terminal git am --reject </dev/zero &&
78
+ test_path_is_dir .git/rebase-apply &&
79
+ test_path_is_file file.rej
80
+'
81
+
82
+test_done