提交 ec1e4689 编写于 作者: S Sasha Khapyorsky 提交者: Junio C Hamano

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: NSasha Khapyorsky <sashak@voltaire.com>
Signed-off-by: NJunio C Hamano <junkio@cox.net>
上级 83877f8d
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
$ENV{'TZ'}="UTC"; $ENV{'TZ'}="UTC";
our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T, 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() { sub usage() {
print STDERR <<END; print STDERR <<END;
...@@ -39,17 +39,19 @@ () ...@@ -39,17 +39,19 @@ ()
[-o branch-for-HEAD] [-h] [-v] [-l max_rev] [-o branch-for-HEAD] [-h] [-v] [-l max_rev]
[-C GIT_repository] [-t tagname] [-T trunkname] [-b branchname] [-C GIT_repository] [-t tagname] [-T trunkname] [-b branchname]
[-d|-D] [-i] [-u] [-r] [-I ignorefilename] [-s start_chg] [-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 END
exit(1); 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; usage if $opt_h;
my $tag_name = $opt_t || "tags"; my $tag_name = $opt_t || "tags";
my $trunk_name = $opt_T || "trunk"; my $trunk_name = $opt_T || "trunk";
my $branch_name = $opt_b || "branches"; 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(); @ARGV == 1 or @ARGV == 2 or usage();
...@@ -427,6 +429,20 @@ ($$$$$) ...@@ -427,6 +429,20 @@ ($$$$$)
} }
} }
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($$) { sub split_path($$) {
my($rev,$path) = @_; my($rev,$path) = @_;
my $branch; my $branch;
...@@ -446,7 +462,11 @@ ($$) ...@@ -446,7 +462,11 @@ ($$)
print STDERR "$rev: Unrecognized path: $path\n" unless (defined $no_error{$path}); print STDERR "$rev: Unrecognized path: $path\n" unless (defined $no_error{$path});
return () return ()
} }
$path = "/" if $path eq ""; if ($path eq "") {
$path = "/";
} elsif ($project_name) {
$path = project_path($path, $project_name);
}
return ($branch,$path); return ($branch,$path);
} }
...@@ -898,6 +918,7 @@ sub commit_all { ...@@ -898,6 +918,7 @@ sub commit_all {
while(my($path,$action) = each %$changed_paths) { while(my($path,$action) = each %$changed_paths) {
($branch,$path) = split_path($revision,$path); ($branch,$path) = split_path($revision,$path);
next if not defined $branch; next if not defined $branch;
next if not defined $path;
$done{$branch}{$path} = $action; $done{$branch}{$path} = $action;
} }
while(($branch,$changed_paths) = each %done) { while(($branch,$changed_paths) = each %done) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册