Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/GitProvider.java2
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CoreText.java3
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/internal/coretext.properties1
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/project/GitProjectData.java41
-rw-r--r--org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/submodules/SubmoduleFolderTest.java20
5 files changed, 64 insertions, 3 deletions
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitProvider.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitProvider.java
index 732e482722..159822994a 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitProvider.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitProvider.java
@@ -66,7 +66,7 @@ public class GitProvider extends RepositoryProvider {
@Override
public void deconfigure() throws CoreException {
try {
- GitProjectData.delete(getProject());
+ GitProjectData.deconfigure(getProject());
} catch (IOException e) {
throw new CoreException(new Status(IStatus.ERROR,
Activator.getPluginId(), e.getMessage(), e));
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CoreText.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CoreText.java
index ddf681d3cc..ad899ffa87 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CoreText.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CoreText.java
@@ -176,6 +176,9 @@ public class CoreText extends NLS {
public static String GitProjectData_failedToCacheRepoMapping;
/** */
+ public static String GitProjectData_failedToUnmapRepoMapping;
+
+ /** */
public static String GitProjectData_FailedToMarkTeamPrivate;
/** */
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/coretext.properties b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/coretext.properties
index 48fc7bc6aa..b4690a89b0 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/coretext.properties
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/coretext.properties
@@ -66,6 +66,7 @@ GitFileHistory_noHeadRevisionAvailable=No HEAD revision available from Git for p
GitProjectData_mappedResourceGone=Remove repository mapping of Git mapped resource for which project or mapped git repository has disappeared: ''{0}''
GitProjectData_failedFindingRepoMapping=Failed finding RepositoryMapping
GitProjectData_failedToCacheRepoMapping=Failed to cache RepositoryMapping
+GitProjectData_failedToUnmapRepoMapping=Failed to unmap {0}
GitProjectData_FailedToMarkTeamPrivate=Failed to mark {0} as team private
GitProjectData_missing=Git team provider configuration has gone missing.
GitProjectData_saveFailed=Saving Git team provider data to {0} failed.
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/project/GitProjectData.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/project/GitProjectData.java
index f337a0e8b4..3deb986aab 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/project/GitProjectData.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/project/GitProjectData.java
@@ -240,6 +240,26 @@ public class GitProjectData {
}
/**
+ * Drop the Eclipse project from our association of projects/repositories
+ * and remove all RepositoryMappings.
+ *
+ * @param p
+ * to deconfigure
+ * @throws IOException
+ * if the property file cannot be removed.
+ */
+ public static void deconfigure(final IProject p) throws IOException {
+ trace("deconfigure(" + p.getName() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+ GitProjectData d = lookup(p);
+ if (d == null) {
+ deletePropertyFiles(p);
+ } else {
+ d.deletePropertyFilesAndUncache();
+ unmap(d);
+ }
+ }
+
+ /**
* Add the Eclipse project to our association of projects/repositories
*
* @param p
@@ -360,6 +380,23 @@ public class GitProjectData {
}
}
+ private static void unmap(GitProjectData data) {
+ for (RepositoryMapping m : data.mappings.values()) {
+ IContainer c = m.getContainer();
+ if (c != null && c.isAccessible()) {
+ try {
+ c.setSessionProperty(MAPPING_KEY, null);
+ // Team private members are re-set in
+ // DisconnectProviderOperation
+ } catch (CoreException e) {
+ Activator.logWarning(MessageFormat.format(
+ CoreText.GitProjectData_failedToUnmapRepoMapping,
+ c.getFullPath()), e);
+ }
+ }
+ }
+ }
+
private synchronized static GitProjectData lookup(final IProject p) {
return projectDataCache.get(p);
}
@@ -628,8 +665,6 @@ public class GitProjectData {
return;
}
- fireRepositoryChanged(m);
-
trace("map " //$NON-NLS-1$
+ c
+ " -> " //$NON-NLS-1$
@@ -641,6 +676,8 @@ public class GitProjectData {
CoreText.GitProjectData_failedToCacheRepoMapping, err);
}
+ fireRepositoryChanged(m);
+
dotGit = c.findMember(Constants.DOT_GIT);
if (dotGit != null) {
protect(dotGit);
diff --git a/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/submodules/SubmoduleFolderTest.java b/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/submodules/SubmoduleFolderTest.java
index ece1f6ab95..9fde54af5e 100644
--- a/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/submodules/SubmoduleFolderTest.java
+++ b/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/submodules/SubmoduleFolderTest.java
@@ -13,6 +13,7 @@ import static org.eclipse.swtbot.eclipse.finder.waits.Conditions.waitForEditor;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
@@ -24,10 +25,12 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.egit.core.Activator;
import org.eclipse.egit.core.JobFamilies;
import org.eclipse.egit.core.internal.indexdiff.IndexDiffCacheEntry;
+import org.eclipse.egit.core.project.GitProjectData;
import org.eclipse.egit.core.project.RepositoryMapping;
import org.eclipse.egit.core.test.TestRepository;
import org.eclipse.egit.ui.common.LocalRepositoryTestCase;
@@ -263,6 +266,23 @@ public class SubmoduleFolderTest extends LocalRepositoryTestCase {
}
@Test
+ public void testDisconnect() throws Exception {
+ SWTBotTree projectExplorerTree = TestUtil.getExplorerTree();
+ getProjectItem(projectExplorerTree, PROJ1).select();
+ String menuString = util
+ .getPluginLocalizedValue("DisconnectAction_label");
+ ContextMenuHelper.clickContextMenuSync(projectExplorerTree, "Team",
+ menuString);
+ ResourcesPlugin.getWorkspace().getRoot()
+ .refreshLocal(IResource.DEPTH_INFINITE, null);
+ // Access the session property directly: RepositoryMapping.getMapping()
+ // checks whether the project is shared with git.
+ Object mapping = childFolder.getSessionProperty(new QualifiedName(
+ GitProjectData.class.getName(), "RepositoryMapping"));
+ assertNull("Should have no RepositoryMapping", mapping);
+ }
+
+ @Test
public void testDecoration() throws Exception {
SWTBotTree projectExplorerTree = TestUtil.getExplorerTree();
SWTBotTreeItem node = TestUtil.navigateTo(projectExplorerTree,

Back to the top