git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] git-svn: Support svn:global-ignores property

From
Aleksey Vasenev <margtu-fivt@ya.ru>
Date
Nov 21, 2013, 10:41 UTC
Message-ID
<528DE354.1050804@ya.ru>
---
  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
Next: Aleksey Vasenev
Message 1 of 4 in “git-svn: Support svn:global-ignores property”
  1. git-svn: Support svn:global-ignores propertyAleksey Vasenev, Nov 21, 2013
  2. git-svn: Support svn:global-ignores propertyAleksey Vasenev, Nov 21, 2013
  3. Thomas RastNov 24, 2013
  4. Eric WongDec 16, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.