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?