diff options
author | Michael Valenta | 2002-07-03 21:09:56 +0000 |
---|---|---|
committer | Michael Valenta | 2002-07-03 21:09:56 +0000 |
commit | cb2c52f12575c865d00e5ab088e55806c779180b (patch) | |
tree | 77aa512fd048c02d97e21ce682ae4c52e1867561 /bundles/org.eclipse.team.core/src/org/eclipse/team/core/Team.java | |
parent | 7bf99fa512548fa07751f87b1ecb6244b50c6c10 (diff) | |
download | eclipse.platform.team-cb2c52f12575c865d00e5ab088e55806c779180b.tar.gz eclipse.platform.team-cb2c52f12575c865d00e5ab088e55806c779180b.tar.xz eclipse.platform.team-cb2c52f12575c865d00e5ab088e55806c779180b.zip |
21036: RepositoryProvider.project stale if project renamed/moved
Diffstat (limited to 'bundles/org.eclipse.team.core/src/org/eclipse/team/core/Team.java')
-rw-r--r-- | bundles/org.eclipse.team.core/src/org/eclipse/team/core/Team.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/Team.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/Team.java index 6242b9b66..6dcbdf6c8 100644 --- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/Team.java +++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/Team.java @@ -30,7 +30,12 @@ import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceChangeEvent; +import org.eclipse.core.resources.IResourceChangeListener; +import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IStorage; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; @@ -513,6 +518,26 @@ public final class Team { loadTextState(); readIgnoreState(); initializePluginIgnores(); + // Register a delta listener that will tell the provider about a project move + ResourcesPlugin.getWorkspace().addResourceChangeListener(new IResourceChangeListener() { + public void resourceChanged(IResourceChangeEvent event) { + IResourceDelta[] projectDeltas = event.getDelta().getAffectedChildren(); + for (int i = 0; i < projectDeltas.length; i++) { + IResourceDelta delta = projectDeltas[i]; + IResource resource = delta.getResource(); + RepositoryProvider provider = RepositoryProvider.getProvider(resource.getProject()); + // Only consider projects that have a provider + if (provider == null) continue; + // Only consider project additions that are moves + if (delta.getKind() != IResourceDelta.ADDED) continue; + if ((delta.getFlags() & IResourceDelta.MOVED_FROM) == 0) continue; + // Only consider providers whose project is not mapped properly already + if (provider.getProject().equals(resource.getProject())) continue; + // Tell the provider about it's new project + provider.setProject(resource.getProject()); + } + } + }, IResourceChangeEvent.PRE_AUTO_BUILD); } catch (TeamException e) { throw new CoreException(e.getStatus()); } |