[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Mergeinfo not inherited due to file externals

From: Brandt, Servatius (External) <servatius.brandt.external_at_ts.fujitsu.com>
Date: Mon, 26 Jul 2010 10:50:50 +0200

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

This is an archived mail posted to the Subversion Dev mailing list.