On Fri, Jan 22, 2010 at 01:04:13PM -0500, C. Michael Pilato wrote:
> If this is all it takes to fix this issue, I'm going to cry while deleting
> each and every file from the 'issue-3390-dev' branch one commit at a time.
> Seriously?  This is the whole fix?

I hope so... 

You suggested this strategy in the issue tracker (your strategy with
number, my attempt at solution between):

1. while crawling the working copy state, collect all the externals
definitions (pretty much as-is) *and the repository URLs of the directories on
which they are set*.

The thing is we weren't crawling the wc collecting externals when we
were doing a merge. We passed NULL for traversal_info.

2. do the update/switch, remembering any changes to externals definitions that
come down from the server. 

We remember all externals, not just the changed ones.

3. compare the pre-op externals definitions with the post-op ones, and for any
that have changed (been added, been removed, or been modified *paying attention
to changes in the repos URL of the container directory*) do the appropriate 
thing.

libsvn_client/externals.c is capable of detecting changes in the repos
URL of the container directory.

I tried a _lot_ of things before I wrote this patch and I agree that it
looks too easy.

Daniel

> 
> Daniel Näslund wrote:
> > Hi Stefan!
> > 
> > This is supposed to be a backport. It is diffed against 1.6.x.
> > 
> > make check passed.
> > 
> > [[[
> > Fix issue #3390, relative externals not updated during switch. 
> > 
> > * subversion/libsvn_client/switch.c
> >   (svn_client__switch_internal): Pass in a traversal_info to
> >     svn_wc_crawl_revision4().
> > 
> > * subversion/tests/cmdline/externals_tests.py
> >   (switch_relative_external): New.
> >   (test_list): Add new test.
> > 
> > Patch by: Daniel Näslund <daniel{_AT_}longitudo.com>
> > ]]]

Reply via email to