Re: [PATCH 2/2] git-svn: apply "svn.pathnameencoding" before URL encoding
- From
- Eric Wong <normalperson@yhbt.net>
- Date
- Feb 15, 2016, 00:33 UTC
- Message-ID
- <20160215003331.GA19436@dcvr.yhbt.net>
- In-Reply-To
- <56B8B25E.9000001@f2.dion.ne.jp>
Kazutoshi Satoda <k_satoda@f2.dion.ne.jp> wrote:
Show 8 quoted lines
> 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. > > Signed-off-by: Kazutoshi SATODA <k_satoda@f2.dion.ne.jp>
Thanks, running full SVN tests now.
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Show 14 quoted lines
> --- a/perl/Git/SVN/Editor.pm
> +++ b/perl/Git/SVN/Editor.pm
> @@ -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;
> }This is trickier to test, as it requires an https?:// URL. It always succeeds with the default file:// URL.
diff --git a/t/t9115-git-svn-dcommit-funky-renames.sh b/t/t9115-git-svn-dcommit-funky-renames.sh index 82222fd..9828f05 100755 --- a/t/t9115-git-svn-dcommit-funky-renames.sh +++ b/t/t9115-git-svn-dcommit-funky-renames.sh @@ -93,6 +93,18 @@ test_expect_success 'svn.pathnameencoding=cp932 new file on dcommit' ' git svn dcommit ' +test_expect_success 'svn.pathnameencoding=cp932 rename on dcommit' ' + 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
-- EW