aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2007-02-14 02:21:19 -0800
committerEric Wong <normalperson@yhbt.net>2007-02-23 00:57:12 -0800
commite98671e5c2067a39759c8f08b79c260a9f0b2771 (patch)
tree6f41c112e00cd9e2f09f66023e712b88bc3b84cd
parentccb6b6f5b50bb32f90222a3e801a1901bf0b5657 (diff)
downloadgit-e98671e5c2067a39759c8f08b79c260a9f0b2771.tar.gz
git-e98671e5c2067a39759c8f08b79c260a9f0b2771.tar.xz
git-svn: hopefully make 'fetch' more user-friendly
multi-fetch is deprecated, "fetch -a" is easier to type By default, fetch will fetch everything from its default [svn-remote]; if fetch [--all|-a] is specified, then it will fetch from all svn remotes. Refspecs on the command-line (like git-fetch) are not supported. Also, enable -r/--revision arguments for fetch so users can shoot themselves in the foot^W^W^W^W^W skip some history and do the equivalent of a shallow clone/fetch they're not interested in. Signed-off-by: Eric Wong <normalperson@yhbt.net>
-rwxr-xr-xgit-svn.perl58
1 files changed, 33 insertions, 25 deletions
diff --git a/git-svn.perl b/git-svn.perl
index fb2c864a3..3eed62fc0 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -53,7 +53,7 @@ $sha1_short = qr/[a-f\d]{4,40}/;
my ($_stdin, $_help, $_edit,
$_message, $_file,
$_template, $_shared,
- $_version,
+ $_version, $_fetch_all,
$_merge, $_strategy, $_dry_run,
$_prefix);
$Git::SVN::_follow_parent = 1;
@@ -84,7 +84,9 @@ my %cmt_opts = ( 'edit|e' => \$_edit,
my %cmd = (
fetch => [ \&cmd_fetch, "Download new revisions from SVN",
- { 'revision|r=s' => \$_revision, %fc_opts } ],
+ { 'revision|r=s' => \$_revision,
+ 'all|a' => \$_fetch_all,
+ %fc_opts } ],
init => [ \&cmd_init, "Initialize a repo for tracking" .
" (requires URL argument)",
\%init_opts ],
@@ -106,8 +108,8 @@ my %cmd = (
'prefix=s' => \$_prefix,
} ],
'multi-fetch' => [ \&cmd_multi_fetch,
- 'Fetch multiple trees (like git-svnimport)',
- \%fc_opts ],
+ "Deprecated alias for $0 fetch --all",
+ { 'revision|r=s' => \$_revision, %fc_opts } ],
'migrate' => [ sub { },
# no-op, we automatically run this anyways,
'Migrate configuration/metadata/layout from
@@ -226,16 +228,19 @@ sub cmd_init {
}
sub cmd_fetch {
- if (@_) {
- die "Additional fetch arguments are no longer supported.\n",
- "Use --follow-parent if you have moved/copied directories
- instead.\n";
+ if (grep /^\d+=./, @_) {
+ die "'<rev>=<commit>' fetch arguments are ",
+ "no longer supported.\n";
}
- my $gs = Git::SVN->new;
- $gs->fetch(parse_revision_argument());
- if ($gs->{last_commit} && !verify_ref('refs/heads/master^0')) {
- command_noisy(qw(update-ref refs/heads/master),
- $gs->{last_commit});
+ my ($remote) = @_;
+ if (@_ > 1) {
+ die "Usage: $0 fetch [--all|-a] [svn-remote]\n";
+ }
+ $remote ||= $Git::SVN::default_repo_id;
+ if ($_fetch_all) {
+ cmd_multi_fetch();
+ } else {
+ Git::SVN::fetch_all($remote, Git::SVN::read_all_remotes());
}
}
@@ -440,18 +445,6 @@ sub cmd_commit_diff {
########################### utility functions #########################
-sub parse_revision_argument {
- if (!defined $_revision || $_revision eq 'BASE:HEAD') {
- return (undef, undef);
- }
- return ($1, $2) if ($_revision =~ /^(\d+):(\d+)$/);
- return ($_revision, $_revision) if ($_revision =~ /^\d+$/);
- return (undef, $1) if ($_revision =~ /^BASE:(\d+)$/);
- return ($1, undef) if ($_revision =~ /^(\d+):HEAD$/);
- die "revision argument: $_revision not understood by git-svn\n",
- "Try using the command-line svn client instead\n";
-}
-
sub complete_svn_url {
my ($url, $path) = @_;
$path =~ s#/+$##;
@@ -755,6 +748,19 @@ sub resolve_local_globs {
}
}
+sub parse_revision_argument {
+ my ($base, $head) = @_;
+ if (!defined $::_revision || $::_revision eq 'BASE:HEAD') {
+ return ($base, $head);
+ }
+ return ($1, $2) if ($::_revision =~ /^(\d+):(\d+)$/);
+ return ($::_revision, $::_revision) if ($::_revision =~ /^\d+$/);
+ return ($head, $head) if ($::_revision eq 'HEAD');
+ return ($base, $1) if ($::_revision =~ /^BASE:(\d+)$/);
+ return ($1, $head) if ($::_revision =~ /^(\d+):HEAD$/);
+ die "revision argument: $::_revision not understood by git-svn\n";
+}
+
sub fetch_all {
my ($repo_id, $remotes) = @_;
my $remote = $remotes->{$repo_id};
@@ -787,6 +793,8 @@ sub fetch_all {
push @gs, $gs;
}
}
+
+ ($base, $head) = parse_revision_argument($base, $head);
$ra->gs_fetch_loop_common($base, $head, \@gs, \@globs);
}