threads / patch / 43310

patchRe: [PATCH] git-svnimport: support for partial imports

Subject: Re: [PATCH] git-svnimport: support for partial imports

## tl;dr

7 messages between Oct 25, 2006 and Nov 1, 2006. Diffs are folded; open one to read it.

replies: 6people: 3as markdown or json

Sasha Khapyorsky· Oct 25, 2006, 22:50 UTC · lore

[PATCH] git-svnimport: support for partial imports

This adds support for partial svn imports. Let's assume that SVN repository layout looks like:

  $trunk/path/to/our/project
  $branches/path/to/our/project
  $tags/path/to/our/project

, and we would like to import only tree under this specific 'path/to/our/project' and not whole tree under $trunk, $branches, etc.. Now we will be be able to do it by using '-P path/to/our/project' option with git-svnimport.

Signed-off-by: Sasha Khapyorsky <sashak@voltaire.com>
---
 git-svnimport.perl |   29 +++++++++++++++++++++++++----
 1 files changed, 25 insertions(+), 4 deletions(-)
Show changes to git-svnimport.perl +25 −4
diff --git a/git-svnimport.perl b/git-svnimport.perl
index f6eff8e..cbaa8ab 100755
--- a/git-svnimport.perl
+++ b/git-svnimport.perl
@@ -31,7 +31,7 @@ die "Need SVN:Core 1.2.1 or better" if $
 $ENV{'TZ'}="UTC";
 
 our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T,
-    $opt_b,$opt_r,$opt_I,$opt_A,$opt_s,$opt_l,$opt_d,$opt_D,$opt_S,$opt_F);
+    $opt_b,$opt_r,$opt_I,$opt_A,$opt_s,$opt_l,$opt_d,$opt_D,$opt_S,$opt_F,$opt_P);
 
 sub usage() {
 	print STDERR <<END;
@@ -39,17 +39,19 @@ Usage: ${\basename $0}     # fetch/updat
        [-o branch-for-HEAD] [-h] [-v] [-l max_rev]
        [-C GIT_repository] [-t tagname] [-T trunkname] [-b branchname]
        [-d|-D] [-i] [-u] [-r] [-I ignorefilename] [-s start_chg]
-       [-m] [-M regex] [-A author_file] [-S] [-F] [SVN_URL]
+       [-m] [-M regex] [-A author_file] [-S] [-F] [-P project_name] [SVN_URL]
 END
 	exit(1);
 }
 
-getopts("A:b:C:dDFhiI:l:mM:o:rs:t:T:Suv") or usage();
+getopts("A:b:C:dDFhiI:l:mM:o:rs:t:T:SP:uv") or usage();
 usage if $opt_h;
 
 my $tag_name = $opt_t || "tags";
 my $trunk_name = $opt_T || "trunk";
 my $branch_name = $opt_b || "branches";
+my $project_name = $opt_P || "";
+$project_name = "/" . $project_name if ($project_name);
 
 @ARGV == 1 or @ARGV == 2 or usage();
 
@@ -427,6 +429,20 @@ sub get_ignore($$$$$) {
 	}
 }
 
