From: "Tor Arne Vestbø" <torarnv@gmail.com>
To: "Shawn O. Pearce" <spearce@spearce.org>,
Robin Rosenberg <robin.rosenberg@dewire.com>
Cc: git@vger.kernel.org
Subject: [EGIT PATCH 14/12] Allow project decorations regardless of repository root location
Date: Tue, 17 Feb 2009 18:52:42 +0100 [thread overview]
Message-ID: <1234893162-23254-1-git-send-email-torarnv@gmail.com> (raw)
In-Reply-To: <1234893101-23143-1-git-send-email-torarnv@gmail.com>
If the repository root is more than one level above the project
directory we use the AdaptableFileTreeIterator to recurse the
repository tree until we find a directory that can be mapped
to a container in the workspace. The iterator is then adapted to
a ContainerTreeIterator and decorations are applied like usual.
Signed-off-by: Tor Arne Vestbø <torarnv@gmail.com>
---
.../decorators/DecoratableResourceAdapter.java | 39 +++++++++++++-------
1 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/DecoratableResourceAdapter.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/DecoratableResourceAdapter.java
index e2fe54b..5c68d5b 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/DecoratableResourceAdapter.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/DecoratableResourceAdapter.java
@@ -13,15 +13,17 @@
package org.spearce.egit.ui.internal.decorators;
+import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.team.core.Team;
+import org.spearce.egit.core.AdaptableFileTreeIterator;
import org.spearce.egit.core.ContainerTreeIterator;
import org.spearce.egit.core.ContainerTreeIterator.ResourceEntry;
import org.spearce.egit.core.project.RepositoryMapping;
@@ -39,6 +41,7 @@
import org.spearce.jgit.revwalk.RevWalk;
import org.spearce.jgit.treewalk.EmptyTreeIterator;
import org.spearce.jgit.treewalk.TreeWalk;
+import org.spearce.jgit.treewalk.WorkingTreeIterator;
import org.spearce.jgit.treewalk.filter.AndTreeFilter;
import org.spearce.jgit.treewalk.filter.PathFilterGroup;
import org.spearce.jgit.treewalk.filter.TreeFilter;
@@ -210,13 +213,21 @@ public boolean include(TreeWalk treeWalk)
}
private boolean shouldRecurse(TreeWalk treeWalk) {
- final ContainerTreeIterator workspaceIterator = treeWalk.getTree(
- T_WORKSPACE, ContainerTreeIterator.class);
- final ResourceEntry resourceEntry = workspaceIterator != null ? workspaceIterator
- .getResourceEntry()
- : null;
- IResource visitingResource = resourceEntry.getResource();
+ final WorkingTreeIterator workspaceIterator = treeWalk.getTree(
+ T_WORKSPACE, WorkingTreeIterator.class);
+
+ if (workspaceIterator instanceof AdaptableFileTreeIterator)
+ return true;
+
+ ResourceEntry resourceEntry = null;
+ if (workspaceIterator != null)
+ resourceEntry = ((ContainerTreeIterator) workspaceIterator)
+ .getResourceEntry();
+
+ if (resourceEntry == null)
+ return true;
+ IResource visitingResource = resourceEntry.getResource();
if (targetDepth == -1) {
if (visitingResource.equals(resource)
|| visitingResource.getParent().equals(resource))
@@ -319,14 +330,16 @@ private TreeWalk createThreeWayTreeWalk() throws IOException {
// Working directory
IProject project = resource.getProject();
- IWorkspace workspace = resource.getWorkspace();
- if (repository.getWorkDir().equals(project.getLocation().toFile()))
+ IWorkspaceRoot workspaceRoot = resource.getWorkspace().getRoot();
+ File repoRoot = repository.getWorkDir();
+
+ if (repoRoot.equals(project.getLocation().toFile()))
treeWalk.addTree(new ContainerTreeIterator(project));
+ else if (repoRoot.equals(workspaceRoot.getLocation().toFile()))
+ treeWalk.addTree(new ContainerTreeIterator(workspaceRoot));
else
- treeWalk.addTree(new ContainerTreeIterator(workspace.getRoot()));
-
- // TODO: Add fallback for projects with the repository more than
- // one parent up, for example by using a stack of DummyIterators
+ treeWalk.addTree(new AdaptableFileTreeIterator(repoRoot,
+ workspaceRoot));
return treeWalk;
}
--
1.6.1.2.309.g2ea3
prev parent reply other threads:[~2009-02-17 17:53 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-11 18:40 [EGIT PATCH v2 00/12] Support customizable label decorations Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 01/12] Add support code to handle plugin property changes Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 02/12] Use Set instead of array to keep track of change listeners Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 03/12] Add a specialized team exception for Git Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 04/12] Add new class ExceptionCollector for grouping exceptions Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 05/12] Add new class SWTUtils with helper-methods for creating controls Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 06/12] Implement basic customizable label decorations with preferences Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 07/12] Add binding for name of the current branch Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 08/12] Add icon decoration for tracked and untracked resources Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 09/12] Implement icon and text decorations of various resource states Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 10/12] Don't decorate every single resource on repository change Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 11/12] Expose the underlying resource entries in ContainerTreeIterator Tor Arne Vestbø
2009-02-11 18:40 ` [EGIT PATCH v2 12/12] Implement label decorations for folders and projects Tor Arne Vestbø
2009-02-12 0:02 ` Robin Rosenberg
2009-02-11 22:16 ` [EGIT PATCH v2 08/12] Add icon decoration for tracked and untracked resources Robin Rosenberg
2009-02-11 22:46 ` [EGIT PATCH 08/12 v3] " Tor Arne Vestbø
2009-02-16 20:57 ` [EGIT PATCH v2 00/12] Support customizable label decorations Robin Rosenberg
2009-02-16 22:49 ` Tor Arne Vestbø
2009-02-17 5:52 ` Robin Rosenberg
2009-02-17 17:51 ` [EGIT PATCH 13/12] Add new file tree iterator that can adapt into a ContainerTreeIterator Tor Arne Vestbø
2009-02-17 17:52 ` Tor Arne Vestbø [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1234893162-23254-1-git-send-email-torarnv@gmail.com \
--to=torarnv@gmail.com \
--cc=git@vger.kernel.org \
--cc=robin.rosenberg@dewire.com \
--cc=spearce@spearce.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).