Browse Source

Respect core.excludesfile to enable global ignore rules

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>
stable-0.12
Matthias Sohn 14 years ago
parent
commit
e703b6c640
  1. 3
      org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
  2. 11
      org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java
  3. 27
      org.eclipse.jgit/src/org/eclipse/jgit/treewalk/WorkingTreeIterator.java

3
org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java

@ -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";

11
org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java

@ -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;
}
}

27
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/WorkingTreeIterator.java

@ -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;
}
}

Loading…
Cancel
Save