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

[RFC] Final approach for issue #3702 (case-only renames on Windows)?

From: Johan Corveleyn <jcorvel_at_gmail.com>
Date: Tue, 24 May 2011 11:02:48 +0200


After issue #3865 [1] got fixed, and the client-layer parts of #3702
[2], there is one remaining hurdle to #3702: during argument parsing,
the command line client 'svn' should detect the attempted 'case-only
rename', and in that case pass the original destination path to the
client layer, instead of the truepath converted one. I'm unsure of the
best approach here, so I'm asking for some feedback.

Problem is that 'move_cmd.c' first calls the utility function
libsvn_client/cmdline.c#svn_client_args_to_target_array, which returns
the target array already truepath-converted, so it doesn't have the
original version anymore (and it's not trivial to pick it off of the
argument list, because the targets can also come from
opt_state->targets (--targets), which accounts for some of the logic
in svn_client_args_to_target_array).

I see a couple of options (discussed somewhat with Bert during the
Hackathon, and on IRC):

1) Rev svn_client_args_to_target_array to take an argument "is_move".
That's really the only case where something special needs to happen.
Something like this:

    if (is_move && input_targets->nelts == 2
        && strcmp(original_dest_target, true_dest_target) != 0
        && strcmp(true_src_target, true_dest_target) == 0)
            /* Case-only rename on Windows.
               Use original_dest_target instead of true_dest_target */

2) Rev svn_client_args_to_target_array to simple always return the
original target list, as well as the truepath converted ones. Then let
move_cmd.c figure it out (i.e. implement the above logic).

3) Leave svn_client_args_to_target_array alone, and just re-implement
(copy-paste) the logic to create the 'master array of targets' inside
move_cmd.c (combining the targets from apr_getopt plus any extra
targets (--targets)), so it can do all that it needs itself...

Option 1 might also be of help for other 'move'-users of
svn_client_args_to_target_array (are there any?).


[1] http://subversion.tigris.org/issues/show_bug.cgi?id=3865 ('svn' on
Windows cannot address scheduled-for-delete file, if another file
differing only in case is present on disk)
[2] http://subversion.tigris.org/issues/show_bug.cgi?id=3702 (Unable
to perform case-only rename on windows)

Received on 2011-05-24 11:03:40 CEST

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

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.