Merge "Respect core.excludesfile to enable global ignore rules "

This commit is contained in:
Shawn Pearce 2011-02-23 18:08:50 -05:00 committed by Code Review
commit 2902c7679b
3 changed files with 38 additions and 3 deletions

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

View File

@ -80,10 +80,14 @@ public static enum AutoCRLF {
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 int getPackIndexVersion() {
public boolean isLogAllRefUpdates() {
return logAllRefUpdates;
}
/**
* @return path of excludesfile
*/
public String getExcludesFile() {
return excludesfile;
}
}

View File

@ -48,6 +48,7 @@
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.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 @@ IgnoreNode load() throws IOException {
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 @@ IgnoreNode load() throws IOException {
in.close();
}
}
return r.getRules().isEmpty() ? null : r;
}
}