Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Sawicki2011-12-30 23:25:16 +0000
committerMatthias Sohn2011-12-30 23:25:16 +0000
commit4632b349588c8326f4c2532c40831cc46c1d6594 (patch)
treeabb7d43a651f5d0adb21a6da82131f1a1376bfd8 /org.eclipse.egit.ui/src/org/eclipse/egit/ui
parentdcbd60e450bcda52ccf51c723e0e08427927ec0e (diff)
downloadegit-4632b349588c8326f4c2532c40831cc46c1d6594.tar.gz
egit-4632b349588c8326f4c2532c40831cc46c1d6594.tar.xz
egit-4632b349588c8326f4c2532c40831cc46c1d6594.zip
[repoView] Add node to display submodules
Adds a new submodules node type that displays directly under a repository similar to branches and tags. This node displays a list of all submodules in the given repository. This node will be used for submodule actions such as add, init, update, and sync. Change-Id: I92e24f4a1dd6b036a5d889d07d87eaae82453193 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.egit.ui/src/org/eclipse/egit/ui')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIIcons.java4
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java3
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewContentProvider.java20
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java56
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNode.java6
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNodeType.java9
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/SubmodulesNode.java31
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties1
8 files changed, 122 insertions, 8 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIIcons.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIIcons.java
index e29f73b14a..260565dea1 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIIcons.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIIcons.java
@@ -203,6 +203,9 @@ public class UIIcons {
/** Annotated tag icon */
public final static ImageDescriptor TAG_ANNOTATED;
+ /** Submodules icon */
+ public final static ImageDescriptor SUBMODULES;
+
/** base URL */
public final static URL base;
@@ -275,6 +278,7 @@ public class UIIcons {
MERGE = map("obj16/merge.gif"); //$NON-NLS-1$
TAG_ANNOTATED = map("obj16/annotated-tag.gif"); //$NON-NLS-1$
CREATE_REPOSITORY = map("etool16/createRepository.gif"); //$NON-NLS-1$
+ SUBMODULES = map("obj16/submodules.gif"); //$NON-NLS-1$
}
private static ImageDescriptor map(final String icon) {
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java
index 41eb60b82c..496737537c 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java
@@ -2803,6 +2803,9 @@ public class UIText extends NLS {
public static String RepositoriesViewLabelProvider_RemoteTrackingNodetext;
/** */
+ public static String RepositoriesViewLabelProvider_SubmodulesNodeText;
+
+ /** */
public static String RepositoriesViewLabelProvider_SymbolicRefNodeText;
/** */
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewContentProvider.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewContentProvider.java
index a62b9ca922..672ab573c4 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewContentProvider.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewContentProvider.java
@@ -48,6 +48,7 @@ import org.eclipse.egit.ui.internal.repository.tree.RemoteTrackingNode;
import org.eclipse.egit.ui.internal.repository.tree.RemotesNode;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryNode;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode;
+import org.eclipse.egit.ui.internal.repository.tree.SubmodulesNode;
import org.eclipse.egit.ui.internal.repository.tree.TagNode;
import org.eclipse.egit.ui.internal.repository.tree.TagsNode;
import org.eclipse.egit.ui.internal.repository.tree.WorkingDirNode;
@@ -58,6 +59,7 @@ import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.submodule.SubmoduleWalk;
import org.eclipse.jgit.transport.RemoteConfig;
import org.eclipse.jgit.transport.URIish;
import org.eclipse.ui.PlatformUI;
@@ -297,6 +299,8 @@ public class RepositoriesViewContentProvider implements ITreeContentProvider,
nodeList.add(new AdditionalRefsNode(node, repo));
nodeList.add(new WorkingDirNode(node, repo));
nodeList.add(new RemotesNode(node, repo));
+ if (!repo.isBare())
+ nodeList.add(new SubmodulesNode(node, repo));
return nodeList.toArray();
}
@@ -406,6 +410,20 @@ public class RepositoriesViewContentProvider implements ITreeContentProvider,
}
+ case SUBMODULES:
+ List<RepositoryNode> children = new ArrayList<RepositoryNode>();
+ try {
+ SubmoduleWalk walk = SubmoduleWalk.forIndex(node
+ .getRepository());
+ while (walk.next()) {
+ Repository subRepo = walk.getRepository();
+ if (subRepo != null)
+ children.add(new RepositoryNode(node, subRepo));
+ }
+ } catch (IOException e) {
+ handleException(e, node);
+ }
+ return children.toArray();
case FILE:
// fall through
case REF:
@@ -457,6 +475,8 @@ public class RepositoriesViewContentProvider implements ITreeContentProvider,
return true;
case ADDITIONALREFS:
return true;
+ case SUBMODULES:
+ return true;
case TAGS:
try {
return !repo.getRefDatabase().getRefs(Constants.R_TAGS)
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java
index c6807278c9..60355af40c 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java
@@ -261,6 +261,52 @@ public class RepositoriesViewLabelProvider extends GitLabelProvider implements
}
}
+ /**
+ * Get styled text for submodule repository node
+ *
+ * @param node
+ * @return styled string
+ */
+ protected StyledString getStyledTextForSubmodule(RepositoryTreeNode node) {
+ StyledString string = new StyledString();
+ Repository repository = (Repository) node.getObject();
+ String path = Repository.stripWorkDir(node.getParent().getRepository()
+ .getWorkTree(), repository.getWorkTree());
+ string.append(path);
+
+ Ref head;
+ try {
+ head = repository.getRef(Constants.HEAD);
+ } catch (IOException e) {
+ return string;
+ }
+ if (head != null) {
+ string.append(' ');
+ string.append('[', StyledString.DECORATIONS_STYLER);
+ if (head.isSymbolic())
+ string.append(
+ Repository.shortenRefName(head.getLeaf().getName()),
+ StyledString.DECORATIONS_STYLER);
+ else
+ string.append(head.getObjectId().abbreviate(7).name(),
+ StyledString.DECORATIONS_STYLER);
+ string.append(']', StyledString.DECORATIONS_STYLER);
+ if (verboseBranchMode) {
+ RevWalk walk = new RevWalk(repository);
+ RevCommit commit;
+ try {
+ commit = walk.parseCommit(head.getObjectId());
+ string.append(' ');
+ string.append(commit.getShortMessage(),
+ StyledString.QUALIFIER_STYLER);
+ } catch (IOException ignored) {
+ // Ignored
+ }
+ }
+ }
+ return string;
+ }
+
public StyledString getStyledText(Object element) {
if (!(element instanceof RepositoryTreeNode))
return null;
@@ -270,8 +316,10 @@ public class RepositoriesViewLabelProvider extends GitLabelProvider implements
try {
switch (node.getType()) {
case REPO:
- Repository repository = (Repository) node.getObject();
- return getStyledTextFor(repository);
+ if (node.getParent() != null
+ && node.getParent().getType() == RepositoryTreeNodeType.SUBMODULES)
+ return getStyledTextForSubmodule(node);
+ return getStyledTextFor((Repository) node.getObject());
case ADDITIONALREF:
Ref ref = (Ref) node.getObject();
// shorten the name
@@ -346,6 +394,8 @@ public class RepositoriesViewLabelProvider extends GitLabelProvider implements
// fall through
case REMOTE:
// fall through
+ case SUBMODULES:
+ // fall through
case ERROR: {
String label = getSimpleText(node);
if (label != null)
@@ -385,6 +435,8 @@ public class RepositoriesViewLabelProvider extends GitLabelProvider implements
return UIText.RepositoriesViewLabelProvider_SymbolicRefNodeText;
case REMOTES:
return UIText.RepositoriesView_RemotesNodeText;
+ case SUBMODULES:
+ return UIText.RepositoriesViewLabelProvider_SubmodulesNodeText;
case REF:
// fall through
case TAG: {
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNode.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNode.java
index d2f412b249..4131bbc2cd 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNode.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNode.java
@@ -132,6 +132,8 @@ public abstract class RepositoryTreeNode<T> extends PlatformObject implements Co
// fall through
case ADDITIONALREFS:
// fall through
+ case SUBMODULES:
+ // fall through
case WORKINGDIR:
result = prime
* result
@@ -246,6 +248,8 @@ public abstract class RepositoryTreeNode<T> extends PlatformObject implements Co
// fall through
case ERROR:
// fall through
+ case SUBMODULES:
+ // fall through
case WORKINGDIR:
return 0;
@@ -308,6 +312,8 @@ public abstract class RepositoryTreeNode<T> extends PlatformObject implements Co
// fall through
case ADDITIONALREFS:
// fall through
+ case SUBMODULES:
+ // fall through
case WORKINGDIR:
return ((Repository) myObject).getDirectory().equals(
((Repository) otherObject).getDirectory());
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNodeType.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNodeType.java
index 98fb323b1f..4494971378 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNodeType.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNodeType.java
@@ -58,14 +58,14 @@ public enum RepositoryTreeNodeType {
FETCH(UIIcons.FETCH.createImage()), //
/** */
PUSH(UIIcons.PUSH.createImage()), //
+ /** */
+ SUBMODULES(UIIcons.SUBMODULES.createImage()),
/** */
WORKINGDIR(PlatformUI.getWorkbench().getSharedImages().getImage(
ISharedImages.IMG_OBJ_FOLDER)), //
/** */
ERROR(PlatformUI.getWorkbench().getSharedImages().getImage(
- ISharedImages.IMG_ELCL_STOP)) // TODO icon?
-
- ;
+ ISharedImages.IMG_ELCL_STOP)); // TODO icon?
private final Image myImage;
@@ -80,7 +80,4 @@ public enum RepositoryTreeNodeType {
public Image getIcon() {
return myImage;
}
-
-
-
}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/SubmodulesNode.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/SubmodulesNode.java
new file mode 100644
index 0000000000..e03eebdd11
--- /dev/null
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/SubmodulesNode.java
@@ -0,0 +1,31 @@
+/******************************************************************************
+ * Copyright (c) 2011 GitHub Inc.
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ * Kevin Sawicki (GitHub Inc.) - initial API and implementation
+ *****************************************************************************/
+package org.eclipse.egit.ui.internal.repository.tree;
+
+import org.eclipse.jgit.lib.Repository;
+
+/**
+ * Represents the "Submodules" node
+ */
+public class SubmodulesNode extends RepositoryTreeNode<Repository> {
+
+ /**
+ * Constructs the node.
+ *
+ * @param parent
+ * the parent node (may be null)
+ * @param repository
+ * the {@link Repository}
+ */
+ public SubmodulesNode(RepositoryTreeNode parent, Repository repository) {
+ super(parent, RepositoryTreeNodeType.SUBMODULES, repository, repository);
+ }
+}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties
index 59d69ce2a0..d30c82ad76 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties
@@ -970,6 +970,7 @@ RepositoriesViewContentProvider_ExceptionNodeText=Exception encountered while fe
RepositoriesViewLabelProvider_BareRepositoryMessage=This is a bare repository
RepositoriesViewLabelProvider_LocalNodetext=Local
RepositoriesViewLabelProvider_RemoteTrackingNodetext=Remote Tracking
+RepositoriesViewLabelProvider_SubmodulesNodeText=Submodules
RepositoriesViewLabelProvider_SymbolicRefNodeText=References
RepositoriesViewLabelProvider_TagsNodeText=Tags

Back to the top