git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git-svn: doublecheck if really file or dir

From
EWEric Wong <normalperson@yhbt.net>
Date
Aug 4, 2014, 04:02 UTC
Message-ID
<20140804040212.GA14629@dcvr.yhbt.net>
In-Reply-To
<53DE352A.5050505@gmail.com>
Andrej Manduch <amanduch@gmail.com> wrote:
> On 08/03/2014 02:22 PM, Andrej Manduch wrote:
> > Nice touch, It works like charm. However unfortunatelly now I think you
> > introduced new bug :)
Good catch!
Show 28 quoted lines
> > On 08/03/2014 04:45 AM, Eric Wong wrote:
> >>  sub cmd_info {
> >> -	my $path = canonicalize_path(defined($_[0]) ? $_[0] : ".");
> >> -	my $fullpath = canonicalize_path($cmd_dir_prefix . $path);
> >> +	my $path_arg = defined($_[0]) ? $_[0] : '.';
> >> +	my $path = $path_arg;
> >> +	if ($path =~ m!\A/!) {
> >> +		my $toplevel = eval {
> >> +			my @cmd = qw/rev-parse --show-toplevel/;
> >> +			command_oneline(\@cmd, STDERR => 0);
> >> +		};
> >> +		$path =~ s!\A\Q$toplevel\E/?!!;
> > I have problem with this line ^^^
> > 
> > Suppose your $toplevel is "/sometning" and you type in command line
> > something like that: "git svn info /somethingsrc" and as you see this
> > should end up with error. However "$path =~ s!\A\Q$toplevel\E/?!!;"
> > will just cut "/sometning" from "/somethingsrc" and and up with same
> > answer as for "svn git info src" which is not equivalent query.
> > 
> > Second scenario is something which worries me more: If your query look
> > like this: "git svn info /something//src" it will just end up with error
> > because it will set $path to "/src" witch is outside of repository.
> > 
> > Second scenario can be fixed with this:
> > 
> 
> Actualy this will be even better:

Thanks Andrej. I'll queue that on top of mine. Can you turn that into a proper commit message with Subject? Thanks. (The English-generating part of my brain is too tired)

Show 11 quoted lines
> Signed-off-by: Andrej Manduch <amanduch@gmail.com>
> --- a/git-svn.perl
> +++ b/git-svn.perl
> @@ -1483,6 +1483,7 @@ sub cmd_info {
>  			my @cmd = qw/rev-parse --show-toplevel/;
>  			command_oneline(\@cmd, STDERR => 0);
>  		};
> +		$path = canonicalize_path($path);
>  		$path =~ s!\A\Q$toplevel\E/?!!;
>  		$path = canonicalize_path($path);
>  	} else {
> Because this will have not problem with really weird query like: "git
> svn info /media/../media/something//src"

I've also started working on the following test cases, will squash:

diff --git a/t/t9119-git-svn-info.sh b/t/t9119-git-svn-info.sh
index 4f6e669..f16f323 100755
--- a/t/t9119-git-svn-info.sh
+++ b/t/t9119-git-svn-info.sh
@@ -84,6 +84,26 @@ test_expect_success 'info $(pwd)' '
 	     "$(sed -ne \"/^Path:/ s!/gitwc!!\" <actual.info-pwd)"
 	'
 
+test_expect_success 'info $(pwd)/../___wc' '
+	(cd svnwc; svn info "$(pwd)/../svnwc") >expected.info-pwd &&
+	(cd gitwc; git svn info "$(pwd)/../gitwc") >actual.info-pwd &&
+	grep -v ^Path: <expected.info-pwd >expected.info-np &&
+	grep -v ^Path: <actual.info-pwd >actual.info-np &&
+	test_cmp_info expected.info-np actual.info-np &&
+	test "$(sed -ne \"/^Path:/ s!/svnwc!!\" <expected.info-pwd)" = \
+	     "$(sed -ne \"/^Path:/ s!/gitwc!!\" <actual.info-pwd)"
+	'
+
+test_expect_success 'info $(pwd)/../___wc//file' '
+	(cd svnwc; svn info "$(pwd)/../svnwc//file") >expected.info-pwd &&
+	(cd gitwc; git svn info "$(pwd)/../gitwc//file") >actual.info-pwd &&
+	grep -v ^Path: <expected.info-pwd >expected.info-np &&
+	grep -v ^Path: <actual.info-pwd >actual.info-np &&
+	test_cmp_info expected.info-np actual.info-np &&
+	test "$(sed -ne \"/^Path:/ s!/svnwc!!\" <expected.info-pwd)" = \
+	     "$(sed -ne \"/^Path:/ s!/gitwc!!\" <actual.info-pwd)"
+	'
+
 test_expect_success 'info --url .' '
 	test "$(cd gitwc; git svn info --url .)" = "$quoted_svnrepo"
 	'
Previous: Andrej Manduch
Message 2 of 2 in “Re: [PATCH] git-svn: doublecheck if really file or dir”
  1. Andrej ManduchAug 3, 2014
  2. Eric WongAug 4, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.