[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Issue 3727 - svn export into the current directory

From: Noorul Islam K M <noorul_at_collab.net>
Date: Mon, 01 Nov 2010 19:29:55 +0530

Philip Martin <philip.martin_at_wandisco.com> writes:

> Noorul Islam K M <noorul_at_collab.net> writes:
>
>> Philip Martin <philip.martin_at_wandisco.com> writes:
>>
>>> Noorul Islam K M <noorul_at_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. */
 
Received on 2010-11-01 15:00:57 CET

This is an archived mail posted to the Subversion Dev mailing list.