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

Re: Cannot reintegrate feature branch

From: Stefan Sperling <stsp_at_elego.de>
Date: Thu, 6 May 2010 13:36:04 +0200

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:36:41 CEST

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

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.