Hi Paul,
This sounds reasonable. Thanks for looking into the issue.
Servatius
> -----Original Message-----
> From: Paul Burba [mailto:ptburba_at_gmail.com]
> Sent: Tuesday, August 03, 2010 10:50 PM
> To: Brandt, Servatius (External)
> Cc: Subversion Development List
> Subject: Re: Mergeinfo not inherited due to file externals
>
> On Mon, Jul 26, 2010 at 4:50 AM, Brandt, Servatius (External)
> <servatius.brandt.external_at_ts.fujitsu.com> wrote:
> > 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.
>
> Hi Servatius,
>
> What's happening here is that the merge tracking logic erroneously
> treats externals the same as switched subtrees and sets mergeinfo to
> segregate the "switched" subtree, so if it is later unswitched, it
> doesn't inherit mergeinfo from the root of the branch which was never
> actually merged. This is fine for switched subtrees, but I agree with
> you, it doesn't make much sense for externals (which might not even be
> from the same repository!).
>
> Your second issue goes away in 1.7 because we only set mergeinfo on
> paths affected by the merge, which the external never will be.
>
> The first problem still exists however. I think we can safely ignore
> externals in the merge target as far as recording mergeinfo describing
> the merge goes. I'll look into this right now.
>
> Paul
>
> > 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-08-03 22:55:55 CEST