diff options
author | Kevin Sawicki | 2011-12-30 23:25:16 +0000 |
---|---|---|
committer | Matthias Sohn | 2011-12-30 23:25:16 +0000 |
commit | 4632b349588c8326f4c2532c40831cc46c1d6594 (patch) | |
tree | abb7d43a651f5d0adb21a6da82131f1a1376bfd8 /org.eclipse.egit.ui/src/org/eclipse/egit/ui | |
parent | dcbd60e450bcda52ccf51c723e0e08427927ec0e (diff) | |
download | egit-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')
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 |