Skip to content

Commit

Permalink
git-svn: apply "svn.pathnameencoding" before URL encoding
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Eric Wong <[email protected]>
  • Loading branch information
k-satoda authored and Eric Wong committed Feb 22, 2016
1 parent 40f4744 commit 1b42f45
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
3 changes: 2 additions & 1 deletion perl/Git/SVN/Editor.pm
Original file line number Diff line number Diff line change
Expand Up @@ -144,11 +144,12 @@ sub repo_path {

sub url_path {
my ($self, $path) = @_;
$path = $self->repo_path($path);
if ($self->{url} =~ m#^https?://#) {
# characters are taken from subversion/libsvn_subr/path.c
$path =~ s#([^~a-zA-Z0-9_./!$&'()*+,-])#sprintf("%%%02X",ord($1))#eg;
}
$self->{url} . '/' . $self->repo_path($path);
$self->{url} . '/' . $path;
}

sub rmdirs {
Expand Down
15 changes: 15 additions & 0 deletions t/t9115-git-svn-dcommit-funky-renames.sh
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,21 @@ test_expect_success UTF8 'svn.pathnameencoding=cp932 new file on 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

test_done

0 comments on commit 1b42f45

Please sign in to comment.