On Mon, Apr 16, 2012 at 04:41:49PM -0500, Hyrum K Wright wrote:
> On Mon, Apr 16, 2012 at 4:35 PM, Greg Stein <gst...@gmail.com> wrote:
> > On Mon, Apr 16, 2012 at 13:50,  <hwri...@apache.org> wrote:
> >>...
> >> +++ subversion/trunk/subversion/libsvn_client/util.c Mon Apr 16 17:50:05 
> >> 2012
> >>...
> >> +  /* ### We could probably calculate some of this once, and then cache it 
> >> for
> >> +         use in this function. */
> >> +  SVN_ERR(svn_wc__get_wc_root(&wcroot_abspath, scb->wc_ctx,
> >> +                              scb->anchor_abspath,
> >> +                              scratch_pool, scratch_pool));
> >> +  SVN_ERR(svn_wc__node_get_url(&wcroot_url, scb->wc_ctx, wcroot_abspath,
> >> +                               scratch_pool, scratch_pool));
> >> +
> >> +  relpath = svn_uri_skip_ancestor(wcroot_url, node_url, scratch_pool);
> >> +  *local_abspath = svn_dirent_join(wcroot_abspath, relpath, result_pool);
> >
> > Won't this join() fail in a switched working copy?
> 
> Honestly, I haven't thought much about it.  Any proposals on how to
> work around it?

At the very least, you must compare the URL of the node at the calculated
local_abspath to the original node_url. If they do not match, the
node at local_abspath is switched, so the node you're looking for is not
in the WC at the expected location.

The node could be somewhere else, though, at a different path which
is switched to the original URL you're looking for. Maybe you'll need
to add a new libsvn_wc API that tries a bit harder to figure out where
the node could be?

Reply via email to