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>
This commit is contained in:
parent
40f47448a9
commit
1b42f45255
@ -144,11 +144,12 @@ sub repo_path {
|
|||||||
|
|
||||||
sub url_path {
|
sub url_path {
|
||||||
my ($self, $path) = @_;
|
my ($self, $path) = @_;
|
||||||
|
$path = $self->repo_path($path);
|
||||||
if ($self->{url} =~ m#^https?://#) {
|
if ($self->{url} =~ m#^https?://#) {
|
||||||
# characters are taken from subversion/libsvn_subr/path.c
|
# characters are taken from subversion/libsvn_subr/path.c
|
||||||
$path =~ s#([^~a-zA-Z0-9_./!$&'()*+,-])#sprintf("%%%02X",ord($1))#eg;
|
$path =~ s#([^~a-zA-Z0-9_./!$&'()*+,-])#sprintf("%%%02X",ord($1))#eg;
|
||||||
}
|
}
|
||||||
$self->{url} . '/' . $self->repo_path($path);
|
$self->{url} . '/' . $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub rmdirs {
|
sub rmdirs {
|
||||||
|
@ -104,6 +104,21 @@ test_expect_success UTF8 'svn.pathnameencoding=cp932 new file on dcommit' '
|
|||||||
git svn dcommit
|
git svn dcommit
|
||||||
'
|
'
|
||||||
|
|
||||||
|
# See the comment on the above test for setting of LC_ALL.
|
||||||
|
test_expect_success 'svn.pathnameencoding=cp932 rename on dcommit' '
|
||||||
|
LC_ALL=$a_utf8_locale &&
|
||||||
|
export LC_ALL &&
|
||||||
|
inf=$(printf "\201\207") &&
|
||||||
|
git config svn.pathnameencoding cp932 &&
|
||||||
|
echo inf >"$inf" &&
|
||||||
|
git add "$inf" &&
|
||||||
|
git commit -m "inf" &&
|
||||||
|
git svn dcommit &&
|
||||||
|
git mv "$inf" inf &&
|
||||||
|
git commit -m "inf rename" &&
|
||||||
|
git svn dcommit
|
||||||
|
'
|
||||||
|
|
||||||
stop_httpd
|
stop_httpd
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user