+sub project_path($$)
+{
+	my ($path, $project) = @_;
+
+	$path = "/".$path unless ($path =~ m#^\/#) ;
+	return $1 if ($path =~ m#^$project\/(.*)$#);
+
+	$path =~ s#\.#\\\.#g;
+	$path =~ s#\+#\\\+#g;
+	return "/" if ($project =~ m#^$path.*$#);
+
+	return undef;
+}
+
 sub split_path($$) {
 	my($rev,$path) = @_;
 	my $branch;
@@ -446,7 +462,11 @@ sub split_path($$) {
 		print STDERR "$rev: Unrecognized path: $path\n" unless (defined $no_error{$path});
 		return ()
 	}
-	$path = "/" if $path eq "";
+	if ($path eq "") {
+		$path = "/";
+	} elsif ($project_name) {
+		$path = project_path($path, $project_name);
+	}
 	return ($branch,$path);
 }
 
@@ -898,6 +918,7 @@ sub commit_all {
 	while(my($path,$action) = each %$changed_paths) {
 		($branch,$path) = split_path($revision,$path);
 		next if not defined $branch;
+		next if not defined $path;
 		$done{$branch}{$path} = $action;
 	}
 	while(($branch,$changed_paths) = each %done) {
-- 
1.4.3.1.g9f9e
Karl Hasselström· Oct 26, 2006, 08:47 UTC · re: Sasha Khapyorsky · lore
On 2006-10-26 00:50:26 +0200, Sasha Khapyorsky wrote:
Show 11 quoted lines
> This adds support for partial svn imports. Let's assume that SVN
> repository layout looks like:
>
>   $trunk/path/to/our/project
>   $branches/path/to/our/project
>   $tags/path/to/our/project
>
> , and we would like to import only tree under this specific
> 'path/to/our/project' and not whole tree under $trunk, $branches,
> etc.. Now we will be be able to do it by using '-P
> path/to/our/project' option with git-svnimport.

Isn't this already doable with "-T trunk/path/to/our/project -t tags/path/to/our/project -b branches/path/to/our/project"?

-- 
Karl Hasselström, kha@treskal.com
Sasha Khapyorsky· Oct 26, 2006, 10:31 UTC · re: Karl Hasselström · lore
On 10:47 Thu 26 Oct     , Karl Hasselstr?m wrote:
Show 16 quoted lines
> On 2006-10-26 00:50:26 +0200, Sasha Khapyorsky wrote:
> 
> > This adds support for partial svn imports. Let's assume that SVN
> > repository layout looks like:
> >
> >   $trunk/path/to/our/project
> >   $branches/path/to/our/project
> >   $tags/path/to/our/project
> >
> > , and we would like to import only tree under this specific
> > 'path/to/our/project' and not whole tree under $trunk, $branches,
> > etc.. Now we will be be able to do it by using '-P
> > path/to/our/project' option with git-svnimport.
> 
> Isn't this already doable with "-T trunk/path/to/our/project -t
> tags/path/to/our/project -b branches/path/to/our/project"?

In such case git-svnimport will not be able to resolve branches and tags names - note that actual SVN paths are:

  branches/<branch-name>/path/to/our/project
  tags/<tag-name>/path/to/our/project
Karl Hasselström· Oct 26, 2006, 10:54 UTC · re: Sasha Khapyorsky · lore
On 2006-10-26 12:31:20 +0200, Sasha Khapyorsky wrote:
> On 10:47 Thu 26 Oct, Karl Hasselström wrote:
Show 8 quoted lines
> > Isn't this already doable with "-T trunk/path/to/our/project -t
> > tags/path/to/our/project -b branches/path/to/our/project"?
>
> In such case git-svnimport will not be able to resolve branches and
> tags names - note that actual SVN paths are:
>
>   branches/<branch-name>/path/to/our/project
>   tags/<tag-name>/path/to/our/project
Aahh, right. I didn't think of that.
-- 
Karl Hasselström, kha@treskal.com
Sasha Khapyorsky· Oct 31, 2006, 22:50 UTC · re: Sasha Khapyorsky · lore
On 00:50 Thu 26 Oct     , Sasha Khapyorsky wrote:
Show 13 quoted lines
> This adds support for partial svn imports. Let's assume that SVN
> repository layout looks like:
> 
>   $trunk/path/to/our/project
>   $branches/path/to/our/project
>   $tags/path/to/our/project
> 
> , and we would like to import only tree under this specific
> 'path/to/our/project' and not whole tree under $trunk, $branches, etc..
> Now we will be be able to do it by using '-P path/to/our/project' option
> with git-svnimport.
> 
> Signed-off-by: Sasha Khapyorsky <sashak@voltaire.com>
Any news about status of this patch?
Junio C Hamano· Oct 31, 2006, 23:48 UTC · re: Sasha Khapyorsky · lore
Sasha Khapyorsky <sashak@voltaire.com> writes:
Show 16 quoted lines
> On 00:50 Thu 26 Oct     , Sasha Khapyorsky wrote:
>> This adds support for partial svn imports. Let's assume that SVN
>> repository layout looks like:
>> 
>>   $trunk/path/to/our/project
>>   $branches/path/to/our/project
>>   $tags/path/to/our/project
>> 
>> , and we would like to import only tree under this specific
>> 'path/to/our/project' and not whole tree under $trunk, $branches, etc..
>> Now we will be be able to do it by using '-P path/to/our/project' option
>> with git-svnimport.
>> 
>> Signed-off-by: Sasha Khapyorsky <sashak@voltaire.com>
>
> Any news about status of this patch?

Somebody mentioned this duplicates something that can be already done, and I saw you refuted that. At that point I thought then it would be Ok to add, and then I forgot about it. Sorry.

Will apply unless somebody objects immediately ;-).
Sasha Khapyorsky· Nov 1, 2006, 00:51 UTC · re: Junio C Hamano · lore
On 15:48 Tue 31 Oct     , Junio C Hamano wrote:
Show 22 quoted lines
> Sasha Khapyorsky <sashak@voltaire.com> writes:
> 
> > On 00:50 Thu 26 Oct     , Sasha Khapyorsky wrote:
> >> This adds support for partial svn imports. Let's assume that SVN
> >> repository layout looks like:
> >> 
> >>   $trunk/path/to/our/project
> >>   $branches/path/to/our/project
> >>   $tags/path/to/our/project
> >> 
> >> , and we would like to import only tree under this specific
> >> 'path/to/our/project' and not whole tree under $trunk, $branches, etc..
> >> Now we will be be able to do it by using '-P path/to/our/project' option
> >> with git-svnimport.
> >> 
> >> Signed-off-by: Sasha Khapyorsky <sashak@voltaire.com>
> >
> > Any news about status of this patch?
> 
> Somebody mentioned this duplicates something that can be already
> done, and I saw you refuted that.  At that point I thought then
> it would be Ok to add, and then I forgot about it.  Sorry.
No problem.

← back to recent threads