--- Documentation/git-svn.txt | 12 ++++++------ git-svn.perl | 46 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt index 30c5ee2..0c1cd46 100644 --- a/Documentation/git-svn.txt +++ b/Documentation/git-svn.txt @@ -405,14 +405,14 @@ Any other arguments are passed directly to 'git log' independently of 'git svn' functions. 'create-ignore':: - Recursively finds the svn:ignore property on directories and - creates matching .gitignore files. The resulting files are staged to - be committed, but are not committed. Use -r/--revision to refer to a - specific revision. + Recursively finds svn:ignore and svn:global-ignores properties on + directories and creates matching .gitignore files. The resulting + files are staged to be committed, but are not committed. + Use -r/--revision to refer to a specific revision. 'show-ignore':: - Recursively finds and lists the svn:ignore property on - directories. The output is suitable for appending to + Recursively finds and lists svn:ignore and svn:global-ignores + properties on directories. The output is suitable for appending to the $GIT_DIR/info/exclude file. 'mkdirs':: diff --git a/git-svn.perl b/git-svn.perl index 7349ffe..a2565e1 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -1261,6 +1261,15 @@ sub cmd_rebase { } } +sub get_svn_ignore { + my ($props, $prop) = @_; + my $s = $props->{$prop} or return; + $s =~ s/[\r\n]+/\n/g; + $s =~ s/^\n+//; + chomp $s; + return $s; +} + sub cmd_show_ignore { my ($url, $rev, $uuid, $gs) = working_head_info('HEAD'); $gs ||= Git::SVN->new; @@ -1268,12 +1277,17 @@ sub cmd_show_ignore { $gs->prop_walk($gs->path, $r, sub { my ($gs, $path, $props) = @_; print STDOUT "\n# $path\n"; - my $s = $props->{'svn:ignore'} or return; - $s =~ s/[\r\n]+/\n/g; - $s =~ s/^\n+//; - chomp $s; - $s =~ s#^#$path#gm; - print STDOUT "$s\n"; + my $s = &get_svn_ignore($props, 'svn:ignore'); + my $s_global = &get_svn_ignore($props, 'svn:global-ignores'); + $s or $s_global or return; + if ($s) { + $s =~ s#^#$path#gm; + print STDOUT "$s\n"; + } + if ($s_global) { + $s_global =~ s#^#$path**/#gm; + print STDOUT "$s_global\n"; + } }); } @@ -1304,16 +1318,20 @@ sub cmd_create_ignore { # which git won't track mkpath([$path]) unless -d $path; my $ignore = $path . '.gitignore'; - my $s = $props->{'svn:ignore'} or return; + my $s = &get_svn_ignore($props, 'svn:ignore'); + my $s_global = &get_svn_ignore($props, 'svn:global-ignores'); + $s or $s_global or return; open(GITIGNORE, '>', $ignore) or fatal("Failed to open `$ignore' for writing: $!"); - $s =~ s/[\r\n]+/\n/g; - $s =~ s/^\n+//; - chomp $s; - # Prefix all patterns so that the ignore doesn't apply - # to sub-directories. - $s =~ s#^#/#gm; - print GITIGNORE "$s\n"; + if ($s) { + # Prefix all patterns so that the ignore doesn't apply + # to sub-directories. + $s =~ s#^#/#gm; + print GITIGNORE "$s\n"; + } + if ($s_global) { + print GITIGNORE "$s_global\n"; + } close(GITIGNORE) or fatal("Failed to close `$ignore': $!"); command_noisy('add', '-f', $ignore); -- 1.8.3.msysgit.0 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html