Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java79
1 files changed, 72 insertions, 7 deletions
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 41e83e10a6..c8e097b3a7 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
@@ -16,6 +16,8 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
+import org.eclipse.core.commands.IStateListener;
+import org.eclipse.core.commands.State;
import org.eclipse.core.runtime.IPath;
import org.eclipse.egit.core.Activator;
import org.eclipse.egit.ui.UIIcons;
@@ -23,10 +25,11 @@ import org.eclipse.egit.ui.UIText;
import org.eclipse.egit.ui.internal.SWTUtils;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNodeType;
+import org.eclipse.egit.ui.internal.repository.tree.command.ToggleBranchCommitCommand;
import org.eclipse.jface.resource.CompositeImageDescriptor;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StyledString;
-import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectId;
@@ -40,12 +43,14 @@ import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
/**
* Label Provider for the Git Repositories View
*/
public class RepositoriesViewLabelProvider extends LabelProvider implements
- IStyledLabelProvider {
+ IStyledLabelProvider, IStateListener {
/**
* A map of regular images to their decorated counterpart.
@@ -57,6 +62,27 @@ public class RepositoriesViewLabelProvider extends LabelProvider implements
private Image lightweightTagImage = SWTUtils.getDecoratedImage(tagImage,
UIIcons.OVR_LIGHTTAG);
+ private final State verboseBranchModeState;
+
+ private boolean verboseBranchMode = false;
+
+ /**
+ * Constructs a repositories view label provider
+ */
+ public RepositoriesViewLabelProvider() {
+ ICommandService srv = (ICommandService) PlatformUI.getWorkbench()
+ .getService(ICommandService.class);
+ verboseBranchModeState = srv.getCommand(ToggleBranchCommitCommand.ID)
+ .getState(ToggleBranchCommitCommand.TOGGLE_STATE);
+ verboseBranchModeState.addListener(this);
+ try {
+ this.verboseBranchMode = ((Boolean) verboseBranchModeState
+ .getValue()).booleanValue();
+ } catch (Exception e) {
+ Activator.logError(e.getMessage(), e);
+ }
+ }
+
@Override
public Image getImage(Object element) {
RepositoryTreeNode node = (RepositoryTreeNode) element;
@@ -99,6 +125,7 @@ public class RepositoriesViewLabelProvider extends LabelProvider implements
@Override
public void dispose() {
+ verboseBranchModeState.removeListener(this);
// dispose of our decorated images
for (Image image : decoratedImages.values()) {
image.dispose();
@@ -210,6 +237,18 @@ public class RepositoriesViewLabelProvider extends LabelProvider implements
return decoratedImage;
}
+ private RevCommit getLatestCommit(RepositoryTreeNode node) {
+ RevWalk walk = new RevWalk(node.getRepository());
+ walk.setRetainBody(true);
+ try {
+ return walk.parseCommit(((Ref) node.getObject()).getObjectId());
+ } catch (IOException ignored) {
+ return null;
+ } finally {
+ walk.release();
+ }
+ }
+
public StyledString getStyledText(Object element) {
if (!(element instanceof RepositoryTreeNode))
return null;
@@ -269,6 +308,23 @@ public class RepositoriesViewLabelProvider extends LabelProvider implements
.getAbsolutePath(), StyledString.QUALIFIER_STYLER);
}
return dirString;
+
+ case REF:
+ // fall through
+ case TAG:
+ StyledString styled = null;
+ String nodeText = getSimpleText(node);
+ if (nodeText != null) {
+ styled = new StyledString(nodeText);
+ if (verboseBranchMode) {
+ RevCommit latest = getLatestCommit(node);
+ if (latest != null)
+ styled.append(' ' + latest.abbreviate(7).name()
+ + ' ' + latest.getShortMessage(),
+ StyledString.QUALIFIER_STYLER);
+ }
+ }
+ return styled;
case PUSH:
// fall through
case FETCH:
@@ -293,11 +349,7 @@ public class RepositoriesViewLabelProvider extends LabelProvider implements
// fall through
case REMOTE:
// fall through
- case ERROR:
- // fall through
- case REF:
- // fall through
- case TAG: {
+ case ERROR: {
String label = getSimpleText(node);
if (label != null)
return new StyledString(label);
@@ -388,4 +440,17 @@ public class RepositoriesViewLabelProvider extends LabelProvider implements
return null;
}
+ /**
+ * @see org.eclipse.core.commands.IStateListener#handleStateChange(org.eclipse.core.commands.State,
+ * java.lang.Object)
+ */
+ public void handleStateChange(State state, Object oldValue) {
+ try {
+ this.verboseBranchMode = ((Boolean) state.getValue())
+ .booleanValue();
+ } catch (Exception e) {
+ Activator.logError(e.getMessage(), e);
+ }
+ }
+
}

Back to the top