From 3705869f0523ac4b1861116159749b4dbd1b879b Mon Sep 17 00:00:00 2001 From: Andre Bossert Date: Wed, 24 Feb 2016 12:31:59 +0100 Subject: Cleaning up the DecoratableResourceAdapter * IDecoratableResource, DecoratableResource etc: added isRepositoryContainer(): returns true if a resource is a repository container, like project, submodule or nested repository working tree root * GitProjectData: renamed hasSubmodules() to hasInnerRepositories() because not just submodules but all "inner" working trees (repositories) are supported Change-Id: Iec23af713554f6370dfd52c1c444cb7f41f465fd Signed-off-by: Andre Bossert --- .../internal/indexdiff/GitResourceDeltaVisitor.java | 7 ++++--- .../org/eclipse/egit/core/project/GitProjectData.java | 11 +++++++---- .../ui/internal/decorators/DecoratableResource.java | 19 +++++++++++++++++++ .../decorators/DecoratableResourceAdapter.java | 14 +++++++++----- .../internal/decorators/GitLightweightDecorator.java | 8 ++++++-- .../ui/internal/decorators/IDecoratableResource.java | 7 +++++++ .../egit/ui/internal/staging/StagingEntry.java | 8 ++++++++ 7 files changed, 60 insertions(+), 14 deletions(-) diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/indexdiff/GitResourceDeltaVisitor.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/indexdiff/GitResourceDeltaVisitor.java index 6bdfa6c6f7..1c655b2b00 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/indexdiff/GitResourceDeltaVisitor.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/indexdiff/GitResourceDeltaVisitor.java @@ -7,8 +7,9 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * * Jens Baumgart - initial implementation in IndexDifCacheEntry - * * Dariusz Luksza - extraction to separate class + * Jens Baumgart - initial implementation in IndexDifCacheEntry + * Dariusz Luksza - extraction to separate class + * Andre Bossert - Cleaning up the DecoratableResourceAdapter *******************************************************************************/ package org.eclipse.egit.core.internal.indexdiff; @@ -86,7 +87,7 @@ public class GitResourceDeltaVisitor implements IResourceDeltaVisitor { return false; } RepositoryMapping mapping = gitData.getRepositoryMapping(resource); - if (mapping == null || !gitData.hasSubmodules() + if (mapping == null || !gitData.hasInnerRepositories() && mapping.getRepository() != repository) { return false; } 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 3deb986aab..5485f91d6b 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 @@ -8,6 +8,9 @@ * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Andre Bossert - Cleaning up the DecoratableResourceAdapter *******************************************************************************/ package org.eclipse.egit.core.project; @@ -484,13 +487,13 @@ public class GitProjectData { } /** - * Determines whether the project this instance belongs to has any - * submodules. + * Determines whether the project this instance belongs to has any inner + * repositories like submodules or nested repositories. * - * @return {@code true} if the project has submodules; {@code false} + * @return {@code true} if the project has inner repositories; {@code false} * otherwise. */ - public boolean hasSubmodules() { + public boolean hasInnerRepositories() { return !protectedResources.isEmpty(); } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResource.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResource.java index f672c088ab..38b9d3228a 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResource.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResource.java @@ -8,6 +8,7 @@ * * Contributors: * Thomas Wolf - Factored out ResourceState + * Andre Bossert - Cleaning up the DecoratableResourceAdapter *******************************************************************************/ package org.eclipse.egit.ui.internal.decorators; @@ -47,6 +48,11 @@ public class DecoratableResource extends ResourceState */ protected String branchStatus = null; + /** + * is resource a repository container ? + */ + protected boolean isRepositoryContainer = false; + /** * Constructs a new decoratable resource * @@ -60,6 +66,14 @@ public class DecoratableResource extends ResourceState this.resource = resource; } + /** + * @param isContainer + * set to true if the resource is a repository container + */ + protected void setIsRepositoryContainer(boolean isContainer) { + isRepositoryContainer = isContainer; + } + @Override public int getType() { return resource != null ? resource.getType() : 0; @@ -90,4 +104,9 @@ public class DecoratableResource extends ResourceState return branchStatus; } + @Override + public boolean isRepositoryContainer() { + return isRepositoryContainer; + } + } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java index ae7d53ee64..d623547a63 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java @@ -13,6 +13,9 @@ * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Andre Bossert - Cleaning up the DecoratableResourceAdapter *******************************************************************************/ package org.eclipse.egit.ui.internal.decorators; @@ -40,7 +43,7 @@ class DecoratableResourceAdapter extends DecoratableResource { if (trace) { GitTraceLocation.getTrace().trace( GitTraceLocation.DECORATION.getLocation(), - "Decorate " + resource.getFullPath()); //$NON-NLS-1$ + "Decorate " + resourceToWrap.getFullPath()); //$NON-NLS-1$ start = System.currentTimeMillis(); } try { @@ -53,6 +56,7 @@ class DecoratableResourceAdapter extends DecoratableResource { if (repository == null) { return; } + setIsRepositoryContainer(resourceToWrap.equals(mapping.getContainer())); IResourceState baseState = ResourceStateFactory.getInstance() .get(indexDiffData, resourceToWrap); setTracked(baseState.isTracked()); @@ -61,10 +65,10 @@ class DecoratableResourceAdapter extends DecoratableResource { setConflicts(baseState.hasConflicts()); setAssumeUnchanged(baseState.isAssumeUnchanged()); setStagingState(baseState.getStagingState()); - if (resource.getType() == IResource.PROJECT - || resource.equals(mapping.getContainer())) { - // We only need this very expensive info for project decoration, - // and for decorating folders that are submodule roots. + if (isRepositoryContainer()) { + // We only need this very expensive info for for decorating + // projects and folders that are submodule or nested repository + // roots repositoryName = DecoratableResourceHelper .getRepositoryName(repository); branch = DecoratableResourceHelper.getShortBranch(repository); diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitLightweightDecorator.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitLightweightDecorator.java index e8d0ed3dba..c0ac55a034 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitLightweightDecorator.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitLightweightDecorator.java @@ -14,6 +14,9 @@ * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Andre Bossert - Cleaning up the DecoratableResourceAdapter *******************************************************************************/ package org.eclipse.egit.ui.internal.decorators; @@ -449,8 +452,9 @@ public class GitLightweightDecorator extends LabelProvider implements break; case IResource.FOLDER: case DecoratableResourceMapping.RESOURCE_MAPPING: - // Use the submodule formatting if it's a submodule root - if (resource.getBranch() != null) { + if (resource.isRepositoryContainer()) { + // Use the submodule formatting if it's a submodule or + // nested repository root format = store.getString( UIPreferences.DECORATOR_SUBMODULETEXT_DECORATION); } else { diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/IDecoratableResource.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/IDecoratableResource.java index 48c18b01cc..53912bd1e9 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/IDecoratableResource.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/IDecoratableResource.java @@ -8,6 +8,7 @@ * * Contributors: * Thomas Wolf - Factored out IResourceState + * Andre Bossert - Cleaning up the DecoratableResourceAdapter *******************************************************************************/ package org.eclipse.egit.ui.internal.decorators; @@ -65,4 +66,10 @@ public interface IDecoratableResource extends IResourceState { */ String getBranchStatus(); + /** + * @return is the resource a repository container, e.g. working tree root or + * project ? + */ + boolean isRepositoryContainer(); + } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntry.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntry.java index 780f2fb4aa..4c6df48366 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntry.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntry.java @@ -8,6 +8,9 @@ * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Andre Bossert - Cleaning up the DecoratableResourceAdapter *******************************************************************************/ package org.eclipse.egit.ui.internal.staging; @@ -354,4 +357,9 @@ public class StagingEntry extends PlatformObject return false; return true; } + + @Override + public boolean isRepositoryContainer() { + return false; + } } -- cgit v1.2.3