Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/RepositoryUtil.java42
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/op/IgnoreOperation.java29
2 files changed, 44 insertions, 27 deletions
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/RepositoryUtil.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/RepositoryUtil.java
index a075ce06c8..bd2b9febd6 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/RepositoryUtil.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/RepositoryUtil.java
@@ -23,12 +23,15 @@ import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.egit.core.project.RepositoryMapping;
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
@@ -40,6 +43,10 @@ import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.storage.file.CheckoutEntry;
import org.eclipse.jgit.storage.file.ReflogEntry;
import org.eclipse.jgit.storage.file.ReflogReader;
+import org.eclipse.jgit.treewalk.FileTreeIterator;
+import org.eclipse.jgit.treewalk.TreeWalk;
+import org.eclipse.jgit.treewalk.WorkingTreeIterator;
+import org.eclipse.jgit.treewalk.filter.PathFilter;
import org.eclipse.jgit.util.FS;
import org.osgi.service.prefs.BackingStoreException;
@@ -463,4 +470,39 @@ public class RepositoryUtil {
walk.release();
}
}
+
+ /**
+ * Checks if resource with given path is to be ignored.
+ *
+ * @param path
+ * Path to be checked
+ * @return true if the path matches an ignore rule or no repository mapping
+ * could be found, false otherwise
+ * @throws IOException
+ * @since 2.3
+ */
+ public static boolean isIgnored(IPath path) throws IOException {
+ RepositoryMapping mapping = RepositoryMapping.getMapping(path);
+ if (mapping == null)
+ return true; // Linked resources may not be mapped
+ Repository repository = mapping.getRepository();
+ String repoRelativePath = mapping.getRepoRelativePath(path);
+ TreeWalk walk = new TreeWalk(repository);
+ try {
+ walk.addTree(new FileTreeIterator(repository));
+ walk.setFilter(PathFilter.create(repoRelativePath));
+ while (walk.next()) {
+ WorkingTreeIterator workingTreeIterator = walk.getTree(0,
+ WorkingTreeIterator.class);
+ if (walk.getPathString().equals(repoRelativePath))
+ return workingTreeIterator.isEntryIgnored();
+ if (workingTreeIterator.getEntryFileMode()
+ .equals(FileMode.TREE))
+ walk.enterSubtree();
+ }
+ } finally {
+ walk.release();
+ }
+ return false;
+ }
}
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/IgnoreOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/IgnoreOperation.java
index 9b64564f0b..1a58189590 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/IgnoreOperation.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/IgnoreOperation.java
@@ -35,15 +35,11 @@ import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.egit.core.Activator;
import org.eclipse.egit.core.CoreText;
+import org.eclipse.egit.core.RepositoryUtil;
import org.eclipse.egit.core.internal.job.RuleUtil;
import org.eclipse.egit.core.project.RepositoryMapping;
import org.eclipse.jgit.lib.Constants;
-import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.treewalk.FileTreeIterator;
-import org.eclipse.jgit.treewalk.TreeWalk;
-import org.eclipse.jgit.treewalk.WorkingTreeIterator;
-import org.eclipse.jgit.treewalk.filter.PathFilter;
import org.eclipse.osgi.util.NLS;
/**
@@ -96,7 +92,7 @@ public class IgnoreOperation implements IEGitOperation {
// NB This does the same thing in
// DecoratableResourceAdapter, but neither currently
// consult .gitignore
- if (!isIgnored(path))
+ if (!RepositoryUtil.isIgnored(path))
addIgnore(monitor, path);
monitor.worked(1);
}
@@ -109,27 +105,6 @@ public class IgnoreOperation implements IEGitOperation {
}
}
- private boolean isIgnored(IPath path) throws IOException {
- RepositoryMapping mapping = RepositoryMapping.getMapping(path);
- if (mapping == null)
- return true; // Linked resources may not be mapped
- Repository repository = mapping.getRepository();
- String repoRelativePath = mapping.getRepoRelativePath(path);
- TreeWalk walk = new TreeWalk(repository);
- walk.addTree(new FileTreeIterator(repository));
- walk.setFilter(PathFilter.create(repoRelativePath));
- while (walk.next()) {
- WorkingTreeIterator workingTreeIterator = walk.getTree(0,
- WorkingTreeIterator.class);
- if (walk.getPathString().equals(repoRelativePath)) {
- return workingTreeIterator.isEntryIgnored();
- }
- if (workingTreeIterator.getEntryFileMode().equals(FileMode.TREE))
- walk.enterSubtree();
- }
- return false;
- }
-
/**
* @return true if a gitignore file outside the workspace was changed. In
* this case the caller may need to perform manual UI refreshes

Back to the top