threads / patch / 24625

patchgit-svn: URL-decode the left-hand side of an svn refspec

Subject: [PATCH] git-svn: URL-decode the left-hand side of an svn refspec

## tl;dr

4 messages between Aug 3, 2010 and Aug 5, 2010. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Steven Walter· Aug 3, 2010, 23:21 UTC · lore
From: Steven Walter <swalter@lpdev.prtdev.lexmark.com>
This change allows git-svn to handle an URL with colons in the path
---
 git-svn.perl |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
Show changes to git-svn.perl +2 −0
diff --git a/git-svn.perl b/git-svn.perl
index af70353..5d08dc6 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1812,6 +1812,8 @@ sub read_all_remotes {
 			die("svn-remote.$remote: remote ref '$remote_ref' "
 			    . "must start with 'refs/'\n")
 				unless $remote_ref =~ m{^refs/};
+                        # local_ref is an URL, so url-decode it
+                        $local_ref =~ s/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;
 			$r->{$remote}->{fetch}->{$local_ref} = $remote_ref;
 			$r->{$remote}->{svm} = {} if $use_svm_props;
 		} elsif (m!^(.+)\.usesvmprops=\s*(.*)\s*$!) {
-- 
1.7.0.3.gaa64d.dirty
Eric Wong· Aug 4, 2010, 08:38 UTC · re: Steven Walter · lore

Re: [PATCH] git-svn: URL-decode the left-hand side of an svn refspec

Steven Walter <stevenrwalter@gmail.com> wrote:
Show 6 quoted lines
> From: Steven Walter <swalter@lpdev.prtdev.lexmark.com>
> 
> This change allows git-svn to handle an URL with colons in the path
> ---
>  git-svn.perl |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
Thanks Steven.

Since git-svn already has a uri_decode() function, we should use that. The decoding should apply to the local portion of branches/tags globs, too. Does the following work for you?

Show changes to git-svn.perl +2 −0
diff --git a/git-svn.perl b/git-svn.perl
index 8d2ef3d..34884b8 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1820,6 +1820,7 @@ sub read_all_remotes {
 			die("svn-remote.$remote: remote ref '$remote_ref' "
 			    . "must start with 'refs/'\n")
 				unless $remote_ref =~ m{^refs/};
+			$local_ref = uri_decode($local_ref);
 			$r->{$remote}->{fetch}->{$local_ref} = $remote_ref;
 			$r->{$remote}->{svm} = {} if $use_svm_props;
 		} elsif (m!^(.+)\.usesvmprops=\s*(.*)\s*$!) {
@@ -1832,6 +1833,7 @@ sub read_all_remotes {
 			die("svn-remote.$remote: remote ref '$remote_ref' ($t) "
 			    . "must start with 'refs/'\n")
 				unless $remote_ref =~ m{^refs/};
+			$local_ref = uri_decode($local_ref);
 			my $rs = {
 			    t => $t,
 			    remote => $remote,
-- 
Eric Wong
Steven Walter· Aug 4, 2010, 12:37 UTC · re: Eric Wong · lore

Re: [PATCH] git-svn: URL-decode the left-hand side of an svn refspec

On Wed, Aug 4, 2010 at 4:38 AM, Eric Wong <normalperson@yhbt.net> wrote:
Show 29 quoted lines
> Thanks Steven.
>
> Since git-svn already has a uri_decode() function, we should use that.
> The decoding should apply to the local portion of branches/tags globs,
> too.  Does the following work for you?
>
> diff --git a/git-svn.perl b/git-svn.perl
> index 8d2ef3d..34884b8 100755
> --- a/git-svn.perl
> +++ b/git-svn.perl
> @@ -1820,6 +1820,7 @@ sub read_all_remotes {
>                        die("svn-remote.$remote: remote ref '$remote_ref' "
>                            . "must start with 'refs/'\n")
>                                unless $remote_ref =~ m{^refs/};
> +                       $local_ref = uri_decode($local_ref);
>                        $r->{$remote}->{fetch}->{$local_ref} = $remote_ref;
>                        $r->{$remote}->{svm} = {} if $use_svm_props;
>                } elsif (m!^(.+)\.usesvmprops=\s*(.*)\s*$!) {
> @@ -1832,6 +1833,7 @@ sub read_all_remotes {
>                        die("svn-remote.$remote: remote ref '$remote_ref' ($t) "
>                            . "must start with 'refs/'\n")
>                                unless $remote_ref =~ m{^refs/};
> +                       $local_ref = uri_decode($local_ref);
>                        my $rs = {
>                            t => $t,
>                            remote => $remote,
> --
> Eric Wong
>
Yes, this works.  Thanks!
-- 
-Steven Walter <stevenrwalter@gmail.com>
Eric Wong· Aug 5, 2010, 06:40 UTC · re: Steven Walter · lore

Re: [PATCH] git-svn: URL-decode the left-hand side of an svn refspec

Steven Walter <stevenrwalter@gmail.com> wrote:
Show 6 quoted lines
> On Wed, Aug 4, 2010 at 4:38 AM, Eric Wong <normalperson@yhbt.net> wrote:
> > Thanks Steven.
> >
> > Since git-svn already has a uri_decode() function, we should use that.
> > The decoding should apply to the local portion of branches/tags globs,
> > too.  Does the following work for you?
<snip>
> Yes, this works.  Thanks!

Thanks Steven, I've pushed the following out for Junio at git://git.bogomips.org/git-svn

From 46cb16fb599451f417e7cd668e77866f5aa03fc0 Mon Sep 17 00:00:00 2001
From: Steven Walter <swalter@lpdev.prtdev.lexmark.com>
Date: Tue, 3 Aug 2010 19:21:25 -0400
Subject: [PATCH] git svn: URL-decode left-hand side of svn refspec
This change allows git-svn to handle an URL with colons in the path
[ew: rewritten to use uri_decode() function]
Signed-off-by: Eric Wong <normalperson@yhbt.net>
---
 git-svn.perl |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
Show changes to git-svn.perl +2 −0
diff --git a/git-svn.perl b/git-svn.perl
index 8d2ef3d..34884b8 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1820,6 +1820,7 @@ sub read_all_remotes {
 			die("svn-remote.$remote: remote ref '$remote_ref' "
 			    . "must start with 'refs/'\n")
 				unless $remote_ref =~ m{^refs/};
+			$local_ref = uri_decode($local_ref);
 			$r->{$remote}->{fetch}->{$local_ref} = $remote_ref;
 			$r->{$remote}->{svm} = {} if $use_svm_props;
 		} elsif (m!^(.+)\.usesvmprops=\s*(.*)\s*$!) {
@@ -1832,6 +1833,7 @@ sub read_all_remotes {
 			die("svn-remote.$remote: remote ref '$remote_ref' ($t) "
 			    . "must start with 'refs/'\n")
 				unless $remote_ref =~ m{^refs/};
+			$local_ref = uri_decode($local_ref);
 			my $rs = {
 			    t => $t,
 			    remote => $remote,
-- 
Eric Wong

← back to recent threads