diff options
author | Matthias Sohn | 2015-03-29 20:56:35 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2015-03-29 20:56:37 +0000 |
commit | 08ed70b385cd3665d6b81ba5bf2f22c1d7f0fdce (patch) | |
tree | 82b23d2e4c9b014903da756bd225350784ba183a | |
parent | 3765c513838ac9cc9955bec6887bb965262e98e2 (diff) | |
parent | a3da1956ed60fe4ae391ca9074c3238b9b1062ff (diff) | |
download | egit-08ed70b385cd3665d6b81ba5bf2f22c1d7f0fdce.tar.gz egit-08ed70b385cd3665d6b81ba5bf2f22c1d7f0fdce.tar.xz egit-08ed70b385cd3665d6b81ba5bf2f22c1d7f0fdce.zip |
Merge "Avoid TeamException when looking up RepositoryProvider"
8 files changed, 59 insertions, 34 deletions
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java index 34da167cc7..5d457adfe5 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java @@ -192,12 +192,14 @@ public class Activator extends Plugin implements DebugOptionsListener { if (resource instanceof IProject) { IProject project = (IProject) resource; if (project.isAccessible()) { - if (RepositoryProvider.getProvider(project) instanceof GitProvider) { + if (RepositoryProvider.getProvider(project, + GitProvider.ID) != null) { IResource dotGit = project .findMember(Constants.DOT_GIT); - if (dotGit != null - && dotGit.getType() == IResource.FOLDER) + if (dotGit != null && dotGit + .getType() == IResource.FOLDER) { GitProjectData.reconfigureWindowCache(); + } } } else { // bug 419706: project is closed - use java.io API 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 4d7bf06bd8..fcfe3d24ff 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 @@ -201,8 +201,8 @@ public class GitProjectData { public synchronized static GitProjectData get(final IProject p) { try { GitProjectData d = lookup(p); - if (d == null - && RepositoryProvider.getProvider(p) instanceof GitProvider) { + if (d == null && RepositoryProvider.getProvider(p, + GitProvider.ID) != null) { d = new GitProjectData(p).load(); cache(p, d); } diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryMapping.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryMapping.java index 699a31f7fb..8813680910 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryMapping.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/project/RepositoryMapping.java @@ -297,32 +297,45 @@ public class RepositoryMapping { * GitProvider. */ public static RepositoryMapping getMapping(final IResource resource) { - if (isNonWorkspace(resource)) + if (isNonWorkspace(resource)) { return null; - - if (resource.isLinked(IResource.CHECK_ANCESTORS)) + } + if (resource.isLinked(IResource.CHECK_ANCESTORS)) { return getMapping(resource.getLocation()); + } + return getMapping(resource.getProject()); + } - IProject project = resource.getProject(); - if (project == null) + /** + * Get the repository mapping for a project. + * + * @param project + * @return the RepositoryMapping for this project, or null for non + * GitProvider. + */ + public static RepositoryMapping getMapping(final IProject project) { + if (project == null || isNonWorkspace(project)) { return null; - - final RepositoryProvider rp = RepositoryProvider.getProvider(project); - if (!(rp instanceof GitProvider)) + } + final RepositoryProvider rp = RepositoryProvider.getProvider(project, + GitProvider.ID); + if (rp == null) { return null; + } - if (((GitProvider)rp).getData() == null) + GitProjectData data = ((GitProvider) rp).getData(); + if (data == null) { return null; + } - return ((GitProvider)rp).getData().getRepositoryMapping(resource); + return data.getRepositoryMapping(project); } /** * Get the repository mapping for a path if it exists. * * @param path - * @return the RepositoryMapping for this path, - * or null for non GitProvider. + * @return the RepositoryMapping for this path, or null for non GitProvider. */ public static RepositoryMapping getMapping(IPath path) { IProject[] projects = ResourcesPlugin.getWorkspace().getRoot() diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DisconnectActionHandler.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DisconnectActionHandler.java index 02ace0e33f..d6b958fcdc 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DisconnectActionHandler.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DisconnectActionHandler.java @@ -35,12 +35,14 @@ public class DisconnectActionHandler extends RepositoryActionHandler { IProject[] selectedProjects = getProjectsForSelectedResources(); List<IProject> projects = new ArrayList<IProject>(selectedProjects.length); for (IProject project : selectedProjects) { - if (project.isOpen() - && RepositoryProvider.getProvider(project) instanceof GitProvider) + if (project.isOpen() && RepositoryProvider.getProvider(project, + GitProvider.ID) != null) { projects.add(project); + } } - if (projects.isEmpty()) + if (projects.isEmpty()) { return null; + } JobUtil.scheduleUserJob(new DisconnectProviderOperation(projects), UIText.Disconnect_disconnect, JobFamilies.DISCONNECT, new JobChangeAdapter() { diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/branch/BranchProjectTracker.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/branch/BranchProjectTracker.java index bb54a476e4..9a8ef3a552 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/branch/BranchProjectTracker.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/branch/BranchProjectTracker.java @@ -131,16 +131,20 @@ class BranchProjectTracker { final String workDir = repository.getWorkTree().getAbsolutePath(); for (IProject project : projects) { IPath path = project.getLocation(); - if (path == null) + if (path == null) { continue; + } // Only remember mapped projects - if (!(RepositoryProvider.getProvider(project) instanceof GitProvider)) + if (RepositoryProvider.getProvider(project, + GitProvider.ID) == null) { continue; + } String fullPath = path.toOSString(); if (fullPath.startsWith(workDir)) { String relative = fullPath.substring(workDir.length()); - if (relative.length() == 0) + if (relative.length() == 0) { relative = REPO_ROOT; + } IMemento child = memento.createChild(KEY_PROJECT); child.putTextData(relative); } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitDocument.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitDocument.java index 2d1e873a85..15edea0453 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitDocument.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitDocument.java @@ -72,13 +72,15 @@ class GitDocument extends Document implements RefsChangedListener { GitTraceLocation.QUICKDIFF.getLocation(), "(GitDocument) create: " + resource); //$NON-NLS-1$ GitDocument ret = null; - if (RepositoryProvider.getProvider(resource.getProject()) instanceof GitProvider) { + if (RepositoryProvider.getProvider(resource.getProject(), + GitProvider.ID) != null) { ret = new GitDocument(resource); ret.populate(); final Repository repository = ret.getRepository(); - if (repository != null) + if (repository != null) { ret.myRefsChangedHandle = repository.getListenerList() .addRefsChangedListener(ret); + } } return ret; } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java index 7c31e8b6e6..a30a19f58f 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java @@ -36,6 +36,7 @@ import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.egit.core.AdaptableFileTreeIterator; +import org.eclipse.egit.core.GitProvider; import org.eclipse.egit.core.internal.util.ResourceUtil; import org.eclipse.egit.ui.Activator; import org.eclipse.egit.ui.UIPreferences; @@ -1351,12 +1352,13 @@ public class CommitDialog extends TitleAreaDialog { private void compare(CommitItem commitItem) { IFile file = findFile(commitItem.path); - if (file == null - || RepositoryProvider.getProvider(file.getProject()) == null) - CompareUtils - .compareHeadWithWorkingTree(repository, commitItem.path); - else + if (file == null || RepositoryProvider.getProvider(file.getProject(), + GitProvider.ID) == null) { + CompareUtils.compareHeadWithWorkingTree(repository, + commitItem.path); + } else { CompareUtils.compareHeadWithWorkspace(repository, file); + } } private IFile findFile(String path) { diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronize.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronize.java index ba9ab247e8..2bb3685453 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronize.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronize.java @@ -33,6 +33,7 @@ import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.egit.core.AdapterUtils; +import org.eclipse.egit.core.GitProvider; import org.eclipse.egit.core.internal.storage.GitFileRevision; import org.eclipse.egit.core.internal.util.ResourceUtil; import org.eclipse.egit.core.synchronize.GitResourceVariantTreeSubscriber; @@ -59,8 +60,6 @@ import org.eclipse.ui.PlatformUI; */ public class GitModelSynchronize { - private static final String GIT_PROVIDER_ID = "org.eclipse.egit.core.GitProvider"; //$NON-NLS-1$ - /** * This can be used to open the synchronize view for the given set of * resources, comparing the given revisions together. @@ -228,10 +227,11 @@ public class GitModelSynchronize { IProject[] projects = element.getProjects(); for (IProject project: projects) { RepositoryProvider provider = RepositoryProvider - .getProvider(project); + .getProvider(project, GitProvider.ID); - if (provider != null && provider.getID().equals(GIT_PROVIDER_ID)) + if (provider != null) { return true; + } } return false; } |