Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Rosenberg2009-12-18 23:12:15 +0000
committerRobin Rosenberg2009-12-21 04:32:29 +0000
commit6651b1d087f197c6ddb1553558c1fc07f1dc4c7a (patch)
tree1b1a6d57fc46aa22955355cdfc74acbd3551fefe
parent9fd991fcc6c8cde8eda431cfd8a87fa7ff0637f6 (diff)
downloadegit-6651b1d087f197c6ddb1553558c1fc07f1dc4c7a.tar.gz
egit-6651b1d087f197c6ddb1553558c1fc07f1dc4c7a.tar.xz
egit-6651b1d087f197c6ddb1553558c1fc07f1dc4c7a.zip
Implement GIT_CEILING_DIRECTORIES for Eclipse.
If this environment variable is set it will be interpreted as a list of directories above which the Git Team Provider does not search for repositories. The key here is "search". By explicitly pointing at a repository it can still be used, regardless of where it is located. This feature is mostly useful for testing, but can possibly be used to cut of scans into network directories, which is the original rationale for the implementation in C Git. Change-Id: I0d39eaa63670030b495148a4cf2a57add7185f89 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
-rw-r--r--org.eclipse.egit.core.test/META-INF/MANIFEST.MF3
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/T0003_AdaptableFileTreeIteratorTest.java2
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/Activator.java3
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/GitTestCase.java15
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryFinder.java15
5 files changed, 32 insertions, 6 deletions
diff --git a/org.eclipse.egit.core.test/META-INF/MANIFEST.MF b/org.eclipse.egit.core.test/META-INF/MANIFEST.MF
index 6f47cc8ba3..438bed4f56 100644
--- a/org.eclipse.egit.core.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.egit.core.test/META-INF/MANIFEST.MF
@@ -10,7 +10,8 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.egit.core,
org.eclipse.egit.ui,
org.eclipse.jgit,
- org.eclipse.core.filesystem
+ org.eclipse.core.filesystem,
+ org.eclipse.jgit.junit;bundle-version="0.6.0"
Bundle-ActivationPolicy: lazy
Import-Package: org.eclipse.core.resources,
org.eclipse.jdt.core,
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/T0003_AdaptableFileTreeIteratorTest.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/T0003_AdaptableFileTreeIteratorTest.java
index 3808edbef1..8eface5b66 100644
--- a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/T0003_AdaptableFileTreeIteratorTest.java
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/T0003_AdaptableFileTreeIteratorTest.java
@@ -16,8 +16,6 @@ import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.egit.core.AdaptableFileTreeIterator;
-import org.eclipse.egit.core.ContainerTreeIterator;
import org.eclipse.egit.core.op.ConnectProviderOperation;
import org.eclipse.egit.core.project.RepositoryMapping;
import org.eclipse.egit.core.test.GitTestCase;
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/Activator.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/Activator.java
index e49d527bd2..99e6b52b49 100644
--- a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/Activator.java
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/Activator.java
@@ -9,6 +9,8 @@
package org.eclipse.egit.core.test;
import org.eclipse.core.runtime.Plugin;
+import org.eclipse.jgit.junit.MockSystemReader;
+import org.eclipse.jgit.util.SystemReader;
import org.osgi.framework.BundleContext;
/**
@@ -36,6 +38,7 @@ public class Activator extends Plugin {
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
+ SystemReader.setInstance(new MockSystemReader());
}
/*
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/GitTestCase.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/GitTestCase.java
index 81845f9c16..4ed4bdc324 100644
--- a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/GitTestCase.java
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/GitTestCase.java
@@ -12,11 +12,15 @@ import java.io.File;
import java.io.IOException;
import java.util.Collection;
+import junit.framework.TestCase;
+
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.egit.core.project.RepositoryFinder;
import org.eclipse.egit.core.project.RepositoryMapping;
-
-import junit.framework.TestCase;
+import org.eclipse.jgit.junit.MockSystemReader;
+import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.util.SystemReader;
public abstract class GitTestCase extends TestCase {
@@ -26,6 +30,10 @@ public abstract class GitTestCase extends TestCase {
protected void setUp() throws Exception {
super.setUp();
+ ((MockSystemReader) SystemReader.getInstance()).setProperty(
+ Constants.GIT_CEILING_DIRECTORIES_KEY, ResourcesPlugin
+ .getWorkspace().getRoot().getLocation().toFile()
+ .getAbsoluteFile().toString());
project = new TestProject(true);
checkNotNested();
gitDir = new File(project.getProject().getWorkspace().getRoot()
@@ -61,7 +69,8 @@ public abstract class GitTestCase extends TestCase {
final Collection<RepositoryMapping> parentRepositories = new RepositoryFinder(
project.getProject()).find(null);
final int numOfRepositories = parentRepositories.size();
- assertTrue("parent repository found", numOfRepositories == 0);
+ assertTrue("parent repository found: " + parentRepositories.toString(),
+ numOfRepositories == 0);
}
}
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryFinder.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryFinder.java
index 42305434a8..64d7da8dae 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryFinder.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryFinder.java
@@ -13,6 +13,7 @@ package org.eclipse.egit.core.project;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@@ -26,6 +27,8 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.egit.core.CoreText;
+import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.util.SystemReader;
/**
* Searches for existing Git repositories associated with a project's files.
@@ -53,6 +56,8 @@ public class RepositoryFinder {
private final Collection<RepositoryMapping> results = new ArrayList<RepositoryMapping>();
private final Set<File> gitdirs = new HashSet<File>();
+ private Set<String> ceilingDirectories = new HashSet<String>();
+
/**
* Create a new finder to locate Git repositories for a project.
*
@@ -62,6 +67,12 @@ public class RepositoryFinder {
*/
public RepositoryFinder(final IProject p) {
proj = p;
+ String ceilingDirectoriesVar = SystemReader.getInstance().getenv(
+ Constants.GIT_CEILING_DIRECTORIES_KEY);
+ if (ceilingDirectoriesVar != null) {
+ ceilingDirectories.addAll(Arrays.asList(ceilingDirectoriesVar
+ .split(File.pathSeparator)));
+ }
}
/**
@@ -92,6 +103,7 @@ public class RepositoryFinder {
try {
if (loc != null) {
final File fsLoc = loc.toFile();
+ assert fsLoc.isAbsolute();
final File ownCfg = configFor(fsLoc);
final IResource[] children;
@@ -101,10 +113,13 @@ public class RepositoryFinder {
if (c.isLinked() || c instanceof IProject) {
File p = fsLoc.getParentFile();
while (p != null) {
+ System.out.println("Looking at candidate dir: " + p);
final File pCfg = configFor(p);
if (pCfg.isFile()) {
register(c, pCfg.getParentFile());
}
+ if (ceilingDirectories.contains(p.getPath()))
+ break;
p = p.getParentFile();
}
}

Back to the top