git-svn: apply "svn.pathnameencoding" before URL encoding

The conversion from "svn.pathnameencoding" to UTF-8 should be applied first, and then URL encoding should be applied on the resulting UTF-8 path. The reversed order of these transforms (used before this fix) makes non-UTF-8 URL which causes error from Subversion such as "Filesystem has no item: '...' path not found" when sending a rename (or a copy) from non-ASCII path. [ew: t9115 test case added (requires SVN_HTTPD_PORT set to test), squash LC_ALL=$a_utf8_locale export from Kazutoshi for Cygwin] Signed-off-by: Kazutoshi SATODA <k_satoda@f2.dion.ne.jp> Signed-off-by: Eric Wong <normalperson@yhbt.net>

Kazutoshi Satoda committed Feb 9, 2016 at 00:21 UTC 1b42f45255de5844b7fe8d0c60fea74cd5b9f954
2 files changed +17 -1
perl/Git/SVN/Editor.pm
+2 -1
@@ -144,11 +144,12 @@ sub repo_path {
144
145 sub url_path {
146 my ($self, $path) = @_;
147 + $path = $self->repo_path($path);
148 if ($self->{url} =~ m#^https?://#) {
149 # characters are taken from subversion/libsvn_subr/path.c
150 $path =~ s#([^~a-zA-Z0-9_./!$&'()*+,-])#sprintf("%%%02X",ord($1))#eg;
151 }
151 - $self->{url} . '/' . $self->repo_path($path);
152 + $self->{url} . '/' . $path;
153 }
154
155 sub rmdirs {
t/t9115-git-svn-dcommit-funky-renames.sh
+15
@@ -104,6 +104,21 @@ test_expect_success UTF8 'svn.pathnameencoding=cp932 new file on dcommit' '
104 git svn dcommit
105 '
106
107 +# See the comment on the above test for setting of LC_ALL.
108 +test_expect_success 'svn.pathnameencoding=cp932 rename on dcommit' '
109 + LC_ALL=$a_utf8_locale &&
110 + export LC_ALL &&
111 + inf=$(printf "\201\207") &&
112 + git config svn.pathnameencoding cp932 &&
113 + echo inf >"$inf" &&
114 + git add "$inf" &&
115 + git commit -m "inf" &&
116 + git svn dcommit &&
117 + git mv "$inf" inf &&
118 + git commit -m "inf rename" &&
119 + git svn dcommit
120 +'
121 +
122 stop_httpd
123
124 test_done