提交 98327e58 编写于 作者: E Eric Wong 提交者: Junio C Hamano

git-svn: make multi-init less confusing

It now requires at least one of the (trunk|branch|tags) arguments
(either from the command-line or in .git/config).  Also we make
sure that anything that is passed as a URL ('help') in David's
case is actually a URL.

Thanks to David Kågedal for reporting this issue.
Signed-off-by: NEric Wong <normalperson@yhbt.net>
Signed-off-by: NJunio C Hamano <junkio@cox.net>
上级 4fe2cc0c
......@@ -571,18 +571,11 @@ sub graft_branches {
sub multi_init {
my $url = shift;
$_trunk ||= 'trunk';
$_trunk =~ s#/+$##;
$url =~ s#/+$## if $url;
if ($_trunk !~ m#^[a-z\+]+://#) {
$_trunk = '/' . $_trunk if ($_trunk !~ m#^/#);
unless ($url) {
print STDERR "E: '$_trunk' is not a complete URL ",
"and a separate URL is not specified\n";
exit 1;
}
$_trunk = $url . $_trunk;
unless (defined $_trunk || defined $_branches || defined $_tags) {
usage(1);
}
if (defined $_trunk) {
my $trunk_url = complete_svn_url($url, $_trunk);
my $ch_id;
if ($GIT_SVN eq 'git-svn') {
$ch_id = 1;
......@@ -590,9 +583,13 @@ sub multi_init {
}
init_vars();
unless (-d $GIT_SVN_DIR) {
print "GIT_SVN_ID set to 'trunk' for $_trunk\n" if $ch_id;
init($_trunk);
command_noisy('repo-config', 'svn.trunk', $_trunk);
if ($ch_id) {
print "GIT_SVN_ID set to 'trunk' for ",
"$trunk_url ($_trunk)\n";
}
init($trunk_url);
command_noisy('repo-config', 'svn.trunk', $trunk_url);
}
}
complete_url_ls_init($url, $_branches, '--branches/-b', '');
complete_url_ls_init($url, $_tags, '--tags/-t', 'tags/');
......@@ -872,29 +869,34 @@ sub rec_fetch {
}
}
sub complete_svn_url {
my ($url, $path) = @_;
$path =~ s#/+$##;
$url =~ s#/+$## if $url;
if ($path !~ m#^[a-z\+]+://#) {
$path = '/' . $path if ($path !~ m#^/#);
if (!defined $url || $url !~ m#^[a-z\+]+://#) {
fatal("E: '$path' is not a complete URL ",
"and a separate URL is not specified\n");
}
$path = $url . $path;
}
return $path;
}
sub complete_url_ls_init {
my ($url, $var, $switch, $pfx) = @_;
unless ($var) {
my ($url, $path, $switch, $pfx) = @_;
unless ($path) {
print STDERR "W: $switch not specified\n";
return;
}
$var =~ s#/+$##;
if ($var !~ m#^[a-z\+]+://#) {
$var = '/' . $var if ($var !~ m#^/#);
unless ($url) {
print STDERR "E: '$var' is not a complete URL ",
"and a separate URL is not specified\n";
exit 1;
}
$var = $url . $var;
}
my @ls = libsvn_ls_fullurl($var);
my $old = $GIT_SVN;
my $full_url = complete_svn_url($url, $path);
my @ls = libsvn_ls_fullurl($full_url);
defined(my $pid = fork) or croak $!;
if (!$pid) {
foreach my $u (map { "$var/$_" } (grep m!/$!, @ls)) {
foreach my $u (map { "$full_url/$_" } (grep m!/$!, @ls)) {
$u =~ s#/+$##;
if ($u !~ m!\Q$var\E/(.+)$!) {
if ($u !~ m!\Q$full_url\E/(.+)$!) {
print STDERR "W: Unrecognized URL: $u\n";
die "This should never happen\n";
}
......@@ -912,7 +914,7 @@ sub complete_url_ls_init {
waitpid $pid, 0;
croak $? if $?;
my ($n) = ($switch =~ /^--(\w+)/);
command_noisy('repo-config', "svn.$n", $var);
command_noisy('repo-config', "svn.$n", $full_url);
}
sub common_prefix {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册