Eewww: I pressed 'page down' and the picture didn't change. (Duplicate block of code.) Break out a helper function?
hwri...@apache.org wrote on Fri, Mar 02, 2012 at 05:33:22 -0000: > Author: hwright > Date: Fri Mar 2 05:33:22 2012 > New Revision: 1296056 > > URL: http://svn.apache.org/viewvc?rev=1296056&view=rev > Log: > In the client-side ra Ev2 shim callbacks, make sure we handle copyfrom paths > correctly. > > Current number of test failures over ra_svn: 357 > > * subversion/libsvn_client/util.c > (fetch_props_func, fetch_kind_func, fetch_base_func): Detect and > appropriately > munge copyfrom urls as paths. > > Modified: > subversion/trunk/subversion/libsvn_client/util.c > > Modified: subversion/trunk/subversion/libsvn_client/util.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/util.c?rev=1296056&r1=1296055&r2=1296056&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_client/util.c (original) > +++ subversion/trunk/subversion/libsvn_client/util.c Fri Mar 2 05:33:22 2012 > @@ -256,8 +256,25 @@ fetch_props_func(apr_hash_t **props, > apr_pool_t *scratch_pool) > { > struct shim_callbacks_baton *scb = baton; > - const char *local_abspath = svn_dirent_join(scb->anchor_abspath, path, > - scratch_pool); > + const char *local_abspath; > + > + if (svn_path_is_url(path)) > + { > + /* This is a copyfrom URL */ > + const char *wcroot_abspath; > + const char *wcroot_url; > + const char *relpath; > + > + 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, path, scratch_pool); > + local_abspath = svn_dirent_join(wcroot_abspath, relpath, scratch_pool); > + } > + else > + local_abspath = svn_dirent_join(scb->anchor_abspath, path, scratch_pool); > > SVN_ERR(svn_wc_get_pristine_props(props, scb->wc_ctx, local_abspath, > result_pool, scratch_pool)); > @@ -274,8 +291,25 @@ fetch_kind_func(svn_kind_t *kind, > { > struct shim_callbacks_baton *scb = baton; > svn_node_kind_t node_kind; > - const char *local_abspath = svn_dirent_join(scb->anchor_abspath, path, > - scratch_pool); > + const char *local_abspath; > + > + if (svn_path_is_url(path)) > + { > + /* This is a copyfrom URL */ > + const char *wcroot_abspath; > + const char *wcroot_url; > + const char *relpath; > + > + 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, path, scratch_pool); > + local_abspath = svn_dirent_join(wcroot_abspath, relpath, scratch_pool); > + } > + else > + local_abspath = svn_dirent_join(scb->anchor_abspath, path, scratch_pool); > > SVN_ERR(svn_wc_read_kind(&node_kind, scb->wc_ctx, local_abspath, FALSE, > scratch_pool)); > @@ -293,12 +327,29 @@ fetch_base_func(const char **filename, > apr_pool_t *scratch_pool) > { > struct shim_callbacks_baton *scb = baton; > - const char *local_abspath = svn_dirent_join(scb->anchor_abspath, path, > - scratch_pool); > + const char *local_abspath; > svn_stream_t *pristine_stream; > svn_stream_t *temp_stream; > svn_error_t *err; > > + if (svn_path_is_url(path)) > + { > + /* This is a copyfrom URL */ > + const char *wcroot_abspath; > + const char *wcroot_url; > + const char *relpath; > + > + 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, path, scratch_pool); > + local_abspath = svn_dirent_join(wcroot_abspath, relpath, scratch_pool); > + } > + else > + local_abspath = svn_dirent_join(scb->anchor_abspath, path, scratch_pool); > + > err = svn_wc_get_pristine_contents2(&pristine_stream, scb->wc_ctx, > local_abspath, scratch_pool, > scratch_pool); > >