Git development
 help / color / mirror / Atom feed
* git-svn: Fails to drop leading path from empty dir name
@ 2009-11-22 13:46 Björn Steinbrink
  2009-11-22 23:25 ` Eric Wong
  0 siblings, 1 reply; 4+ messages in thread
From: Björn Steinbrink @ 2009-11-22 13:46 UTC (permalink / raw)
  To: Eric Wong; +Cc: git

Hi Eric,

the stuff to create empty directories fails to strip leading path
components, e.g. when using
"git svn clone -s svn://whatever/project/trunk".

Instead of creating the empty directory "foo" in the repo root, it
creates "project/trunk/foo".

Ad hoc patch for the test case below.

Björn

diff --git a/t/t9146-git-svn-empty-dirs.sh b/t/t9146-git-svn-empty-dirs.sh
index 5948544..9e22089 100755
--- a/t/t9146-git-svn-empty-dirs.sh
+++ b/t/t9146-git-svn-empty-dirs.sh
@@ -82,4 +82,27 @@ test_expect_success 'git svn mkdirs -r works' '
 	)
 '
 
+test_expect_success 'initialize trunk' '
+	for i in trunk trunk/a trunk/"weird file name"
+	do
+		svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i"
+	done
+'
+
+test_expect_success 'clone trunk' 'git svn clone -s "$svnrepo" trunk'
+
+test_expect_success 'empty directories in trunk exist' '
+	(
+		cd cloned &&
+		for i in trunk/a trunk/"weird file name"
+		do
+			if ! test -d "$i"
+			then
+				echo >&2 "$i does not exist"
+				exit 1
+			fi
+		done
+	)
+'
+
 test_done

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: git-svn: Fails to drop leading path from empty dir name
  2009-11-22 13:46 git-svn: Fails to drop leading path from empty dir name Björn Steinbrink
@ 2009-11-22 23:25 ` Eric Wong
  2009-11-22 23:52   ` Björn Steinbrink
  0 siblings, 1 reply; 4+ messages in thread
From: Eric Wong @ 2009-11-22 23:25 UTC (permalink / raw)
  To: Björn Steinbrink; +Cc: git

Björn Steinbrink <B.Steinbrink@gmx.de> wrote:
> Hi Eric,
> 
> the stuff to create empty directories fails to strip leading path
> components, e.g. when using
> "git svn clone -s svn://whatever/project/trunk".
> 
> Instead of creating the empty directory "foo" in the repo root, it
> creates "project/trunk/foo".
> 
> Ad hoc patch for the test case below.
> 
> Björn
> 
> diff --git a/t/t9146-git-svn-empty-dirs.sh b/t/t9146-git-svn-empty-dirs.sh
> index 5948544..9e22089 100755
> --- a/t/t9146-git-svn-empty-dirs.sh
> +++ b/t/t9146-git-svn-empty-dirs.sh
> @@ -82,4 +82,27 @@ test_expect_success 'git svn mkdirs -r works' '
>  	)
>  '
>  
> +test_expect_success 'initialize trunk' '
> +	for i in trunk trunk/a trunk/"weird file name"
> +	do
> +		svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i"
> +	done
> +'
> +

Hi Björn,

I'm having a bit of trouble figuring out exactly what you mean
here, can you double check your tests?  Annotations below, thanks

> +test_expect_success 'clone trunk' 'git svn clone -s "$svnrepo" trunk'
                                                    ^^            ^^^^^
                                                           Huh?

> +test_expect_success 'empty directories in trunk exist' '
> +	(
> +		cd cloned &&
                   ^^^^^^ - ?

> +		for i in trunk/a trunk/"weird file name"
> +		do
> +			if ! test -d "$i"
> +			then
> +				echo >&2 "$i does not exist"
> +				exit 1
> +			fi
> +		done

-- 
Eric Wong

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: git-svn: Fails to drop leading path from empty dir name
  2009-11-22 23:25 ` Eric Wong
@ 2009-11-22 23:52   ` Björn Steinbrink
  2009-11-23  2:21     ` [PATCH] git svn: strip leading path when making empty dirs Eric Wong
  0 siblings, 1 reply; 4+ messages in thread
From: Björn Steinbrink @ 2009-11-22 23:52 UTC (permalink / raw)
  To: Eric Wong; +Cc: git

Hi Eric,

On 2009.11.22 15:25:04 -0800, Eric Wong wrote:
> Björn Steinbrink <B.Steinbrink@gmx.de> wrote:

