git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
a3354b8f9aac79d8eebe1adc48e4107de50003b2 blob 3616 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
 
#!/bin/sh

test_description='Test merge without common ancestors'
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME

. ./test-lib.sh

git config merge.conflictstyle merge # TODO: use the default

# This scenario is based on a real-world repository of Shawn Pearce.

# 1 - A - D - F
#   \   X   /
#     B   X
#       X   \
# 2 - C - E - G

GIT_COMMITTER_DATE="2006-12-12 23:28:00 +0100"
export GIT_COMMITTER_DATE

test_expect_success 'setup tests' '
	GIT_TEST_COMMIT_GRAPH=0 &&
	export GIT_TEST_COMMIT_GRAPH &&
	echo 1 >a1 &&
	git add a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:00" git commit -m 1 a1 &&

	git checkout -b A main &&
	echo A >a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:01" git commit -m A a1 &&

	git checkout -b B main &&
	echo B >a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:02" git commit -m B a1 &&

	git checkout -b D A &&
	git rev-parse B >.git/MERGE_HEAD &&
	echo D >a1 &&
	git update-index a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:03" git commit -m D &&

	git symbolic-ref HEAD refs/heads/other &&
	echo 2 >a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:04" git commit -m 2 a1 &&

	git checkout -b C &&
	echo C >a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:05" git commit -m C a1 &&

	git checkout -b E C &&
	git rev-parse B >.git/MERGE_HEAD &&
	echo E >a1 &&
	git update-index a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:06" git commit -m E &&

	git checkout -b G E &&
	git rev-parse A >.git/MERGE_HEAD &&
	echo G >a1 &&
	git update-index a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:07" git commit -m G &&

	git checkout -b F D &&
	git rev-parse C >.git/MERGE_HEAD &&
	echo F >a1 &&
	git update-index a1 &&
	GIT_AUTHOR_DATE="2006-12-12 23:00:08" git commit -m F &&

	test_oid_cache <<-EOF
	idxstage1 sha1:ec3fe2a791706733f2d8fa7ad45d9a9672031f5e
	idxstage1 sha256:b3c8488929903aaebdeb22270cb6d36e5b8724b01ae0d4da24632f158c99676f
	EOF
'

test_expect_success 'combined merge conflicts' '
	test_must_fail git merge -m final G
'

test_expect_success 'result contains a conflict' '
	cat >expect <<-\EOF &&
	<<<<<<< HEAD
	F
	=======
	G
	>>>>>>> G
	EOF

	test_cmp expect a1
'

test_expect_success 'virtual trees were processed' '
	# TODO: fragile test, relies on ambigious merge-base resolution
	git ls-files --stage >out &&

	cat >expect <<-EOF &&
	100644 $(test_oid idxstage1) 1	a1
	100644 $(git rev-parse F:a1) 2	a1
	100644 $(git rev-parse G:a1) 3	a1
	EOF

	test_cmp expect out
'

test_expect_success 'refuse to merge binary files' '
	git reset --hard &&
	printf "\0" >binary-file &&
	git add binary-file &&
	git commit -m binary &&
	git checkout G &&
	printf "\0\0" >binary-file &&
	git add binary-file &&
	git commit -m binary2 &&
	test_must_fail git merge F >merge.out 2>merge.err &&
	grep "Cannot merge binary files: binary-file (HEAD vs. F)" merge.err
'

test_expect_success 'mark rename/delete as unmerged' '

	git reset --hard &&
	git checkout -b delete &&
	git rm a1 &&
	test_tick &&
	git commit -m delete &&
	git checkout -b rename HEAD^ &&
	git mv a1 a2 &&
	test_tick &&
	git commit -m rename &&
	test_must_fail git merge delete &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test 2 = $(git ls-files --unmerged | wc -l)
	else
		test 1 = $(git ls-files --unmerged | wc -l)
	fi &&
	git rev-parse --verify :2:a2 &&
	test_must_fail git rev-parse --verify :3:a2 &&
	git checkout -f delete &&
	test_must_fail git merge rename &&
	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
	then
		test 2 = $(git ls-files --unmerged | wc -l)
	else
		test 1 = $(git ls-files --unmerged | wc -l)
	fi &&
	test_must_fail git rev-parse --verify :2:a2 &&
	git rev-parse --verify :3:a2
'

test_done
debug log:

solving a3354b8f9a ...
found a3354b8f9a in https://public-inbox.org/git/20210609192842.696646-8-felipe.contreras@gmail.com/
found eaf48e941e in https://80x24.org/mirrors/git.git
preparing index
index prepared:
100755 eaf48e941e2a3934fde54ac9bdc22f96a7a035cd	t/t6404-recursive-merge.sh

applying [1/1] https://public-inbox.org/git/20210609192842.696646-8-felipe.contreras@gmail.com/
diff --git a/t/t6404-recursive-merge.sh b/t/t6404-recursive-merge.sh
index eaf48e941e..a3354b8f9a 100755

Checking patch t/t6404-recursive-merge.sh...
Applied patch t/t6404-recursive-merge.sh cleanly.

index at:
100755 a3354b8f9aac79d8eebe1adc48e4107de50003b2	t/t6404-recursive-merge.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).