]> git.ipfire.org Git - thirdparty/git.git/commitdiff
git-svn: use `svn:global-ignores` to create .gitignore
authorAlex Galvin <agalvin@comqi.com>
Thu, 18 Jul 2024 20:47:37 +0000 (20:47 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 18 Jul 2024 22:48:06 +0000 (15:48 -0700)
`svn:global-ignores` contains a list of file patterns that should
not be tracked in version control. The syntax of these patterns is
the same as `svn:ignore`. Their semantics differ: patterns in
`svn:global-ignores` apply to all paths under the directory where
they apply, while `svn:ignore` only applies to the directory's
immediate children.

Signed-off-by: Alex Galvin <agalvin@comqi.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-svn.perl

index b0d0a50984bcea740f9486deda974aa3e53cbe1c..a2a46608c9bdaf130dfedd54307c3bc6e99579d6 100755 (executable)
@@ -1279,12 +1279,20 @@ 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";
+               if (my $s = $props->{'svn:ignore'}) {
+                       $s =~ s/[\r\n]+/\n/g;
+                       $s =~ s/^\n+//;
+                       chomp $s;
+                       $s =~ s#^#$path#gm;
+                       print STDOUT "$s\n";
+               }
+               if (my $s = $props->{'svn:global-ignores'}) {
+                       $s =~ s/[\r\n]+/\n/g;
+                       $s =~ s/^\n+//;
+                       chomp $s;
+                       $s =~ s#^#$path**/#gm;
+                       print STDOUT "$s\n";
+               }
        });
 }
 
@@ -1315,16 +1323,25 @@ 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;
                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 (my $s = $props->{'svn:ignore'}) {
+                       $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 (my $s = $props->{'svn:global-ignores'}) {
+                       $s =~ s/[\r\n]+/\n/g;
+                       $s =~ s/^\n+//;
+                       chomp $s;
+                       # Global ignores apply to sub-directories, so they are
+                       # not prefixed.
+                       print GITIGNORE "$s\n";
+               }
                close(GITIGNORE)
                  or fatal("Failed to close `$ignore': $!");
                command_noisy('add', '-f', $ignore);