[PATCH] git svn: add an option to recode pathnames

Subsystems: the rest

STALE3743d

4 messages, 3 authors, 2016-06-15 · open the first message on its own page

[PATCH] git svn: add an option to recode pathnames

From: Dmitry Statyvka <hidden>
Date: 2016-06-15 22:47:07

Introduce new option 'svn.pathnameenc' that instructs git svn to recode
pathnames to given encoding.  It's useful for windows users and for those
who works in non-utf8 locales, since otherwise they'll have corrupted file
names with non-ascii characters.

Signed-off-by: Dmitry Statyvka <redacted>
---
 git-svn.perl |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/git-svn.perl b/git-svn.perl
index ef1d30d..bdd9af0 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -3343,6 +3343,7 @@ sub new {
 	$self->{absent_dir} = {};
 	$self->{absent_file} = {};
 	$self->{gii} = $git_svn->tmp_index_do(sub { Git::IndexInfo->new });
+	$self->{pathnameencoding} = Git::config('svn.pathnameenc');
 	$self;
 }
 
@@ -3426,6 +3427,10 @@ sub open_directory {
 
 sub git_path {
 	my ($self, $path) = @_;
+	if (my $enc = $self->{pathnameencoding}) {
+		require Encode;
+		Encode::from_to($path, 'UTF-8', $enc);
+	}
 	if ($self->{path_strip}) {
 		$path =~ s!$self->{path_strip}!! or
 		  die "Failed to strip path '$path' ($self->{path_strip})\n";
@@ -3814,6 +3819,10 @@ sub split_path {
 
 sub repo_path {
 	my ($self, $path) = @_;
+	if (my $enc = $self->{pathnameencoding}) {
+		require Encode;
+		Encode::from_to($path, $enc, 'UTF-8');
+	}
 	$self->{path_prefix}.(defined $path ? $path : '');
 }
 
-- 
1.6.3.2.1299.gee46c

Re: [PATCH] git svn: add an option to recode pathnames

From: Eric Wong <hidden>
Date: 2016-06-15 22:47:07

Dmitry Statyvka [off-list ref] wrote:
quoted hunk
Introduce new option 'svn.pathnameenc' that instructs git svn to recode
pathnames to given encoding.  It's useful for windows users and for those
who works in non-utf8 locales, since otherwise they'll have corrupted file
names with non-ascii characters.

Signed-off-by: Dmitry Statyvka <redacted>
---
 git-svn.perl |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/git-svn.perl b/git-svn.perl
index ef1d30d..bdd9af0 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -3343,6 +3343,7 @@ sub new {
 	$self->{absent_dir} = {};
 	$self->{absent_file} = {};
 	$self->{gii} = $git_svn->tmp_index_do(sub { Git::IndexInfo->new });
+	$self->{pathnameencoding} = Git::config('svn.pathnameenc');
Hi Dmitry,

Can we use a more consistent name for the user-visible config option?
"svn.pathnameencoding" would be more consistent with the other
encoding-related config options we have.

I'd also like this option documented in the manpage so more people know
about it.

Otherwise the patch looks fine though a testcase would be helpful, too.

Thanks!

-- 
Eric Wong

Re: [PATCH] git svn: add an option to recode pathnames

From: Robert Pollak <hidden>
Date: 2016-06-15 22:49:13

Introduce a new option 'svn.pathnameencoding' that instructs git svn to
recode pathnames to a given encoding.  It can be used by windows users
and by those who work in non-utf8 locales to avoid corrupted file names
with non-ascii characters.

Signed-off-by: Dmitry Statyvka <redacted>
[robert.pollak@gmail.com: renamed the option and added manpage documentation]
Signed-off-by: Robert Pollak <redacted>
---

Hello Eric,

since the patch is useful to me, I have made the requested option name
change and added some manpage documentation. Please consider applying the
patch or give me additional feedback.

This is the first patch I submit on this list, so I hope it's ok.

Best regards,
Robert


 Documentation/git-svn.txt |    6 ++++++
 git-svn.perl              |    9 +++++++++
 2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index b09bd97..4b84d08 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -646,6 +646,12 @@ svn.brokenSymlinkWorkaround::
 	revision fetched.  If unset, 'git svn' assumes this option to
 	be "true".

+svn.pathnameencoding::
+	This instructs git svn to recode pathnames to a given encoding.
+	It can be used by windows users and by those who work in non-utf8
+	locales to avoid corrupted file names with non-ASCII characters.
+	Valid encodings are the ones supported by Perl's Encode module.
+
 Since the noMetadata, rewriteRoot, rewriteUUID, useSvnsyncProps and useSvmProps
 options all affect the metadata generated and used by 'git svn'; they
 *must* be set in the configuration file before any history is imported
diff --git a/git-svn.perl b/git-svn.perl
index c416358..c92238e 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -4050,6 +4050,7 @@ sub new {
 	$self->{absent_dir} = {};
 	$self->{absent_file} = {};
 	$self->{gii} = $git_svn->tmp_index_do(sub { Git::IndexInfo->new });
+	$self->{pathnameencoding} = Git::config('svn.pathnameencoding');
 	$self;
 }
@@ -4133,6 +4134,10 @@ sub open_directory {

 sub git_path {
 	my ($self, $path) = @_;
+	if (my $enc = $self->{pathnameencoding}) {
+		require Encode;
+		Encode::from_to($path, 'UTF-8', $enc);
+	}
 	if ($self->{path_strip}) {
 		$path =~ s!$self->{path_strip}!! or
 		  die "Failed to strip path '$path' ($self->{path_strip})\n";
@@ -4521,6 +4526,10 @@ sub split_path {

 sub repo_path {
 	my ($self, $path) = @_;
+	if (my $enc = $self->{pathnameencoding}) {
+		require Encode;
+		Encode::from_to($path, $enc, 'UTF-8');
+	}
 	$self->{path_prefix}.(defined $path ? $path : '');
 }
-- 
1.6.3.3

Re: [PATCH] git svn: add an option to recode pathnames

From: Eric Wong <hidden>
Date: 2016-06-15 22:49:13

Robert Pollak [off-list ref] wrote:
Introduce a new option 'svn.pathnameencoding' that instructs git svn to
recode pathnames to a given encoding.  It can be used by windows users
and by those who work in non-utf8 locales to avoid corrupted file names
with non-ascii characters.

Signed-off-by: Dmitry Statyvka <redacted>
[robert.pollak@gmail.com: renamed the option and added manpage documentation]
Signed-off-by: Robert Pollak <redacted>
---

Hello Eric,

since the patch is useful to me, I have made the requested option name
change and added some manpage documentation. Please consider applying the
patch or give me additional feedback.
Thanks Robert!

It looks alright to me and I've acked and pushed it out to
git://git.bogomips.org/git-svn (crediting Dmitry as the author)

If it's not too much trouble, having a test case to ensure it stays
working with future changes would be nice.
This is the first patch I submit on this list, so I hope it's ok.
For addendum changes, the standard we seem to have adopted is
first initials above the Signed-off/Acked-by lines:
From 3713e2226bcda64513efd537f370ce4d7f767a1e Mon Sep 17 00:00:00 2001
From: Dmitry Statyvka <redacted>
Date: Fri, 30 Jul 2010 04:30:13 +0200
Subject: [PATCH] git svn: add an option to recode pathnames

Introduce a new option 'svn.pathnameencoding' that instructs git svn to
recode pathnames to a given encoding.  It can be used by windows users
and by those who work in non-utf8 locales to avoid corrupted file names
with non-ascii characters.

[rp: renamed the option and added manpage documentation]

Signed-off-by: Dmitry Statyvka <redacted>
Signed-off-by: Robert Pollak <redacted>
Acked-by: Eric Wong <redacted>
---
<snip>
-- 
Eric Wong
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help