]> source.dussan.org Git - jgit.git/commitdiff
Respect core.excludesfile to enable global ignore rules 75/2575/2
authorMatthias Sohn <matthias.sohn@sap.com>
Wed, 23 Feb 2011 22:44:50 +0000 (23:44 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Wed, 23 Feb 2011 22:44:50 +0000 (23:44 +0100)
Also use FS.resolve() to properly resolve files from path strings.

Bug: 328428 (partial fix)
Change-Id: I41d94694f220dcb85605c9acadfffb1fa23beaeb
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/WorkingTreeIterator.java

index ccadf6bfe0f1852216f58e1e954f7a3ff08e4c14..7e4cb3bee2d88e083b47cc632754d804183c596a 100644 (file)
@@ -72,6 +72,9 @@ public class ConfigConstants {
        /** The "bare" key */
        public static final String CONFIG_KEY_BARE = "bare";
 
+       /** The "excludesfile" key */
+       public static final String CONFIG_KEY_EXCLUDESFILE = "excludesfile";
+
        /** The "filemode" key */
        public static final String CONFIG_KEY_FILEMODE = "filemode";
 
index a6da60ffdd1b1e00e2a15e0c16764348455e949c..2d9f44aad83dd8086698ba96bb3fa6cee41779d8 100644 (file)
@@ -80,10 +80,14 @@ public class CoreConfig {
 
        private final boolean logAllRefUpdates;
 
+       private final String excludesfile;
+
        private CoreConfig(final Config rc) {
                compression = rc.getInt("core", "compression", DEFAULT_COMPRESSION);
                packIndexVersion = rc.getInt("pack", "indexversion", 2);
                logAllRefUpdates = rc.getBoolean("core", "logallrefupdates", true);
+               excludesfile = rc.getString(ConfigConstants.CONFIG_CORE_SECTION, null,
+                               ConfigConstants.CONFIG_KEY_EXCLUDESFILE);
        }
 
        /**
@@ -106,4 +110,11 @@ public class CoreConfig {
        public boolean isLogAllRefUpdates() {
                return logAllRefUpdates;
        }
+
+       /**
+        * @return path of excludesfile
+        */
+       public String getExcludesFile() {
+               return excludesfile;
+       }
 }
index e2dd0c773532617cb737a3ca02c9a0ebab4f56c3..d067e9099f7036574556e760bed9d696afa330e3 100644 (file)
@@ -48,6 +48,7 @@ package org.eclipse.jgit.treewalk;
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.ByteBuffer;
@@ -69,8 +70,10 @@ import org.eclipse.jgit.errors.CorruptObjectException;
 import org.eclipse.jgit.ignore.IgnoreNode;
 import org.eclipse.jgit.ignore.IgnoreRule;
 import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.CoreConfig;
 import org.eclipse.jgit.lib.FileMode;
 import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.util.FS;
 import org.eclipse.jgit.util.IO;
 import org.eclipse.jgit.util.io.EolCanonicalizingInputStream;
 
@@ -897,7 +900,27 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator {
                                r = new IgnoreNode();
                        }
 
-                       File exclude = new File(repository.getDirectory(), "info/exclude");
+                       FS fs = repository.getFS();
+                       String path = repository.getConfig().get(CoreConfig.KEY)
+                                       .getExcludesFile();
+                       if (path != null) {
+                               File excludesfile;
+                               if (path.startsWith("~/"))
+                                       excludesfile = fs.resolve(fs.userHome(), path.substring(2));
+                               else
+                                       excludesfile = fs.resolve(null, path);
+                               loadRulesFromFile(r, excludesfile);
+                       }
+
+                       File exclude = fs
+                                       .resolve(repository.getDirectory(), "info/exclude");
+                       loadRulesFromFile(r, exclude);
+
+                       return r.getRules().isEmpty() ? null : r;
+               }
+
+               private void loadRulesFromFile(IgnoreNode r, File exclude)
+                               throws FileNotFoundException, IOException {
                        if (exclude.exists()) {
                                FileInputStream in = new FileInputStream(exclude);
                                try {
@@ -906,8 +929,6 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator {
                                        in.close();
                                }
                        }
-
-                       return r.getRules().isEmpty() ? null : r;
                }
        }