contrib/git-svn: add show-ignore command
Recursively finds and lists the svn:ignore property on directories. The output is suitable for appending to the $GIT_DIR/info/exclude file. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
f60d46911d
commit
8f22562c6b
@ -49,6 +49,7 @@ my %cmd = (
|
|||||||
fetch => [ \&fetch, "Download new revisions from SVN" ],
|
fetch => [ \&fetch, "Download new revisions from SVN" ],
|
||||||
init => [ \&init, "Initialize and fetch (import)"],
|
init => [ \&init, "Initialize and fetch (import)"],
|
||||||
commit => [ \&commit, "Commit git revisions to SVN" ],
|
commit => [ \&commit, "Commit git revisions to SVN" ],
|
||||||
|
'show-ignore' => [ \&show_ignore, "Show svn:ignore listings" ],
|
||||||
rebuild => [ \&rebuild, "Rebuild git-svn metadata (after git clone)" ],
|
rebuild => [ \&rebuild, "Rebuild git-svn metadata (after git clone)" ],
|
||||||
help => [ \&usage, "Show help" ],
|
help => [ \&usage, "Show help" ],
|
||||||
);
|
);
|
||||||
@ -258,6 +259,30 @@ sub commit {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub show_ignore {
|
||||||
|
require File::Find or die $!;
|
||||||
|
my $exclude_file = "$GIT_DIR/info/exclude";
|
||||||
|
open my $fh, '<', $exclude_file or croak $!;
|
||||||
|
chomp(my @excludes = (<$fh>));
|
||||||
|
close $fh or croak $!;
|
||||||
|
|
||||||
|
$SVN_URL ||= file_to_s("$GIT_DIR/$GIT_SVN/info/url");
|
||||||
|
chdir $SVN_WC or croak $!;
|
||||||
|
my %ign;
|
||||||
|
File::Find::find({wanted=>sub{if(lstat $_ && -d _ && -d "$_/.svn"){
|
||||||
|
s#^\./##;
|
||||||
|
@{$ign{$_}} = safe_qx(qw(svn propget svn:ignore),$_);
|
||||||
|
}}, no_chdir=>1},'.');
|
||||||
|
|
||||||
|
print "\n# /\n";
|
||||||
|
foreach (@{$ign{'.'}}) { print '/',$_ if /\S/ }
|
||||||
|
delete $ign{'.'};
|
||||||
|
foreach my $i (sort keys %ign) {
|
||||||
|
print "\n# ",$i,"\n";
|
||||||
|
foreach (@{$ign{$i}}) { print '/',$i,'/',$_ if /\S/ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
########################### utility functions #########################
|
########################### utility functions #########################
|
||||||
|
|
||||||
sub setup_git_svn {
|
sub setup_git_svn {
|
||||||
|
@ -61,6 +61,11 @@ rebuild::
|
|||||||
the directory/repository you're tracking has moved or changed
|
the directory/repository you're tracking has moved or changed
|
||||||
protocols.
|
protocols.
|
||||||
|
|
||||||
|
show-ignore::
|
||||||
|
Recursively finds and lists the svn:ignore property on
|
||||||
|
directories. The output is suitable for appending to
|
||||||
|
the $GIT_DIR/info/exclude file.
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
-r <ARG>::
|
-r <ARG>::
|
||||||
@ -152,6 +157,8 @@ Tracking and contributing to an Subversion managed-project:
|
|||||||
git commit git-svn-HEAD..my-branch
|
git commit git-svn-HEAD..my-branch
|
||||||
# Something is committed to SVN, pull the latest into your branch::
|
# Something is committed to SVN, pull the latest into your branch::
|
||||||
git-svn fetch && git pull . git-svn-HEAD
|
git-svn fetch && git pull . git-svn-HEAD
|
||||||
|
# Append svn:ignore settings to the default git exclude file:
|
||||||
|
git-svn show-ignore >> .git/info/exclude
|
||||||
|
|
||||||
DESIGN PHILOSOPHY
|
DESIGN PHILOSOPHY
|
||||||
-----------------
|
-----------------
|
||||||
|
Loading…
Reference in New Issue
Block a user