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

Re: Argh - frustration level high

From: Ben Collins-Sussman <sussman_at_collab.net>
Date: 2004-04-13 22:11:23 CEST

On Tue, 2004-04-13 at 14:21, Brian Fallik wrote:
> I'm trying to complete - what I believe should be - a very simple task. I
> simply want to merge two branches into a third. I can test this using
> the --dry-run parameter to svn merge, but it seems that whenever I try to do
> the real deal, I get the following error.
>
> subversion/libsvn_wc/adm_files.c:939: (apr_err=155000)
> svn: URL
> 'svn://server/repo/blah/branches/linux/temp_windows_baselines/20040406/modem
> /source/release' doesn't match existing URL
> 'svn://server/repo/blah/branches/linux/old_main/modem/source/release' in
> 'modem/source/release'
>
> I "resolved" the bug initially by deleting the problem directory in the
> working copy and the merge made it past the original failure point. I quote
> the word resolved because that doesnt' resolve anything, it just helps the
> svn client get a little farther before it fails.
>
> What does this error message mean? Any help would be welcome. This is svn
> 1.0.1 on ydl 2.3.

'svn merge' compares two trees, and by default, it assumes they are
*related* to each other. In other words, that either you're looking at
two versions of the same tree at different points in time, or that one
tree is a branch of the other (created by copying.)

This "ancestry sensitivity" means that the merge operation will do
clever things. For example, if tree A and tree B both contain foo.c,
but tree B's file is completely new (it was created by deleting foo.c
and re-adding a "new" foo.c), then the merge operation will actually try
to delete and then re-add foo.c in your working copy. The same behavior
happens when merge encounters unrelated directories with identical
names: delete the old directory, re-add the "new" directory. The fact
that they have the same name is irrelevant; the repository objects are
different, and that's all that matters.

You can turn off this ancestry sensitivity (--ignore-ancestry), making
merge "dumber". In this mode, it doesn't care that the two trees have
unrelated foo.c files; it just dumbly compares the two files anyway and
applies the diff to your own foo.c. The same goes for unrelated
same-named directories: rather than try to delete and re-add whole
directories, it just mindlessly recurses into the directory as long as
the name is the same.

('svn diff URL1 URL2', incidentally, is dumb by default. You can make
it ancestry sensitive with the --notice-ancestry flag.)

So the main problem here is that you're comparing two unrelated trees.
I'm guessing that 'svn merge' is trying to delete and re-add whole
subtrees, and getting deeply annoyed the the URLs in your working copy
seem to have nothing to do with the objects it's trying to put in your
working copy. By passing '--ignore-ancestry', it will chill out and
only care about matching paths, nothing else.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org
Received on Tue Apr 13 22:13:24 2004

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.