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> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
83877f8d92
commit
ec1e468973
@ -31,7 +31,7 @@ $SIG{'PIPE'}="IGNORE";
|
|||||||
$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 @@ Usage: ${\basename $0} # fetch/update GIT from SVN
|
|||||||
[-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 @@ 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($$) {
|
sub split_path($$) {
|
||||||
my($rev,$path) = @_;
|
my($rev,$path) = @_;
|
||||||
my $branch;
|
my $branch;
|
||||||
@ -446,7 +462,11 @@ sub split_path($$) {
|
|||||||
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 {
|
|||||||
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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user