Philip Martin <philip.mar...@wandisco.com> writes: > Noorul Islam K M <noo...@collab.net> writes: > >> Philip Martin <philip.mar...@wandisco.com> writes: >> >>> Noorul Islam K M <noo...@collab.net> writes: >>> >>>> @@ -79,8 +84,17 @@ >>>> { >>>> to = APR_ARRAY_IDX(targets, 1, const char *); >>>> >>>> + /* Get the RA connection. */ >>>> + SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum, >>>> + &url, truefrom, NULL, >>>> + &peg_revision, >>>> + >>>> &(opt_state->start_revision), >>>> + ctx, pool)); >>>> + >>>> + SVN_ERR(svn_ra_check_path(ra_session, "", revnum, &kind, pool)); >>>> + >>>> /* If given the cwd, pretend we weren't given anything. */ >>>> - if (strcmp("", to) == 0) >>>> + if ((strcmp("", to) == 0) && (kind == svn_node_file)) >>>> to = svn_path_uri_decode(svn_uri_basename(truefrom, pool), pool); >>>> else >>>> /* svn_cl__eat_peg_revisions() but only on one target */ >>> >>> svn_ra_check_path is expensive, as it involves a round trip to the >>> server, and output is not always used. Can we avoid the call when the >>> kind is not needed? >> >> But I think here we need to check kind to branch. Do you mean to say >> that we don't need kind in all cases? > > If the call strcpm("", to) returns non-zero then kind is never used. > > Including client.h is wrong as well.
Here is a modified patch. I moved the logic into export.c where we already use ra_session. [[[ Fix issue 3727: Fix regression caused by r880559 * subversion/tests/cmdline/export_tests.py (export_to_explicit_cwd): Remove XFail. * subversion/svn/export-cmd.c (svn_cl__export): Move logic into subversion/libsvn_client/export.c * subversion/libsvn_client/export.c (svn_client_export5): If the explicit TO path is '.', treat it as if it weren't given only if the source is a file. Patch by: Noorul Islam K M <noorul{_AT_}collab.net> ]]] Thanks and Regards Noorul
Index: subversion/tests/cmdline/export_tests.py =================================================================== --- subversion/tests/cmdline/export_tests.py (revision 1028789) +++ subversion/tests/cmdline/export_tests.py (working copy) @@ -680,7 +680,7 @@ export_with_url_unsafe_characters, XFail(export_working_copy_with_depths), export_externals_with_native_eol, - XFail(export_to_current_dir), + export_to_current_dir, ] if __name__ == '__main__': Index: subversion/svn/export-cmd.c =================================================================== --- subversion/svn/export-cmd.c (revision 1028789) +++ subversion/svn/export-cmd.c (working copy) @@ -79,10 +79,7 @@ { to = APR_ARRAY_IDX(targets, 1, const char *); - /* If given the cwd, pretend we weren't given anything. */ - if (strcmp("", to) == 0) - to = svn_path_uri_decode(svn_uri_basename(truefrom, pool), pool); - else + if (strcmp("", to) != 0) /* svn_cl__eat_peg_revisions() but only on one target */ SVN_ERR(svn_opt__split_arg_at_peg_revision(&to, NULL, to, pool)); } Index: subversion/libsvn_client/export.c =================================================================== --- subversion/libsvn_client/export.c (revision 1028789) +++ subversion/libsvn_client/export.c (working copy) @@ -993,6 +993,13 @@ apr_hash_index_t *hi; struct file_baton *fb = apr_pcalloc(pool, sizeof(*fb)); + /* If given the cwd, pretend we weren't given anything. */ + if (strcmp("", to) == 0) + { + to = svn_path_uri_decode(svn_uri_basename(from, pool), pool); + eb->root_path = to; + } + /* Since you cannot actually root an editor at a file, we * manually drive a few functions of our editor. */