t9151: Add two new svn:mergeinfo test cases

When svn:mergeinfo contains two new parents in a specific order and
one is ancestor of the other, it is possible that git-svn discards the
wrong one. The first test case ("commit made to merged branch is
reachable from the merge") proves this.

The second test case ("merging two branches in one commit is detected
correctly") is just for completeness, since there was no test for
merging two (feature) branches to trunk in one commit.

Signed-off-by: Tuomas Suutari <tuomas.suutari@gmail.com>
Acked-by: Eric Wong <normalperson@yhbt.net>
This commit is contained in:
Tuomas Suutari 2010-02-22 09:57:21 +02:00 коммит произвёл Eric Wong
Родитель ae5b370c9b
Коммит 9560808f2e
3 изменённых файлов: 584 добавлений и 56 удалений

Просмотреть файл

@ -33,6 +33,21 @@ test_expect_success 'svn non-merge merge commits did not become git merge commit
[ -z "$bad_non_merges" ] [ -z "$bad_non_merges" ]
' '
test_expect_failure 'commit made to merged branch is reachable from the merge' '
before_commit=$(git rev-list --all --grep="trunk commit before merging trunk to b2")
merge_commit=$(git rev-list --all --grep="Merge trunk to b2")
not_reachable=$(git rev-list -1 $before_commit --not $merge_commit)
[ -z "$not_reachable" ]
'
test_expect_success 'merging two branches in one commit is detected correctly' '
f1_commit=$(git rev-list --all --grep="make f1 branch from trunk")
f2_commit=$(git rev-list --all --grep="make f2 branch from trunk")
merge_commit=$(git rev-list --all --grep="Merge f1 and f2 to trunk")
not_reachable=$(git rev-list -1 $f1_commit $f2_commit --not $merge_commit)
[ -z "$not_reachable" ]
'
test_expect_failure 'everything got merged in the end' ' test_expect_failure 'everything got merged in the end' '
unmerged=$(git rev-list --all --not master) unmerged=$(git rev-list --all --not master)
[ -z "$unmerged" ] [ -z "$unmerged" ]

Просмотреть файл

@ -156,6 +156,89 @@ svn merge ../branches/right --accept postpone
i=$(commit $i "non-merge right to trunk 2") i=$(commit $i "non-merge right to trunk 2")
cd .. cd ..
say "Branching b1 from trunk"
svn update
svn cp trunk branches/b1
i=$(commit $i "make b1 branch from trunk")
say "Branching b2 from trunk"
svn update
svn cp trunk branches/b2
i=$(commit $i "make b2 branch from trunk")
say "Make a commit to b2"
svn update
cd branches/b2
echo "b2" > b2file
svn add b2file
i=$(commit $i "b2 update 1")
cd ../..
say "Make a commit to b1"
svn update
cd branches/b1
echo "b1" > b1file
svn add b1file
i=$(commit $i "b1 update 1")
cd ../..
say "Merge b1 to trunk"
svn update
cd trunk
svn merge ../branches/b1/ --accept postpone
i=$(commit $i "Merge b1 to trunk")
cd ..
say "Make a commit to trunk before merging trunk to b2"
svn update
cd trunk
echo "trunk" > trunkfile
svn add trunkfile
i=$(commit $i "trunk commit before merging trunk to b2")
cd ..
say "Merge trunk to b2"
svn update
cd branches/b2
svn merge ../../trunk/ --accept postpone
i=$(commit $i "Merge trunk to b2")
cd ../..
say "Merge b2 to trunk"
svn update
cd trunk
svn merge ../branches/b2/ --accept postpone
svn resolved b1file
svn resolved trunkfile
i=$(commit $i "Merge b2 to trunk")
cd ..
say "Creating f1 from trunk with a new file"
svn update
svn cp trunk branches/f1
cd branches/f1
echo "f1" > f1file
svn add f1file
cd ../..
i=$(commit $i "make f1 branch from trunk with a new file")
say "Creating f2 from trunk with a new file"
svn update
svn cp trunk branches/f2
cd branches/f2
echo "f2" > f2file
svn add f2file
cd ../..
i=$(commit $i "make f2 branch from trunk with a new file")
say "Merge f1 and f2 to trunk in one go"
svn update
cd trunk
svn merge ../branches/f1/ --accept postpone
svn merge ../branches/f2/ --accept postpone
i=$(commit $i "Merge f1 and f2 to trunk")
cd ..
say "Adding subdirectory to LEFT" say "Adding subdirectory to LEFT"
svn update svn update
cd branches/left cd branches/left

Просмотреть файл

@ -1633,13 +1633,13 @@ PROPS-END
Revision-number: 25 Revision-number: 25
Prop-content-length: 135 Prop-content-length: 129
Content-length: 135 Content-length: 129
K 7 K 7
svn:log svn:log
V 37 V 31
(r25) add subdirectory to left branch (r25) make b1 branch from trunk
K 10 K 10
svn:author svn:author
V 3 V 3
@ -1647,7 +1647,421 @@ adm
K 8 K 8
svn:date svn:date
V 27 V 27
2010-01-19T04:14:46.052649Z 2010-02-22T06:18:56.084589Z
PROPS-END
Node-path: branches/b1
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 24
Node-copyfrom-path: trunk
Revision-number: 26
Prop-content-length: 129
Content-length: 129
K 7
svn:log
V 31
(r26) make b2 branch from trunk
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:18:59.076940Z
PROPS-END
Node-path: branches/b2
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 25
Node-copyfrom-path: trunk
Revision-number: 27
Prop-content-length: 115
Content-length: 115
K 7
svn:log
V 17
(r27) b2 update 1
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:19:01.095762Z
PROPS-END
Node-path: branches/b2/b2file
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 3
Text-content-md5: 5edbdd57cba621eb3c6e601bf563b4dc
Text-content-sha1: 9d4b38049776bd0a2074d67cad23f8eaed35a3b3
Content-length: 13
PROPS-END
b2
Revision-number: 28
Prop-content-length: 115
Content-length: 115
K 7
svn:log
V 17
(r28) b1 update 1
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:19:03.097465Z
PROPS-END
Node-path: branches/b1/b1file
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 3
Text-content-md5: 08778dfd9ac4f603231896aba7aad523
Text-content-sha1: b551771aa4ad5b14123fc3bd98d89db2bc0edd4f
Content-length: 13
PROPS-END
b1
Revision-number: 29
Prop-content-length: 121
Content-length: 121
K 7
svn:log
V 23
(r29) Merge b1 to trunk
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:19:06.073175Z
PROPS-END
Node-path: trunk
Node-kind: dir
Node-action: change
Prop-content-length: 118
Content-length: 118
K 13
svn:mergeinfo
V 83
/branches/b1:25-28
/branches/left:2-22
/branches/left-sub:4-19
/branches/right:2-22
PROPS-END
Node-path: trunk/b1file
Node-kind: file
Node-action: add
Node-copyfrom-rev: 28
Node-copyfrom-path: branches/b1/b1file
Text-copy-source-md5: 08778dfd9ac4f603231896aba7aad523
Text-copy-source-sha1: b551771aa4ad5b14123fc3bd98d89db2bc0edd4f
Revision-number: 30
Prop-content-length: 143
Content-length: 143
K 7
svn:log
V 45
(r30) trunk commit before merging trunk to b2
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:19:08.096353Z
PROPS-END
Node-path: trunk/trunkfile
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 6
Text-content-md5: edf45fe5c98c5367733b39bbb2bb20d9
Text-content-sha1: 7361d1685e5c86dfc523620cfaf598f196f86239
Content-length: 16
PROPS-END
trunk
Revision-number: 31
Prop-content-length: 121
Content-length: 121
K 7
svn:log
V 23
(r31) Merge trunk to b2
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:19:11.081541Z
PROPS-END
Node-path: branches/b2
Node-kind: dir
Node-action: change
Prop-content-length: 131
Content-length: 131
K 13
svn:mergeinfo
V 96
/branches/b1:25-28
/branches/left:2-22
/branches/left-sub:4-19
/branches/right:2-22
/trunk:26-30
PROPS-END
Node-path: branches/b2/b1file
Node-kind: file
Node-action: add
Node-copyfrom-rev: 30
Node-copyfrom-path: trunk/b1file
Text-copy-source-md5: 08778dfd9ac4f603231896aba7aad523
Text-copy-source-sha1: b551771aa4ad5b14123fc3bd98d89db2bc0edd4f
Node-path: branches/b2/trunkfile
Node-kind: file
Node-action: add
Node-copyfrom-rev: 30
Node-copyfrom-path: trunk/trunkfile
Text-copy-source-md5: edf45fe5c98c5367733b39bbb2bb20d9
Text-copy-source-sha1: 7361d1685e5c86dfc523620cfaf598f196f86239
Revision-number: 32
Prop-content-length: 121
Content-length: 121
K 7
svn:log
V 23
(r32) Merge b2 to trunk
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:19:14.117939Z
PROPS-END
Node-path: trunk
Node-kind: dir
Node-action: change
Prop-content-length: 138
Content-length: 138
K 13
svn:mergeinfo
V 102
/branches/b1:25-28
/branches/b2:26-31
/branches/left:2-22
/branches/left-sub:4-19
/branches/right:2-22
PROPS-END
Node-path: trunk/b2file
Node-kind: file
Node-action: add
Node-copyfrom-rev: 31
Node-copyfrom-path: branches/b2/b2file
Text-copy-source-md5: 5edbdd57cba621eb3c6e601bf563b4dc
Text-copy-source-sha1: 9d4b38049776bd0a2074d67cad23f8eaed35a3b3
Revision-number: 33
Prop-content-length: 145
Content-length: 145
K 7
svn:log
V 47
(r33) make f1 branch from trunk with a new file
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:19:17.105832Z
PROPS-END
Node-path: branches/f1
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 32
Node-copyfrom-path: trunk
Node-path: branches/f1/f1file
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 3
Text-content-md5: 2b1abc6b6c5c0018851f9f8e6475563b
Text-content-sha1: aece6dfba588900e00d95601d22b4408d49580af
Content-length: 13
PROPS-END
f1
Revision-number: 34
Prop-content-length: 145
Content-length: 145
K 7
svn:log
V 47
(r34) make f2 branch from trunk with a new file
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:19:20.110057Z
PROPS-END
Node-path: branches/f2
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 33
Node-copyfrom-path: trunk
Node-path: branches/f2/f2file
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 3
Text-content-md5: 575c5638d60271457e54ab7d07309502
Text-content-sha1: 1c49a440c352f3473efa9512255033b94dc7def0
Content-length: 13
PROPS-END
f2
Revision-number: 35
Prop-content-length: 128
Content-length: 128
K 7
svn:log
V 30
(r35) Merge f1 and f2 to trunk
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:19:24.081490Z
PROPS-END
Node-path: trunk
Node-kind: dir
Node-action: change
Prop-content-length: 173
Content-length: 173
K 13
svn:mergeinfo
V 137
/branches/b1:25-28
/branches/b2:26-31
/branches/f1:33-34
/branches/f2:34
/branches/left:2-22
/branches/left-sub:4-19
/branches/right:2-22
PROPS-END
Node-path: trunk/f1file
Node-kind: file
Node-action: add
Node-copyfrom-rev: 34
Node-copyfrom-path: branches/f1/f1file
Text-copy-source-md5: 2b1abc6b6c5c0018851f9f8e6475563b
Text-copy-source-sha1: aece6dfba588900e00d95601d22b4408d49580af
Node-path: trunk/f2file
Node-kind: file
Node-action: add
Node-copyfrom-rev: 34
Node-copyfrom-path: branches/f2/f2file
Text-copy-source-md5: 575c5638d60271457e54ab7d07309502
Text-copy-source-sha1: 1c49a440c352f3473efa9512255033b94dc7def0
Revision-number: 36
Prop-content-length: 135
Content-length: 135
K 7
svn:log
V 37
(r36) add subdirectory to left branch
K 10
svn:author
V 3
adm
K 8
svn:date
V 27
2010-02-22T06:19:26.113516Z
PROPS-END PROPS-END
Node-path: branches/left/subdir Node-path: branches/left/subdir
@ -1672,14 +2086,14 @@ PROPS-END
Yeehaw Yeehaw
Revision-number: 26 Revision-number: 37
Prop-content-length: 123 Prop-content-length: 123
Content-length: 123 Content-length: 123
K 7 K 7
svn:log svn:log
V 25 V 25
(r26) merge left to trunk (r37) merge left to trunk
K 10 K 10
svn:author svn:author
V 3 V 3
@ -1687,19 +2101,23 @@ adm
K 8 K 8
svn:date svn:date
V 27 V 27
2010-01-19T04:14:49.040783Z 2010-02-22T06:19:29.073699Z
PROPS-END PROPS-END
Node-path: trunk Node-path: trunk
Node-kind: dir Node-kind: dir
Node-action: change Node-action: change
Prop-content-length: 99 Prop-content-length: 173
Content-length: 99 Content-length: 173
K 13 K 13
svn:mergeinfo svn:mergeinfo
V 64 V 137
/branches/left:2-25 /branches/b1:25-28
/branches/b2:26-31
/branches/f1:33-34
/branches/f2:34
/branches/left:2-36
/branches/left-sub:4-19 /branches/left-sub:4-19
/branches/right:2-22 /branches/right:2-22
PROPS-END PROPS-END
@ -1708,18 +2126,18 @@ PROPS-END
Node-path: trunk/subdir Node-path: trunk/subdir
Node-kind: dir Node-kind: dir
Node-action: add Node-action: add
Node-copyfrom-rev: 25 Node-copyfrom-rev: 36
Node-copyfrom-path: branches/left/subdir Node-copyfrom-path: branches/left/subdir
Revision-number: 27 Revision-number: 38
Prop-content-length: 123 Prop-content-length: 123
Content-length: 123 Content-length: 123
K 7 K 7
svn:log svn:log
V 25 V 25
(r27) make partial branch (r38) make partial branch
K 10 K 10
svn:author svn:author
V 3 V 3
@ -1727,24 +2145,24 @@ adm
K 8 K 8
svn:date svn:date
V 27 V 27
2010-01-19T04:14:53.049037Z 2010-02-22T06:19:32.072243Z
PROPS-END PROPS-END
Node-path: branches/partial Node-path: branches/partial
Node-kind: dir Node-kind: dir
Node-action: add Node-action: add
Node-copyfrom-rev: 26 Node-copyfrom-rev: 37
Node-copyfrom-path: trunk/subdir Node-copyfrom-path: trunk/subdir
Revision-number: 28 Revision-number: 39
Prop-content-length: 118 Prop-content-length: 118
Content-length: 118 Content-length: 118
K 7 K 7
svn:log svn:log
V 20 V 20
(r28) partial update (r39) partial update
K 10 K 10
svn:author svn:author
V 3 V 3
@ -1752,7 +2170,7 @@ adm
K 8 K 8
svn:date svn:date
V 27 V 27
2010-01-19T04:14:54.000000Z 2010-02-22T06:19:34.097961Z
PROPS-END PROPS-END
Node-path: branches/partial/palindromes Node-path: branches/partial/palindromes
@ -1768,14 +2186,14 @@ PROPS-END
racecar racecar
Revision-number: 29 Revision-number: 40
Prop-content-length: 126 Prop-content-length: 126
Content-length: 126 Content-length: 126
K 7 K 7
svn:log svn:log
V 28 V 28
(r29) merge partial to trunk (r40) merge partial to trunk
K 10 K 10
svn:author svn:author
V 3 V 3
@ -1783,21 +2201,25 @@ adm
K 8 K 8
svn:date svn:date
V 27 V 27
2010-01-19T04:14:56.041526Z 2010-02-22T06:19:37.080211Z
PROPS-END PROPS-END
Node-path: trunk/subdir Node-path: trunk/subdir
Node-kind: dir Node-kind: dir
Node-action: change Node-action: change
Prop-content-length: 145 Prop-content-length: 246
Content-length: 145 Content-length: 246
K 13 K 13
svn:mergeinfo svn:mergeinfo
V 109 V 210
/branches/left/subdir:2-25 /branches/b1/subdir:25-28
/branches/b2/subdir:26-31
/branches/f1/subdir:33-34
/branches/f2/subdir:34
/branches/left/subdir:2-36
/branches/left-sub/subdir:4-19 /branches/left-sub/subdir:4-19
/branches/partial:27-28 /branches/partial:38-39
/branches/right/subdir:2-22 /branches/right/subdir:2-22
PROPS-END PROPS-END
@ -1805,20 +2227,20 @@ PROPS-END
Node-path: trunk/subdir/palindromes Node-path: trunk/subdir/palindromes
Node-kind: file Node-kind: file
Node-action: add Node-action: add
Node-copyfrom-rev: 28 Node-copyfrom-rev: 39
Node-copyfrom-path: branches/partial/palindromes Node-copyfrom-path: branches/partial/palindromes
Text-copy-source-md5: 5d1c2024fb5efc4eef812856df1b080c Text-copy-source-md5: 5d1c2024fb5efc4eef812856df1b080c
Text-copy-source-sha1: 5f8509ddd14c91a52864dd1447344e706f9bbc69 Text-copy-source-sha1: 5f8509ddd14c91a52864dd1447344e706f9bbc69
Revision-number: 30 Revision-number: 41
Prop-content-length: 116 Prop-content-length: 116
Content-length: 116 Content-length: 116
K 7 K 7
svn:log svn:log
V 18 V 18
(r30) tagging v1.0 (r41) tagging v1.0
K 10 K 10
svn:author svn:author
V 3 V 3
@ -1826,24 +2248,24 @@ adm
K 8 K 8
svn:date svn:date
V 27 V 27
2010-01-19T04:15:00.039761Z 2010-02-22T06:19:40.083460Z
PROPS-END PROPS-END
Node-path: tags/v1.0 Node-path: tags/v1.0
Node-kind: dir Node-kind: dir
Node-action: add Node-action: add
Node-copyfrom-rev: 29 Node-copyfrom-rev: 40
Node-copyfrom-path: trunk Node-copyfrom-path: trunk
Revision-number: 31 Revision-number: 42
Prop-content-length: 131 Prop-content-length: 131
Content-length: 131 Content-length: 131
K 7 K 7
svn:log svn:log
V 33 V 33
(r31) make bugfix branch from tag (r42) make bugfix branch from tag
K 10 K 10
svn:author svn:author
V 3 V 3
@ -1851,24 +2273,24 @@ adm
K 8 K 8
svn:date svn:date
V 27 V 27
2010-01-19T04:15:01.000000Z 2010-02-22T06:19:43.118075Z
PROPS-END PROPS-END
Node-path: branches/bugfix Node-path: branches/bugfix
Node-kind: dir Node-kind: dir
Node-action: add Node-action: add
Node-copyfrom-rev: 30 Node-copyfrom-rev: 41
Node-copyfrom-path: tags/v1.0 Node-copyfrom-path: tags/v1.0
Revision-number: 32 Revision-number: 43
Prop-content-length: 120 Prop-content-length: 120
Content-length: 120 Content-length: 120
K 7 K 7
svn:log svn:log
V 22 V 22
(r32) commit to bugfix (r43) commit to bugfix
K 10 K 10
svn:author svn:author
V 3 V 3
@ -1876,7 +2298,7 @@ adm
K 8 K 8
svn:date svn:date
V 27 V 27
2010-01-19T04:15:02.000000Z 2010-02-22T06:19:45.079536Z
PROPS-END PROPS-END
Node-path: branches/bugfix/subdir/palindromes Node-path: branches/bugfix/subdir/palindromes
@ -1891,14 +2313,14 @@ racecar
kayak kayak
Revision-number: 33 Revision-number: 44
Prop-content-length: 125 Prop-content-length: 125
Content-length: 125 Content-length: 125
K 7 K 7
svn:log svn:log
V 27 V 27
(r33) Merge BUGFIX to TRUNK (r44) Merge BUGFIX to TRUNK
K 10 K 10
svn:author svn:author
V 3 V 3
@ -1906,41 +2328,49 @@ adm
K 8 K 8
svn:date svn:date
V 27 V 27
2010-01-19T04:15:06.043723Z 2010-02-22T06:19:48.078914Z
PROPS-END PROPS-END
Node-path: trunk Node-path: trunk
Node-kind: dir Node-kind: dir
Node-action: change Node-action: change
Prop-content-length: 137 Prop-content-length: 210
Content-length: 137 Content-length: 210
K 13 K 13
svn:mergeinfo svn:mergeinfo
V 101 V 174
/branches/bugfix:31-32 /branches/b1:25-28
/branches/left:2-25 /branches/b2:26-31
/branches/bugfix:42-43
/branches/f1:33-34
/branches/f2:34
/branches/left:2-36
/branches/left-sub:4-19 /branches/left-sub:4-19
/branches/right:2-22 /branches/right:2-22
/tags/v1.0:30 /tags/v1.0:41
PROPS-END PROPS-END
Node-path: trunk/subdir Node-path: trunk/subdir
Node-kind: dir Node-kind: dir
Node-action: change Node-action: change
Prop-content-length: 196 Prop-content-length: 297
Content-length: 196 Content-length: 297
K 13 K 13
svn:mergeinfo svn:mergeinfo
V 160 V 261
/branches/bugfix/subdir:31-32 /branches/b1/subdir:25-28
/branches/left/subdir:2-25 /branches/b2/subdir:26-31
/branches/bugfix/subdir:42-43
/branches/f1/subdir:33-34
/branches/f2/subdir:34
/branches/left/subdir:2-36
/branches/left-sub/subdir:4-19 /branches/left-sub/subdir:4-19
/branches/partial:27-28 /branches/partial:38-39
/branches/right/subdir:2-22 /branches/right/subdir:2-22
/tags/v1.0/subdir:30 /tags/v1.0/subdir:41
PROPS-END PROPS-END