If a merge target has an explicit subtree mergeinfo and the merge deletes the
svn:mergeinfo property on the subtree, the subtree still ends up with explicit
mergeinfo describing the merge.
For example, say we have a branch with subtree mergeinfo:
C:\SVN\svn-repos-local-mirror-wc\branches\issue-2897-take2>svn pg svn:mergeinfo
build.conf -v
Properties on 'build.conf':
svn:mergeinfo
/branches/1.5.x-r30215/build.conf:30238
/branches/bdb-reverse-deltas/build.conf:31976-32455
/branches/diff-callbacks3/build.conf:29985-30687
/branches/dont-save-plaintext-passwords-by-default/build.conf:30654-31044
/branches/double-delete/build.conf:30437-32896
/branches/file-externals/build.conf:31705-33228
/branches/fs-rep-sharing/build.conf:28962-33729
/branches/gnome-keyring/build.conf:30484-31336
/branches/in-memory-cache/build.conf:29755-31378
/branches/issue-3000/build.conf:31639,31642-31645,31647-31652,31654,31660
/branches/issue-3067-deleted-subtrees/build.conf:33301-34010
/branches/issue-3220-dev/build.conf:32136-32152
/branches/kwallet/build.conf:30711-31240
/branches/log-g-performance/build.conf:30867-30958
/branches/svn-mergeinfo-enhancements/build.conf:30045-30214
/branches/svnpatch-diff/build.conf:31831,31912
/branches/svnserve-logging/build.conf:29754-30819
/branches/tc-merge-notify/build.conf:33943-33988
/branches/tree-conflicts/build.conf:28217-33080
/branches/tree-conflicts-notify/build.conf:33852-33934
/trunk/build.conf:32478-34074
Now we try to merge a change from trunk that is the deletion of all subtree
mergeinfo:
C:\SVN\svn-repos-local-mirror-wc\branches\issue-2897-take2>svn diff
file:///C:/SVN/svn-repos-local-mirror/trunk/build.conf -c34186
Property changes on: build.conf
___________________________________________________________________
Deleted: svn:mergeinfo
Reverse-merged /branches/issue-3220-dev/build.conf:r32136-32152
Reverse-merged /branches/svnpatch-diff/build.conf:r31831,31912
Reverse-merged /branches/svnserve-logging/build.conf:r29754-30819
Reverse-merged /branches/reintegrate-improvements/build.conf:r33779-34090
Reverse-merged /branches/issue-2843-dev/build.conf:r31358-34105
Reverse-merged /branches/1.5.x-r30215/build.conf:r30238
Reverse-merged /branches/kwallet/build.conf:r30711-31240
Reverse-merged /branches/log-g-performance/build.conf:r30867-30958
Reverse-merged /branches/diff-callbacks3/build.conf:r29985-30687
Reverse-merged
/branches/issue-3000/build.conf:r31639,31642-31645,31647-31652,31654,31660
Reverse-merged /branches/tc-merge-notify/build.conf:r33943-33988
Reverse-merged /branches/bdb-reverse-deltas/build.conf:r31976-32455
Reverse-merged /branches/double-delete/build.conf:r30437-32896
Reverse-merged /branches/gnome-keyring/build.conf:r30484-31336
Reverse-merged /branches/in-memory-cache/build.conf:r29755-31378
Reverse-merged /branches/tree-conflicts/build.conf:r28217-33080
Reverse-merged /branches/file-externals/build.conf:r31705-33228
Reverse-merged /branches/issue-3067-deleted-subtrees/build.conf:r33301-34010
Reverse-merged
/branches/dont-save-plaintext-passwords-by-default/build.conf:r30654-31044
Reverse-merged /branches/tc-resolve/build.conf:r34117-34165
Reverse-merged /branches/fs-rep-sharing/build.conf:r28962-33729
Reverse-merged /branches/svn-mergeinfo-enhancements/build.conf:r30045-30214
Reverse-merged /branches/tree-conflicts-notify/build.conf:r33852-33934
C:\SVN\svn-repos-local-mirror-wc\branches\issue-2897-take2>svn merge
file:///C:/SVN/svn-repos-local-mirror/trunk . -c34186 --accept theirs-full
--- Merging r34186 into 'build.conf':
U build.conf
--- Merging r34186 into 'www\issue-tracker.html':
U www\issue-tracker.html
--- Merging r34186 into 'www\development.html':
U www\development.html
--- Merging r34186 into 'www\tasks.html':
U www\tasks.html
--- Merging r34186 into 'notes\tree-conflicts\requirements.txt':
U notes\tree-conflicts\requirements.txt
--- Merging r34186 into 'notes\tree-conflicts\design-overview.txt':
U notes\tree-conflicts\design-overview.txt
--- Merging r34186 into 'subversion\libsvn_subr':
U subversion\libsvn_subr
--- Merging r34186 into 'subversion\tests\libsvn_subr':
U subversion\tests\libsvn_subr
--- Merging r34186 into 'subversion\tests\cmdline\tree_conflict_tests.txt':
U subversion\tests\cmdline\tree_conflict_tests.txt
--- Merging r34186 into 'subversion\include\private\svn_cache.h':
U subversion\include\private\svn_cache.h
--- Merging r34186 into 'subversion\include\private\svn_auth_private.h':
U subversion\include\private\svn_auth_private.h
--- Merging r34186 into 'subversion\include':
U subversion\include
--- Merging r34186 into 'subversion\libsvn_auth_kwallet\kwallet.cpp':
U subversion\libsvn_auth_kwallet\kwallet.cpp
--- Merging r34186 into 'tools\buildbot\slaves\win32-xp-VS2005':
U tools\buildbot\slaves\win32-xp-VS2005
--- Merging r34186 into 'tools\server-side\test_svn_server_log_parse.py':
U tools\server-side\test_svn_server_log_parse.py
--- Merging r34186 into 'tools\server-side\svn_server_log_parse.py':
U tools\server-side\svn_server_log_parse.py
The subtree mergeinfo is deleted, but then it gets explicit mergeinfo describing
the merge:
C:\SVN\svn-repos-local-mirror-wc\branches\issue-2897-take2>svn diff build.conf
Property changes on: build.conf
___________________________________________________________________
Modified: svn:mergeinfo
Reverse-merged /branches/issue-3220-dev/build.conf:r32136-32152
Reverse-merged /branches/svnpatch-diff/build.conf:r31831,31912
Reverse-merged /branches/svnserve-logging/build.conf:r29754-30819
Reverse-merged /branches/1.5.x-r30215/build.conf:r30238
Reverse-merged /branches/kwallet/build.conf:r30711-31240
Reverse-merged /branches/log-g-performance/build.conf:r30867-30958
Reverse-merged /branches/diff-callbacks3/build.conf:r29985-30687
Reverse-merged
/branches/issue-3000/build.conf:r31639,31642-31645,31647-31652,31654,31660
Reverse-merged /branches/tc-merge-notify/build.conf:r33943-33988
Reverse-merged /branches/bdb-reverse-deltas/build.conf:r31976-32455
Reverse-merged /branches/double-delete/build.conf:r30437-32896
Reverse-merged /branches/gnome-keyring/build.conf:r30484-31336
Reverse-merged /branches/in-memory-cache/build.conf:r29755-31378
Reverse-merged /trunk/build.conf:r32478-34074
Reverse-merged /branches/tree-conflicts/build.conf:r28217-33080
Reverse-merged /branches/file-externals/build.conf:r31705-33228
Reverse-merged /branches/issue-3067-deleted-subtrees/build.conf:r33301-34010
Reverse-merged
/branches/dont-save-plaintext-passwords-by-default/build.conf:r30654-31044
Reverse-merged /branches/svn-mergeinfo-enhancements/build.conf:r30045-30214
Reverse-merged /branches/fs-rep-sharing/build.conf:r28962-33729
Reverse-merged /branches/tree-conflicts-notify/build.conf:r33852-33934
^^^
The merge removed *all* mergeinfo from this subtree
Merged /trunk/build.conf:r34186
^^^
But then set mergeinfo describing the merge.
It seems the correct behavior would be to set this mergeinfo only on the merge
target. Since all the subtrees no longer have mergeinfo they would inherit from
the target anyway.