A merge into a directory with a file external shows the following
problems:
1) mergeinfo at the directory is not inherited (and all files and
subdirectories get their own inheritable mergeinfo).
2) mergeinfo is added to the external file.
The mergeinfo at the external file is just wrong and useless, and 1)
will cause problems on a reintegrate merge. A use case and an example
are following.
Use case:
I would like to place different types of branches into different
directories, e.g. ^/branches/feature/my-feature, ^/branches/release/1.0.
The developers should follow different codeline policies on each type of
branch, and the correct codeline policy should be automatically added to
each working copy of a new branch. The policies are stored as:
^/CodelinePolicy.txt (trunk codeline policy)
^/branches/feature/CodelinePolicy.txt
^/branches/release/CodelinePolicy.txt
svn ps svn:externals '../CodelinePolicy.txt CodelinePolicy.txt' trunk
would do the trick. Whenever a new branch is being created:
svn cp ^/trunk ^/branches/feature/new-feature-branch
svn cp ^/trunk ^/branches/release/new-release-branch
the correct CodelinePolicy would be shown in each WC of the new
branches.
Currently, this would cause non-inheritable mergeinfo on the root
directory of each branch so that a reintegrate merge of a feature branch
to the trunk will fail with "Missing ranges".
Example:
$ svn -q --version
1.6.12
$ svn mkdir trunk trunk/dir
A trunk
A trunk\dir
$ echo x >trunk/x.txt
$ echo d >trunk/dir/d.txt
$ svn add trunk/x.txt trunk/dir/d.txt
A trunk\x.txt
A trunk\dir\d.txt
$ svn ci -m 'initial trunk'
Adding trunk
Adding trunk\dir
Adding trunk\dir\d.txt
Adding trunk\x.txt
Transmitting file data ..
Committed revision 1.
$ echo e >e.txt
$ svn add e.txt
A e.txt
$ svn ps svn:externals '../e.txt r.txt' trunk
property 'svn:externals' set on 'trunk'
$ svn ci -m 'file external r.txt on trunk referring to e.txt in parent dir'
Adding e.txt
Sending trunk
Transmitting file data .
Committed revision 2.
$ svn cp trunk branch
A branch
$ svn ci -m 'branch created from trunk'
Adding branch
Adding branch\dir
Adding branch\x.txt
Committed revision 3.
$ svn up
Fetching external item into 'trunk\r.txt'
E trunk\r.txt
Updated external to revision 3.
Fetching external item into 'branch\r.txt'
E branch\r.txt
Updated external to revision 3.
Updated to revision 3.
$ cd trunk
$ echo xx >>x.txt
$ svn ci -m 'trunk/x.txt changed'
Sending trunk\x.txt
Transmitting file data .
Committed revision 4.
$ cd ../branch
$ svn merge ^/trunk
--- Merging r3 through r4 into 'x.txt':
U x.txt
$ svn st
M .
M X r.txt
MM x.txt
M dir
$ svn diff
Property changes on: .
___________________________________________________________________
Added: svn:mergeinfo
Merged /trunk:r3-4*
Property changes on: r.txt
___________________________________________________________________
Added: svn:mergeinfo
Merged /trunk/r.txt:r3-4
Index: x.txt
===================================================================
--- x.txt (revision 3)
+++ x.txt (working copy)
@@ -1 +1,2 @@
x
+xx
Property changes on: x.txt
___________________________________________________________________
Added: svn:mergeinfo
Merged /trunk/x.txt:r3-4
Property changes on: dir
___________________________________________________________________
Added: svn:mergeinfo
Merged /trunk/dir:r3-4
$ svn ci -m 'merge of trunk to branch, strange mergeinfo'
Sending branch
Sending branch\dir
Sending branch\x.txt
Sending branch\r.txt
Transmitting file data .
Committed revision 5.
$ svn diff -c 5
Index: x.txt
===================================================================
--- x.txt (revision 4)
+++ x.txt (revision 5)
@@ -1 +1,2 @@
x
+xx
Property changes on: x.txt
___________________________________________________________________
Added: svn:mergeinfo
Merged /trunk/x.txt:r3-4
Property changes on: dir
___________________________________________________________________
Added: svn:mergeinfo
Merged /trunk/dir:r3-4
Property changes on: .
___________________________________________________________________
Added: svn:mergeinfo
Merged /trunk:r3-4*
$ svn diff -c 5 ../e.txt
Property changes on: ..\e.txt
___________________________________________________________________
Added: svn:mergeinfo
Merged /trunk/r.txt:r3-4
$
Received on 2010-07-26 10:51:34 CEST