I mean 3 times doing a
svn merge ^/trunk/project
on the feature branch and then commit.
So each time commiting some modifications coming from the trunk,
everything went well.
I checked sparse dir doc, I understand it. I've run the same reintegrate
command on freshly checked out working copy, same result except that it
was with a Ubuntu 1.6.5 client and the error was more explicit.
We are not working with shallow working copies.
A possible explanation I foresee, is someone with a 1.5 client doing the
merge from the Release branch to the trunk, causing problem when merging
trunk to Feature Branch afterward.
Investigating...
Thanks for your deep explanation of the shallow copies ;)
Jean
Stefan Sperling wrote:
> On Thu, May 06, 2010 at 06:18:07PM +0800, Jean Seurin wrote:
>
>> Hi,
>>
>> I just persuaded my organisation to give a try to Feature Branch.
>>
>> After 3 merges only,
>>
>
> What 3 merges precisely?
>
>
>> when I attempt to --dry-run a merge
>> --reintegrate I've got the following error:
>>
>> svn merge --reintegrate ^/branches/project-dev --dry-run
>>
>> With an OSX 1.6.11 client :
>>
>> svn: Cannot reintegrate into a working copy not entirely at infinite depth
>>
>
> That error is important.
> Why is your working copy not entirely at infinite depth?
>
> If you don't understand this error message, please read:
> http://svnbook.red-bean.com/nightly/en/svn.advanced.sparsedirs.html
>
>
>> with a Ubuntu 1.6.5 client on fresh check out:
>> svn: Reintegrate can only be used if revisions 6336 through 6393
>> were previously merged from svn://company/company/trunk/project to
>> the reintegrate source, but this is not the case:
>> branches/project-dev/src/test/java/com/company/client/project/adherent/persistence/AdherentDaoHibernateTest.java
>> Missing ranges: /trunk/project/src/test/java/com/company/client/project/adherent/persistence/AdherentDaoHibernateTest.java:6336-6389
>> branches/project-dev/src/test/java/com/company/client/project/codeobjet/persistence/CodeObjetDaoHibernateTest.java
>> Missing ranges: /trunk/project/src/test/java/com/company/client/project/codeobjet/persistence/CodeObjetDaoHibernateTest.java:6336-6389
>> branches/project-dev/src/test/java/com/company/client/project/courrier/persistence/CourrierDaoHibernateTest.java
>> Missing ranges: /trunk/project/src/test/java/com/company/client/project/courrier/persistence/CourrierDaoHibernateTest.java:6336-6389
>> branches/project-dev/src/test/java/com/company/client/project/dossierstagiaire/persistence/DossierStagiaireDaoHibernateTest.java
>> Missing ranges: /trunk/project/src/test/java/com/company/client/project/dossierstagiaire/persistence/DossierStagiaireDaoHibernateTest.java:6336-6389
>> branches/project-dev/src/test/resources/log4j.properties
>> Missing ranges:
>> /trunk/project/src/test/resources/log4j.properties:6336-6389
>>
>> I really don't undertsand what has happened. The merge went well.
>>
>
> Well, let's look at what the error is saying:
>
> So there are files in trunk/project from which you have not yet merged
> changes into your branch. You have however merged changes to other
> files from revisions 6336 through 6393 to your branch from trunk.
>
> That is what's causing the error. r6336 to 6393 have not been completely
> merged from trunk to the branch. The changes listed in the error message
> are the changes which have not been merged into the branch yet.
>
> This can easily happen if people do merges into shallow working copies,
> with depth != infinity. Maybe your working copy on the Mac is shallow,
> and you have done incomplete merges from trunk to the branch with it,
> and as a result those merges weren't complete, causing reintegrate to
> complain?
>
> To illustrate, let's assume I make a commit to trunk in r50,
> which affects the following files:
>
> /trunk/foo.c
> /trunk/bar/baz.c
>
> Now I merge r50 from trunk to my branch, but the merge omits the change
> to bar/baz.c because my branch working copy is shallow.
> The mergeinfo created by this merge looks like this:
>
> /branch (svn:mergeinfo = trunk:r50*)
> /branch/foo.c (svn:mergeinfo = trunk:r50)
>
> The * means "only applies to this folder, not its children".
> This happens because svn realises that I did not merge changes r50
> made inside of /trunk/bar/. Maybe I still want to merge those later.
> Because the mergeinfo at /branch is not inheritable, svn also made
> a note at /branch/foo.c saying "this file already has changes to r50".
> This will prevent changes made in r50 to foo.c from being merged to
> the branch again.
>
> Trying to reintegrate the branch from this state without first merging
> everything r50 did will result in the error you are getting.
>
> You want mergeinfo like this:
>
> /branch (svn:mergeinfo = trunk:r50)
>
> Which says "This entire branch has all changes made to trunk in r50".
>
> BTW, a 1.6 client will flag a tree conflict in this case,
> saying "local delete, incoming edit upon merge", because in my WC
> it looks as if I deleted bar/ (though it should probably say "local
> missing because of shallow working copy, incoming edit").
> You probably did the merge with a 1.5 client since you didn't get a conflict?
>
>
>> I've tried to modify the svn:mergeinfo properties to add the missing
>> info but to now avail. I think I shouldn't have to that.
>>
>
> No, you shouldn't. My guess is that (possibly unconscious) use of shallow
> working copies is responsible for this error.
>
> Shallow working copies have their use cases, but merging into them
> isn't one of them (unless you know about the consequences and know
> how to deal with them).
>
> Thanks,
> Stefan
>
Received on 2010-05-06 13:48:01 CEST