> I'm having a bit of trouble figuring out exactly what you mean
> here, can you double check your tests?  Annotations below, thanks
> 
> > +test_expect_success 'clone trunk' 'git svn clone -s "$svnrepo" trunk'
>                                                     ^^            ^^^^^
>                                                            Huh?
> 
> > +test_expect_success 'empty directories in trunk exist' '
> > +	(
> > +		cd cloned &&
>                    ^^^^^^ - ?
> 
> > +		for i in trunk/a trunk/"weird file name"

Argh, yeah, I messed that patch up, the test only failed because I also
messed up this line, adding the trunk prefix there, too. Fixed patch
below.

SVN Repo layout:

/
|
|---trunk
|   |
... |---foo/ # Empty
    |
    |---bar/
        |
        somefile

with "git svn clone -s svn://host/path/to/repo you get:

.git
bar/
bar/somefile
trunk/foo # This should be just foo/

i.e. the empty directories have their path relative to the repo root,
instead of relative to the directory the git branch is associated with.

Sorry for the messed up first patch.

Björn

diff --git a/t/t9146-git-svn-empty-dirs.sh b/t/t9146-git-svn-empty-dirs.sh
index 5948544..70c52c1 100755
--- a/t/t9146-git-svn-empty-dirs.sh
+++ b/t/t9146-git-svn-empty-dirs.sh
@@ -82,4 +82,27 @@ test_expect_success 'git svn mkdirs -r works' '
 	)
 '
 
+test_expect_success 'initialize trunk' '
+	for i in trunk trunk/a trunk/"weird file name"
+	do
+		svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i"
+	done
+'
+
+test_expect_success 'clone trunk' 'git svn clone -s "$svnrepo" trunk'
+
+test_expect_success 'empty directories in trunk exist' '
+	(
+		cd trunk &&
+		for i in a "weird file name"
+		do
+			if ! test -d "$i"
+			then
+				echo >&2 "$i does not exist"
+				exit 1
+			fi
+		done
+	)
+'
+
 test_done

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH] git svn: strip leading path when making empty dirs
  2009-11-22 23:52   ` Björn Steinbrink
@ 2009-11-23  2:21     ` Eric Wong
  0 siblings, 0 replies; 4+ messages in thread
From: Eric Wong @ 2009-11-23  2:21 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Björn Steinbrink

Björn Steinbrink <B.Steinbrink@gmx.de> wrote:
> Argh, yeah, I messed that patch up, the test only failed because I also
> messed up this line, adding the trunk prefix there, too. Fixed patch
> below.
> 
> SVN Repo layout:
> 
> /
> |
> |---trunk
> |   |
> ... |---foo/ # Empty
>     |
>     |---bar/
>         |
>         somefile
> 
> with "git svn clone -s svn://host/path/to/repo you get:
> 
> .git
> bar/
> bar/somefile
> trunk/foo # This should be just foo/
> 
> i.e. the empty directories have their path relative to the repo root,
> instead of relative to the directory the git branch is associated with.
> 
> Sorry for the messed up first patch.

No worries, thanks for the bug report and test case.  My brain's been
completely fried lately so I was completely confused :x
Anyways this should fix it:

     Also pushed out to git://git.bogomips.org/git-svn:
	Eric Wong (2):
	      git svn: always reuse existing remotes on fetch
	      git svn: strip leading path when making empty dirs

From 9be30eed61993a6f2d04a1609723e64e7632a64e Mon Sep 17 00:00:00 2001
From: Eric Wong <normalperson@yhbt.net>
Date: Sun, 22 Nov 2009 18:11:32 -0800
Subject: [PATCH] git svn: strip leading path when making empty dirs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Since unhandled.log stores paths relative to the repository
root, we need to strip out leading path components if the
directories we're tracking are not the repository root.

Reported-by: Björn Steinbrink
Signed-off-by: Eric Wong <normalperson@yhbt.net>
---
 git-svn.perl                  |    3 +++
 t/t9146-git-svn-empty-dirs.sh |   23 +++++++++++++++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/git-svn.perl b/git-svn.perl
index 7f7a56f..957d44e 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -2752,8 +2752,11 @@ sub mkemptydirs {
 		}
 	}
 	close $fh;
+
+	my $strip = qr/\A\Q$self->{path}\E(?:\/|$)/;
 	foreach my $d (sort keys %empty_dirs) {
 		$d = uri_decode($d);
+		$d =~ s/$strip//;
 		next if -d $d;
 		if (-e _) {
 			warn "$d exists but is not a directory\n";
diff --git a/t/t9146-git-svn-empty-dirs.sh b/t/t9146-git-svn-empty-dirs.sh
index 5948544..70c52c1 100755
--- a/t/t9146-git-svn-empty-dirs.sh
+++ b/t/t9146-git-svn-empty-dirs.sh
@@ -82,4 +82,27 @@ test_expect_success 'git svn mkdirs -r works' '
 	)
 '
 
+test_expect_success 'initialize trunk' '
+	for i in trunk trunk/a trunk/"weird file name"
+	do
+		svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i"
+	done
+'
+
+test_expect_success 'clone trunk' 'git svn clone -s "$svnrepo" trunk'
+
+test_expect_success 'empty directories in trunk exist' '
+	(
+		cd trunk &&
+		for i in a "weird file name"
+		do
+			if ! test -d "$i"
+			then
+				echo >&2 "$i does not exist"
+				exit 1
+			fi
+		done
+	)
+'
+
 test_done
-- 
Eric Wong

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-11-23  2:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-22 13:46 git-svn: Fails to drop leading path from empty dir name Björn Steinbrink
2009-11-22 23:25 ` Eric Wong
2009-11-22 23:52   ` Björn Steinbrink
2009-11-23  2:21     ` [PATCH] git svn: strip leading path when making empty dirs Eric Wong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox