git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
0e43ed76602b83b30a13f7f8e8f103c8cf19fa2d blob 4696 bytes (raw)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
 
#!/bin/sh

test_description='behavior of diff with symmetric-diff setups'

. ./test-lib.sh

# build these situations:
#  - normal merge with one merge base (br1...b2r);
#  - criss-cross merge ie 2 merge bases (br1...master);
#  - disjoint subgraph (orphan branch, br3...master).
#
#     B---E   <-- master
#    / \ /
#   A   X
#    \ / \
#     C---D--G   <-- br1
#      \    /
#       ---F   <-- br2
#
#  H  <-- br3
#
# We put files into a few commits so that we can verify the
# output as well.

test_expect_success setup '
	git commit --allow-empty -m A &&
	echo b >b &&
	git add b &&
	git commit -m B &&
	git checkout -b br1 HEAD^ &&
	echo c >c &&
	git add c &&
	git commit -m C &&
	git tag commit-C &&
	git merge -m D master &&
	git tag commit-D &&
	git checkout master &&
	git merge -m E commit-C &&
	git checkout -b br2 commit-C &&
	echo f >f &&
	git add f &&
	git commit -m F &&
	git checkout br1 &&
	git merge -m G br2 &&
	git checkout --orphan br3 &&
	git commit -m H
'

test_expect_success 'diff with one merge base' '
	git diff commit-D...br1 >tmp &&
	tail -n 1 tmp >actual &&
	echo +f >expect &&
	test_cmp expect actual
'

# The output (in tmp) can have +b or +c depending
# on which merge base (commit B or C) is picked.
# It should have one of those two, which comes out
# to seven lines.
test_expect_success 'diff with two merge bases' '
	git diff br1...master >tmp 2>err &&
	test_line_count = 7 tmp &&
	test_line_count = 1 err
'

test_expect_success 'diff with no merge bases' '
	test_must_fail git diff br2...br3 2>err &&
	test_i18ngrep "fatal: br2...br3: no merge base" err
'

test_expect_success 'diff with too many symmetric differences' '
	test_must_fail git diff br1...master br2...br3 2>err &&
	test_i18ngrep "usage" err
'

test_expect_success 'diff with symmetric difference and extraneous arg' '
	test_must_fail git diff master br1...master 2>err &&
	test_i18ngrep "usage" err
'

test_expect_success 'diff with two ranges' '
	test_must_fail git diff master br1..master br2..br3 2>err &&
	test_i18ngrep "usage" err
'

test_expect_success 'diff with ranges and extra arg' '
	test_must_fail git diff master br1..master commit-D 2>err &&
	test_i18ngrep "usage" err
'

test_expect_success 'diff --merge-base with two commits' '
	git diff commit-C master >expect &&
	git diff --merge-base br2 master >actual &&
	test_cmp expect actual
'

test_expect_success 'diff --merge-base with no commits' '
	git diff --merge-base >actual &&
	test_must_be_empty actual
'

test_expect_success 'diff --merge-base with one commit' '
	git checkout master &&
	git diff commit-C >expect &&
	git diff --merge-base br2 >actual &&
	test_cmp expect actual
'

test_expect_success 'diff --merge-base with one commit and unstaged changes' '
	git checkout master &&
	test_when_finished git reset --hard &&
	echo unstaged >>c &&
	git diff commit-C >expect &&
	git diff --merge-base br2 >actual &&
	test_cmp expect actual
'

test_expect_success 'diff --merge-base with one commit and staged and unstaged changes' '
	git checkout master &&
	test_when_finished git reset --hard &&
	echo staged >>c &&
	git add c &&
	echo unstaged >>c &&
	git diff commit-C >expect &&
	git diff --merge-base br2 >actual &&
	test_cmp expect actual
'

test_expect_success 'diff --merge-base --cached with one commit and staged and unstaged changes' '
	git checkout master &&
	test_when_finished git reset --hard &&
	echo staged >>c &&
	git add c &&
	echo unstaged >>c &&
	git diff --cached commit-C >expect &&
	git diff --cached --merge-base br2 >actual &&
	test_cmp expect actual
'

test_expect_success 'diff --merge-base with --no-index' '
	test_must_fail git diff --merge-base --no-index expect actual 2>err &&
	test_i18ngrep "fatal: --no-index and --merge-base are mutually exclusive" err
'

test_expect_success 'diff --merge-base with range' '
	test_must_fail git diff --merge-base br2..br3 2>err &&
	test_i18ngrep "fatal: --merge-base does not work with ranges" err
'

test_expect_success 'diff --merge-base non-commit' '
	test_must_fail git diff --merge-base master^{tree} 2>err &&
	test_i18ngrep "fatal: --merge-base only works with commits" err
'

test_expect_success 'diff --merge-base with three commits' '
	test_must_fail git diff --merge-base br1 br2 master 2>err &&
	test_i18ngrep "fatal: --merge-base does not work with more than two commits" err
'

test_expect_success 'diff --merge-base with no merge bases' '
	test_must_fail git diff --merge-base br2 br3 2>err &&
	test_i18ngrep "fatal: no merge base found" err
'

test_expect_success 'diff --merge-base with multiple merge bases' '
	test_must_fail git diff --merge-base master br1 2>err &&
	test_i18ngrep "fatal: multiple merge bases found" err
'

test_done
debug log:

solving 0e43ed7660 ...
found 0e43ed7660 in https://public-inbox.org/git/231ba3f661cc4aa7a55c44e339e187c6d70c5507.1599332861.git.liu.denton@gmail.com/ ||
	https://public-inbox.org/git/4f219cf0d1df1b92d2bd49e3449a4c387056a6cd.1599723087.git.liu.denton@gmail.com/
found 60c506c2b2 in git.git.git
preparing index
index prepared:
100755 60c506c2b2de2d444e89f7735cab0bcc59d25abd	t/t4068-diff-symmetric.sh

applying [1/2] https://public-inbox.org/git/231ba3f661cc4aa7a55c44e339e187c6d70c5507.1599332861.git.liu.denton@gmail.com/
diff --git a/t/t4068-diff-symmetric.sh b/t/t4068-diff-symmetric.sh
index 60c506c2b2..0e43ed7660 100755

Checking patch t/t4068-diff-symmetric.sh...
Applied patch t/t4068-diff-symmetric.sh cleanly.

skipping https://public-inbox.org/git/4f219cf0d1df1b92d2bd49e3449a4c387056a6cd.1599723087.git.liu.denton@gmail.com/ for 0e43ed7660
index at:
100755 0e43ed76602b83b30a13f7f8e8f103c8cf19fa2d	t/t4068-diff-symmetric.sh

Code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).