* git-svn fetch doesn't like spaces in branch names @ 2007-11-08 0:14 Michael J. Cohen 2007-11-08 0:53 ` [PATCH] " Michael J. Cohen 2007-11-12 7:37 ` [PATCH] git-svn: support for funky branch and project names over HTTP(S) Eric Wong 0 siblings, 2 replies; 5+ messages in thread From: Michael J. Cohen @ 2007-11-08 0:14 UTC (permalink / raw) To: Git Mailing List mini:TextMateBundles mjc$ git-svn fetch Found possible branch point: http://macromates.com/svn/Bundles/trunk/Tools/Dialog PlugIn => http://macromates.com/svn/Bundles/branches/Dialog PlugIn Completion Menu, 8089 Initializing parent: Dialog PlugIn Completion Menu@8089 Bad URL passed to RA layer: Malformed URL for repository at /opt/local/ bin/git-svn line 1607 looks like that might need to be %20 ? -mjc ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] Re: git-svn fetch doesn't like spaces in branch names 2007-11-08 0:14 git-svn fetch doesn't like spaces in branch names Michael J. Cohen @ 2007-11-08 0:53 ` Michael J. Cohen 2007-11-08 7:29 ` Alex Riesen 2007-11-12 7:37 ` [PATCH] git-svn: support for funky branch and project names over HTTP(S) Eric Wong 1 sibling, 1 reply; 5+ messages in thread From: Michael J. Cohen @ 2007-11-08 0:53 UTC (permalink / raw) To: Michael J. Cohen; +Cc: Git Mailing List > mini:TextMateBundles mjc$ git-svn fetch > Found possible branch point: http://macromates.com/svn/Bundles/trunk/Tools/Dialog > PlugIn => http://macromates.com/svn/Bundles/branches/Dialog PlugIn > Completion Menu, 8089 > Initializing parent: Dialog PlugIn Completion Menu@8089 > Bad URL passed to RA layer: Malformed URL for repository at /opt/ > local/bin/git-svn line 1607 > > looks like that might need to be %20 ? Hacky, but it works. Signed-off-by: Michael J. Cohen <mjc@cruiseplanners.com> diff --git a/git-svn.perl b/git-svn.perl index dd93e32..5dc3b9c 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -1976,6 +1976,7 @@ sub find_parent_branch { my $r = $i->{copyfrom_rev}; my $repos_root = $self->ra->{repos_root}; my $url = $self->ra->{url}; + $branch_from =~ s@([\s])@sprintf("%%%02X", ord($1))@seg; my $new_url = $repos_root . $branch_from; print STDERR "Found possible branch point: ", "$new_url => ", $self->full_url, ", $r\n"; -- 1.5.3.5.1590.gfadfad-dirty ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] Re: git-svn fetch doesn't like spaces in branch names 2007-11-08 0:53 ` [PATCH] " Michael J. Cohen @ 2007-11-08 7:29 ` Alex Riesen 2007-11-08 8:49 ` Benoit Sigoure 0 siblings, 1 reply; 5+ messages in thread From: Alex Riesen @ 2007-11-08 7:29 UTC (permalink / raw) To: Michael J. Cohen; +Cc: Git Mailing List Michael J. Cohen, Thu, Nov 08, 2007 01:53:07 +0100: >> mini:TextMateBundles mjc$ git-svn fetch >> Found possible branch point: >> http://macromates.com/svn/Bundles/trunk/Tools/Dialog PlugIn => >> http://macromates.com/svn/Bundles/branches/Dialog PlugIn Completion Menu, >> 8089 >> Initializing parent: Dialog PlugIn Completion Menu@8089 >> Bad URL passed to RA layer: Malformed URL for repository at >> /opt/local/bin/git-svn line 1607 >> >> looks like that might need to be %20 ? > > > Hacky, but it works. > > Signed-off-by: Michael J. Cohen <mjc@cruiseplanners.com> > > diff --git a/git-svn.perl b/git-svn.perl > index dd93e32..5dc3b9c 100755 > --- a/git-svn.perl > +++ b/git-svn.perl > @@ -1976,6 +1976,7 @@ sub find_parent_branch { > my $r = $i->{copyfrom_rev}; > my $repos_root = $self->ra->{repos_root}; > my $url = $self->ra->{url}; > + $branch_from =~ s@([\s])@sprintf("%%%02X", ord($1))@seg; You don't need "[" and "]". ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Re: git-svn fetch doesn't like spaces in branch names 2007-11-08 7:29 ` Alex Riesen @ 2007-11-08 8:49 ` Benoit Sigoure 0 siblings, 0 replies; 5+ messages in thread From: Benoit Sigoure @ 2007-11-08 8:49 UTC (permalink / raw) To: Alex Riesen; +Cc: Michael J. Cohen, Git Mailing List [-- Attachment #1: Type: text/plain, Size: 1685 bytes --] On Nov 8, 2007, at 8:29 AM, Alex Riesen wrote: > Michael J. Cohen, Thu, Nov 08, 2007 01:53:07 +0100: >>> mini:TextMateBundles mjc$ git-svn fetch >>> Found possible branch point: >>> http://macromates.com/svn/Bundles/trunk/Tools/Dialog PlugIn => >>> http://macromates.com/svn/Bundles/branches/Dialog PlugIn >>> Completion Menu, >>> 8089 >>> Initializing parent: Dialog PlugIn Completion Menu@8089 >>> Bad URL passed to RA layer: Malformed URL for repository at >>> /opt/local/bin/git-svn line 1607 >>> >>> looks like that might need to be %20 ? >> >> >> Hacky, but it works. >> >> Signed-off-by: Michael J. Cohen <mjc@cruiseplanners.com> >> >> diff --git a/git-svn.perl b/git-svn.perl >> index dd93e32..5dc3b9c 100755 >> --- a/git-svn.perl >> +++ b/git-svn.perl >> @@ -1976,6 +1976,7 @@ sub find_parent_branch { >> my $r = $i->{copyfrom_rev}; >> my $repos_root = $self->ra->{repos_root}; >> my $url = $self->ra->{url}; >> + $branch_from =~ s@([\s])@sprintf("%%%02X", ord($1))@seg; > > You don't need "[" and "]". You don't even need the "(" and ")" $branch_from =~ s@\s@sprintf("%%%02X", ord($&))@seg; But I think it'd be better to fix this properly. I guess some people use branch names with accentuated characters such as é è ü whatever. What about this instead (untested): $branch_from =~ s@[^\w\d_]@sprintf("%%%02X", ord($&))@seg; Otherwise there are various existing Perl modules such as http:// search.cpan.org/dist/URI/URI/Escape.pm but this seems overkill / not portable (unless we distribute these files along with Git). Cheers, -- Benoit Sigoure aka Tsuna EPITA Research and Development Laboratory [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 186 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] git-svn: support for funky branch and project names over HTTP(S) 2007-11-08 0:14 git-svn fetch doesn't like spaces in branch names Michael J. Cohen 2007-11-08 0:53 ` [PATCH] " Michael J. Cohen @ 2007-11-12 7:37 ` Eric Wong 1 sibling, 0 replies; 5+ messages in thread From: Eric Wong @ 2007-11-12 7:37 UTC (permalink / raw) To: Michael J. Cohen; +Cc: Git Mailing List SVN requires that paths be URI-escaped for HTTP(S) repositories. file:// and svn:// repositories do not need these rules. Additionally, accessing individual paths inside repositories (check_path() and get_log() do NOT require escapes to function and in fact it breaks things). Noticed-by: Michael J. Cohen <mjc@cruiseplanners.com> Signed-off-by: Eric Wong <normalperson@yhbt.net> --- git-svn.perl | 24 ++++++++++++++++++- t/t9118-git-svn-funky-branch-names.sh | 40 +++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100755 t/t9118-git-svn-funky-branch-names.sh "Michael J. Cohen" <michaeljosephcohen@mac.com> wrote: > mini:TextMateBundles mjc$ git-svn fetch > Found possible branch point: > http://macromates.com/svn/Bundles/trunk/Tools/Dialog PlugIn => > http://macromates.com/svn/Bundles/branches/Dialog PlugIn Completion Menu, > 8089 > Initializing parent: Dialog PlugIn Completion Menu@8089 > Bad URL passed to RA layer: Malformed URL for repository at /opt/local/ > bin/git-svn line 1607 > > looks like that might need to be %20 ? > > -mjc diff --git a/git-svn.perl b/git-svn.perl index 7589276..9ffda3e 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -3223,6 +3223,25 @@ sub _auth_providers () { ] } +sub escape_uri_only { + my ($uri) = @_; + my @tmp; + foreach (split m{/}, $uri) { + s/([^\w.-])/sprintf("%%%02X",ord($1))/eg; + push @tmp, $_; + } + join('/', @tmp); +} + +sub escape_url { + my ($url) = @_; + if ($url =~ m#^(https?)://([^/]+)(.*)$#) { + my ($scheme, $domain, $uri) = ($1, $2, escape_uri_only($3)); + $url = "$scheme://$domain$uri"; + } + $url; +} + sub new { my ($class, $url) = @_; $url =~ s!/+$!!; @@ -3255,10 +3274,11 @@ sub new { $Git::SVN::Prompt::_no_auth_cache = 1; } } # no warnings 'once' - my $self = SVN::Ra->new(url => $url, auth => $baton, + my $self = SVN::Ra->new(url => escape_url($url), auth => $baton, config => $config, pool => SVN::Pool->new, auth_provider_callbacks => $callbacks); + $self->{url} = $url; $self->{svn_path} = $url; $self->{repos_root} = $self->get_repos_root; $self->{svn_path} =~ s#^\Q$self->{repos_root}\E(/|$)##; @@ -3384,7 +3404,7 @@ sub gs_do_switch { my $full_url = $self->{url}; my $old_url = $full_url; - $full_url .= "/$path" if length $path; + $full_url .= '/' . escape_uri_only($path) if length $path; my ($ra, $reparented); if ($old_url ne $full_url) { if ($old_url !~ m#^svn(\+ssh)?://#) { diff --git a/t/t9118-git-svn-funky-branch-names.sh b/t/t9118-git-svn-funky-branch-names.sh new file mode 100755 index 0000000..640bb06 --- /dev/null +++ b/t/t9118-git-svn-funky-branch-names.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# +# Copyright (c) 2007 Eric Wong +# + +test_description='git-svn funky branch names' +. ./lib-git-svn.sh + +test_expect_success 'setup svnrepo' " + mkdir project project/trunk project/branches project/tags && + echo foo > project/trunk/foo && + svn import -m '$test_description' project \"$svnrepo/pr ject\" && + rm -rf project && + svn cp -m 'fun' \"$svnrepo/pr ject/trunk\" \ + \"$svnrepo/pr ject/branches/fun plugin\" && + svn cp -m 'more fun!' \"$svnrepo/pr ject/branches/fun plugin\" \ + \"$svnrepo/pr ject/branches/more fun plugin!\" && + start_httpd + " + +test_expect_success 'test clone with funky branch names' " + git svn clone -s \"$svnrepo/pr ject\" project && + cd project && + git rev-parse 'refs/remotes/fun%20plugin' && + git rev-parse 'refs/remotes/more%20fun%20plugin!' && + cd .. + " + +test_expect_success 'test dcommit to funky branch' " + cd project && + git reset --hard 'refs/remotes/more%20fun%20plugin!' && + echo hello >> foo && + git commit -m 'hello' -- foo && + git svn dcommit && + cd .. + " + +stop_httpd + +test_done -- Eric Wong ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-11-12 7:38 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-11-08 0:14 git-svn fetch doesn't like spaces in branch names Michael J. Cohen 2007-11-08 0:53 ` [PATCH] " Michael J. Cohen 2007-11-08 7:29 ` Alex Riesen 2007-11-08 8:49 ` Benoit Sigoure 2007-11-12 7:37 ` [PATCH] git-svn: support for funky branch and project names over HTTP(S) Eric Wong
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).