From f5530b8833bcaa423cd53d133d3de3fa0173fbf3 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 11 Nov 2007 23:37:42 -0800 Subject: [PATCH 1/3] git-svn: support for funky branch and project names over HTTP(S) 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 Signed-off-by: Eric Wong Signed-off-by: Junio C Hamano --- 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 diff --git a/git-svn.perl b/git-svn.perl index 4c779b6c6d..858c5be107 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -3068,6 +3068,25 @@ BEGIN { } } +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!/+$!!; @@ -3092,10 +3111,11 @@ sub new { ]); my $config = SVN::Core::config_get_config($config_dir); $RA = undef; - 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(/|$)##; @@ -3203,7 +3223,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 0000000000..640bb066f3 --- /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 From eee8a1742bf51df33f0f6004774035f57253f944 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 7 Jan 2008 02:40:40 -0800 Subject: [PATCH 2/3] git-svn: clarify the "Ignoring error from SVN" piece I've heard of several users puzzled by this, and it sometimes it appears as if git-svn is doing nothing on slower connections and larger repositories. Signed-off-by: Eric Wong Signed-off-by: Junio C Hamano --- git-svn.perl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/git-svn.perl b/git-svn.perl index 858c5be107..f5adbdaa41 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -3488,6 +3488,10 @@ sub skip_unknown_revs { warn "W: Ignoring error from SVN, path probably ", "does not exist: ($errno): ", $err->expanded_message,"\n"; + warn "W: Do not be alarmed at the above message ", + "git-svn is just searching aggressively for ", + "old history.\n", + "This may take a while on large repositories\n"; $ignored_err{$err_key} = 1; } return; From aadd4efa715f56e0eac5ac459c8ff4933b56d4ce Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 7 Jan 2008 22:41:43 -0800 Subject: [PATCH 3/3] GIT 1.5.3.8 Signed-off-by: Junio C Hamano --- Documentation/RelNotes-1.5.3.8.txt | 25 +++++++++++++++++++++++++ GIT-VERSION-GEN | 2 +- RelNotes | 2 +- 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 Documentation/RelNotes-1.5.3.8.txt diff --git a/Documentation/RelNotes-1.5.3.8.txt b/Documentation/RelNotes-1.5.3.8.txt new file mode 100644 index 0000000000..0e3ff58a46 --- /dev/null +++ b/Documentation/RelNotes-1.5.3.8.txt @@ -0,0 +1,25 @@ +GIT v1.5.3.8 Release Notes +========================== + +Fixes since v1.5.3.7 +-------------------- + + * Some documentation used "email.com" as an example domain. + + * git-svn fix to handle funky branch and project names going over + http/https correctly. + + * git-svn fix to tone down a needlessly alarming warning message. + + * git-clone did not correctly report errors while fetching over http. + + * git-send-email added redundant Message-Id: header to the outgoing + e-mail when the patch text already had one. + + * a read-beyond-end-of-buffer bug in configuration file updater was fixed. + + * git-grep used to show the same hit repeatedly for unmerged paths. + + * After amending the patch title in "git-am -i", the command did not + report the patch it applied with the updated title. + diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 85314ebd67..d34c923aee 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v1.5.3.7.GIT +DEF_VER=v1.5.3.8.GIT LF=' ' diff --git a/RelNotes b/RelNotes index 509b3f6044..212c51c198 120000 --- a/RelNotes +++ b/RelNotes @@ -1 +1 @@ -Documentation/RelNotes-1.5.3.7.txt \ No newline at end of file +Documentation/RelNotes-1.5.3.8.txt \ No newline at end of file