aboutsummaryrefslogtreecommitdiff
path: root/git-svn.perl
diff options
context:
space:
mode:
authorVineet Kumar <vineet@doorstop.net>2007-11-19 14:56:15 -0800
committerEric Wong <normalperson@yhbt.net>2007-11-30 23:32:51 -0800
commit2d8797921511b141a6d1b2f74f763f5e9197cc40 (patch)
treea687514a8542e2a1b01d857e2fae0acbd84df579 /git-svn.perl
parent8d7c4fad3ff6b3f675568adab9ddf77e9fcf8b8a (diff)
downloadgit-2d8797921511b141a6d1b2f74f763f5e9197cc40.tar.gz
git-2d8797921511b141a6d1b2f74f763f5e9197cc40.tar.xz
git-svn: add a show-externals command.
show-externals can be used by scripts to provide svn:externals-like functionality. For example, a script can list all of the externals and then use check out the listed URLs at the appropriate paths, similar to what the svn client does. Said script (or perhaps git-svn itself, in the future) could simply invoke svn export on the paths, or it could go one further, using git-svn clone and even git-submodule together to better integrate externals checkouts. The implementation is shamelessly copied from show-ignores. A more general command to list user-specified properties is probably a better idea. Signed-off-by: Vineet Kumar <vineet@doorstop.net> Acked-by: Eric Wong <normalperson@yhbt.net>
Diffstat (limited to 'git-svn.perl')
-rwxr-xr-xgit-svn.perl18
1 files changed, 18 insertions, 0 deletions
diff --git a/git-svn.perl b/git-svn.perl
index af01dac89..8dbaf2f33 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -143,6 +143,9 @@ my %cmd = (
'show-ignore' => [ \&cmd_show_ignore, "Show svn:ignore listings",
{ 'revision|r=i' => \$_revision
} ],
+ 'show-externals' => [ \&cmd_show_externals, "Show svn:externals listings",
+ { 'revision|r=i' => \$_revision
+ } ],
'multi-fetch' => [ \&cmd_multi_fetch,
"Deprecated alias for $0 fetch --all",
{ 'revision|r=s' => \$_revision, %fc_opts } ],
@@ -567,6 +570,21 @@ sub cmd_show_ignore {
});
}
+sub cmd_show_externals {
+ my ($url, $rev, $uuid, $gs) = working_head_info('HEAD');
+ $gs ||= Git::SVN->new;
+ my $r = (defined $_revision ? $_revision : $gs->ra->get_latest_revnum);
+ $gs->prop_walk($gs->{path}, $r, sub {
+ my ($gs, $path, $props) = @_;
+ print STDOUT "\n# $path\n";
+ my $s = $props->{'svn:externals'} or return;
+ $s =~ s/[\r\n]+/\n/g;
+ chomp $s;
+ $s =~ s#^#$path#gm;
+ print STDOUT "$s\n";
+ });
+}
+
sub cmd_create_ignore {
my ($url, $rev, $uuid, $gs) = working_head_info('HEAD');
$gs ||= Git::SVN->new;