git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [EGIT PATCH 0/6] RevObject selection handler
@ 2008-07-10 22:39 Robin Rosenberg
  2008-07-10 22:39 ` [EGIT PATCH 1/6] Create a selection handler for the revision graph Robin Rosenberg
  0 siblings, 1 reply; 10+ messages in thread
From: Robin Rosenberg @ 2008-07-10 22:39 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: git, Marek Zawirski, Robin Rosenberg

This adds a new type of selection handler that connects to the
history view, but could be used in other, yet to be invented
views. It allows us to declare actions using the view and 
object contribution mechanism. And then some uses of that code.

-- robin

Robin Rosenberg (6):
  Create a selection handler for the revision graph.
  Using the page site selection turned out to be cumbersome.
  Adapt Git team operations to non-resouce objects
  Teach the revision selection handler about the active repository
  Create baseclasses for actions and operations on RevObjects
  Add actions in history view to perform reset actions

 .../org/spearce/egit/core/internal/UpdateJob.java  |    2 +
 .../egit/core/op/AssumeUnchangedOperation.java     |    6 +-
 .../egit/core/op/DisconnectProviderOperation.java  |    7 +-
 .../org/spearce/egit/core/op/TrackOperation.java   |    6 +-
 .../org/spearce/egit/core/op/UntrackOperation.java |    6 +-
 org.spearce.egit.ui/plugin.xml                     |   28 ++++++++
 .../internal/actions/AbstractOperationAction.java  |   15 +++--
 .../internal/actions/AbstractRevObjectAction.java  |   26 ++++++++
 .../actions/AbstractRevObjectOperation.java        |   21 ++++++
 .../actions/HardResetToRevisionAction.java         |   26 ++++++++
 .../actions/MixedResetToRevisionAction.java        |   26 ++++++++
 .../actions/SoftResetToRevisionAction.java         |   26 ++++++++
 .../egit/ui/internal/history/GitHistoryPage.java   |   16 ++++-
 .../history/RevObjectSelectionProvider.java        |   67 ++++++++++++++++++++
 14 files changed, 258 insertions(+), 20 deletions(-)
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractRevObjectAction.java
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractRevObjectOperation.java
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/HardResetToRevisionAction.java
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/MixedResetToRevisionAction.java
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/SoftResetToRevisionAction.java
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [EGIT PATCH 1/6] Create a selection handler for the revision graph.
  2008-07-10 22:39 [EGIT PATCH 0/6] RevObject selection handler Robin Rosenberg
@ 2008-07-10 22:39 ` Robin Rosenberg
  2008-07-10 22:39   ` [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome Robin Rosenberg
  0 siblings, 1 reply; 10+ messages in thread
From: Robin Rosenberg @ 2008-07-10 22:39 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: git, Marek Zawirski, Robin Rosenberg

This make it possible to associate content menu contributions
with selections in the history graph.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
 .../egit/ui/internal/history/GitHistoryPage.java   |   11 ++++-
 .../history/RevObjectSelectionProvider.java        |   48 ++++++++++++++++++++
 2 files changed, 57 insertions(+), 2 deletions(-)
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java

diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java
index 9bcae19..6eaa6e4 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java
@@ -181,6 +181,11 @@ public class GitHistoryPage extends HistoryPage {
 	 */
 	private List<String> pathFilters;
 
+	/**
+	 * The selection provider tracks the selected revisions for the context menu
+	 */
+	private RevObjectSelectionProvider revObjectSelectionProvider;
+
 	@Override
 	public void createControl(final Composite parent) {
 		GridData gd;
@@ -211,6 +216,7 @@ public class GitHistoryPage extends HistoryPage {
 		layoutSashForm(graphDetailSplit, SPLIT_GRAPH);
 		layoutSashForm(revInfoSplit, SPLIT_INFO);
 
+		revObjectSelectionProvider = new RevObjectSelectionProvider();
 		popupMgr = new MenuManager(null, POPUP_ID);
 		attachCommitSelectionChanged();
 		createLocalToolbarActions();
@@ -221,7 +227,6 @@ public class GitHistoryPage extends HistoryPage {
 		attachContextMenu(graph.getControl());
 		attachContextMenu(commentViewer.getControl());
 		attachContextMenu(fileViewer.getControl());
-
 		layout();
 	}
 
@@ -229,7 +234,8 @@ public class GitHistoryPage extends HistoryPage {
 		popupMgr.add(new Separator());
 		popupMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
 		getSite().registerContextMenu(POPUP_ID, popupMgr,
-				getSite().getSelectionProvider());
+				revObjectSelectionProvider);
+		getSite().setSelectionProvider(revObjectSelectionProvider);
 	}
 
 	private void attachContextMenu(final Control c) {
@@ -299,6 +305,7 @@ public class GitHistoryPage extends HistoryPage {
 				c = (PlotCommit<?>) sel.getFirstElement();
 				commentViewer.setInput(c);
 				fileViewer.setInput(c);
+				revObjectSelectionProvider.setSelection(s);
 			}
 		});
 		commentViewer
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java
new file mode 100644
index 0000000..c44b229
--- /dev/null
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * See LICENSE for the full license text, also available.
+ *******************************************************************************/
+package org.spearce.egit.ui.internal.history;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+
+/**
+ * A selection provider for Git revision objects
+ */
+public class RevObjectSelectionProvider implements ISelectionProvider {
+
+	private List<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>();
+
+	private ISelection selection;
+
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		listeners.add(listener);
+	}
+
+	public ISelection getSelection() {
+		return selection;
+	}
+
+	public void removeSelectionChangedListener(
+			ISelectionChangedListener listener) {
+		listeners.remove(listener);
+	}
+
+	public void setSelection(ISelection selection) {
+		this.selection = selection;
+		SelectionChangedEvent event = new SelectionChangedEvent(this, selection);
+		for (ISelectionChangedListener l : listeners) {
+			l.selectionChanged(event);
+		}
+	}
+
+}
-- 
1.5.6.2.220.g44701

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome.
  2008-07-10 22:39 ` [EGIT PATCH 1/6] Create a selection handler for the revision graph Robin Rosenberg
@ 2008-07-10 22:39   ` Robin Rosenberg
  2008-07-10 22:39     ` [EGIT PATCH 3/6] Adapt Git team operations to non-resouce objects Robin Rosenberg
  2008-07-11  3:47     ` [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome Shawn O. Pearce
  0 siblings, 2 replies; 10+ messages in thread
From: Robin Rosenberg @ 2008-07-10 22:39 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: git, Marek Zawirski, Robin Rosenberg

So we use the view site instead. I'm not sure that is the proper
way though.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
 org.spearce.egit.ui/plugin.xml                     |   23 ++++++++++++++++++++
 .../egit/ui/internal/history/GitHistoryPage.java   |    3 +-
 2 files changed, 25 insertions(+), 1 deletions(-)

diff --git a/org.spearce.egit.ui/plugin.xml b/org.spearce.egit.ui/plugin.xml
index 611829a..924c6e5 100644
--- a/org.spearce.egit.ui/plugin.xml
+++ b/org.spearce.egit.ui/plugin.xml
@@ -97,6 +97,29 @@
                menubarPath="team.main/group1"
                tooltip="%CommitAction_tooltip"/>
 	  </objectContribution>
+      <objectContribution
+            id="org.spearce.egit.ui.revobjectContributions"
+            adaptable="true"
+            objectClass="org.spearce.jgit.revwalk.RevObject">
+         <action
+               class="org.spearce.egit.ui.internal.actions.BranchAction"
+               id="org.spearce.egit.ui.action1"
+               label="Kolla"
+               enablesFor="*"
+               menubarPath="additions">
+         </action>
+      </objectContribution>
+      <viewerContribution
+            id="org.spearce.egit.ui.viewerContribution1"
+            targetID="org.spearce.egit.ui.historyPageContributions">
+         <action
+               class="org.spearce.egit.ui.internal.actions.ResetAction"
+               id="org.spearce.egit.ui.action1"
+               label="Titta"
+               enablesFor="*"
+               menubarPath="additions">
+         </action>
+      </viewerContribution>
    </extension>
 
    <extension
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java
index 6eaa6e4..d8777ef 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java
@@ -235,7 +235,8 @@ public class GitHistoryPage extends HistoryPage {
 		popupMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
 		getSite().registerContextMenu(POPUP_ID, popupMgr,
 				revObjectSelectionProvider);
-		getSite().setSelectionProvider(revObjectSelectionProvider);
+		getHistoryPageSite().getPart().getSite().setSelectionProvider(
+				revObjectSelectionProvider);
 	}
 
 	private void attachContextMenu(final Control c) {
-- 
1.5.6.2.220.g44701

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [EGIT PATCH 3/6] Adapt Git team operations to non-resouce objects
  2008-07-10 22:39   ` [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome Robin Rosenberg
@ 2008-07-10 22:39     ` Robin Rosenberg
  2008-07-10 22:39       ` [EGIT PATCH 4/6] Teach the revision selection handler about the active repository Robin Rosenberg
  2008-07-11  3:47     ` [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome Shawn O. Pearce
  1 sibling, 1 reply; 10+ messages in thread
From: Robin Rosenberg @ 2008-07-10 22:39 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: git, Marek Zawirski, Robin Rosenberg

Sometimes structures in the workbench, such as in the Project Explorer
in the Java EE perspective, are not represented directly as resources,
but connect to resources. We use the IAdaptable interface to ask for
the underlying resource and the proceed as usual.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
 .../org/spearce/egit/core/internal/UpdateJob.java  |    2 ++
 .../egit/core/op/AssumeUnchangedOperation.java     |    6 +++---
 .../egit/core/op/DisconnectProviderOperation.java  |    7 +++----
 .../org/spearce/egit/core/op/TrackOperation.java   |    6 +++---
 .../org/spearce/egit/core/op/UntrackOperation.java |    6 +++---
 5 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/org.spearce.egit.core/src/org/spearce/egit/core/internal/UpdateJob.java b/org.spearce.egit.core/src/org/spearce/egit/core/internal/UpdateJob.java
index 9641529..be1c591 100644
--- a/org.spearce.egit.core/src/org/spearce/egit/core/internal/UpdateJob.java
+++ b/org.spearce.egit.core/src/org/spearce/egit/core/internal/UpdateJob.java
@@ -21,6 +21,7 @@ import org.eclipse.core.resources.IResourceProxy;
 import org.eclipse.core.resources.IResourceProxyVisitor;
 import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
@@ -65,6 +66,7 @@ public class UpdateJob extends Job {
 				final int[] count=new int[1];
 				long t0=System.currentTimeMillis();
 				for (Object obj : rsrcList) {
+					obj = ((IAdaptable)obj).getAdapter(IResource.class);
 					if (obj instanceof IContainer) {
 						((IContainer)obj).accept(new IResourceProxyVisitor() {
 							public boolean visit(IResourceProxy rp) throws CoreException {
diff --git a/org.spearce.egit.core/src/org/spearce/egit/core/op/AssumeUnchangedOperation.java b/org.spearce.egit.core/src/org/spearce/egit/core/op/AssumeUnchangedOperation.java
index 856ef3f..78a84bb 100644
--- a/org.spearce.egit.core/src/org/spearce/egit/core/op/AssumeUnchangedOperation.java
+++ b/org.spearce.egit.core/src/org/spearce/egit/core/op/AssumeUnchangedOperation.java
@@ -18,6 +18,7 @@ import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.spearce.egit.core.Activator;
@@ -51,9 +52,8 @@ public class AssumeUnchangedOperation implements IWorkspaceRunnable {
 		final IdentityHashMap<RepositoryMapping, Boolean> tomerge = new IdentityHashMap<RepositoryMapping, Boolean>();
 		m.beginTask(CoreText.AssumeUnchangedOperation_adding, rsrcList.size() * 200);
 		try {
-			final Iterator i = rsrcList.iterator();
-			while (i.hasNext()) {
-				final Object obj = i.next();
+			for (Object obj : rsrcList) {
+				obj = ((IAdaptable)obj).getAdapter(IResource.class);
 				if (obj instanceof IResource) {
 					final IResource toAssumeValid = (IResource)obj;
 					final RepositoryMapping rm = RepositoryMapping.getMapping(toAssumeValid);
diff --git a/org.spearce.egit.core/src/org/spearce/egit/core/op/DisconnectProviderOperation.java b/org.spearce.egit.core/src/org/spearce/egit/core/op/DisconnectProviderOperation.java
index 7fde335..b63c69b 100644
--- a/org.spearce.egit.core/src/org/spearce/egit/core/op/DisconnectProviderOperation.java
+++ b/org.spearce.egit.core/src/org/spearce/egit/core/op/DisconnectProviderOperation.java
@@ -8,13 +8,13 @@
 package org.spearce.egit.core.op;
 
 import java.util.Collection;
-import java.util.Iterator;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.SubProgressMonitor;
@@ -51,9 +51,8 @@ public class DisconnectProviderOperation implements IWorkspaceRunnable {
 		m.beginTask(CoreText.DisconnectProviderOperation_disconnecting,
 				projectList.size() * 200);
 		try {
-			final Iterator i = projectList.iterator();
-			while (i.hasNext()) {
-				final Object obj = i.next();
+			for (Object obj : projectList) {
+				obj = ((IAdaptable)obj).getAdapter(IResource.class);
 				if (obj instanceof IProject) {
 					final IProject p = (IProject) obj;
 
diff --git a/org.spearce.egit.core/src/org/spearce/egit/core/op/TrackOperation.java b/org.spearce.egit.core/src/org/spearce/egit/core/op/TrackOperation.java
index af16cdb..29b4344 100644
--- a/org.spearce.egit.core/src/org/spearce/egit/core/op/TrackOperation.java
+++ b/org.spearce.egit.core/src/org/spearce/egit/core/op/TrackOperation.java
@@ -21,6 +21,7 @@ import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.team.core.Team;
@@ -65,9 +66,8 @@ public class TrackOperation implements IWorkspaceRunnable {
 		final IdentityHashMap<RepositoryMapping, Boolean> tomerge = new IdentityHashMap<RepositoryMapping, Boolean>();
 		m.beginTask(CoreText.AddOperation_adding, rsrcList.size() * 200);
 		try {
-			final Iterator i = rsrcList.iterator();
-			while (i.hasNext()) {
-				final Object obj = i.next();
+			for (Object obj : rsrcList) {
+				obj = ((IAdaptable)obj).getAdapter(IResource.class);
 				if (obj instanceof IResource) {
 					final IResource toAdd = (IResource)obj;
 					final RepositoryMapping rm = RepositoryMapping.getMapping(toAdd);
diff --git a/org.spearce.egit.core/src/org/spearce/egit/core/op/UntrackOperation.java b/org.spearce.egit.core/src/org/spearce/egit/core/op/UntrackOperation.java
index fdc9c2e..369ff38 100644
--- a/org.spearce.egit.core/src/org/spearce/egit/core/op/UntrackOperation.java
+++ b/org.spearce.egit.core/src/org/spearce/egit/core/op/UntrackOperation.java
@@ -20,6 +20,7 @@ import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.spearce.egit.core.Activator;
@@ -62,9 +63,8 @@ public class UntrackOperation implements IWorkspaceRunnable {
 		final IdentityHashMap<RepositoryMapping, Boolean> tomerge = new IdentityHashMap<RepositoryMapping, Boolean>();
 		m.beginTask(CoreText.AddOperation_adding, rsrcList.size() * 200);
 		try {
-			final Iterator i = rsrcList.iterator();
-			while (i.hasNext()) {
-				final Object obj = i.next();
+			for (Object obj : rsrcList) {
+				obj = ((IAdaptable)obj).getAdapter(IResource.class);
 				if (obj instanceof IResource) {
 					final IResource toRemove = (IResource)obj;
 					final IProject p = toRemove.getProject();					
-- 
1.5.6.2.220.g44701

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [EGIT PATCH 4/6] Teach the revision selection handler about the active repository
  2008-07-10 22:39     ` [EGIT PATCH 3/6] Adapt Git team operations to non-resouce objects Robin Rosenberg
@ 2008-07-10 22:39       ` Robin Rosenberg
  2008-07-10 22:39         ` [EGIT PATCH 5/6] Create baseclasses for actions and operations on RevObjects Robin Rosenberg
  0 siblings, 1 reply; 10+ messages in thread
From: Robin Rosenberg @ 2008-07-10 22:39 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: git, Marek Zawirski, Robin Rosenberg

The handler needs to know which repository the selected revision was in.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
 .../egit/ui/internal/history/GitHistoryPage.java   |    4 ++++
 .../history/RevObjectSelectionProvider.java        |   19 +++++++++++++++++++
 2 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java
index d8777ef..6b55185 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/GitHistoryPage.java
@@ -503,6 +503,8 @@ public class GitHistoryPage extends HistoryPage {
 
 	@Override
 	public boolean inputSet() {
+		if (revObjectSelectionProvider != null)
+			revObjectSelectionProvider.setActiveRepository(null);
 		cancelRefreshJob();
 
 		if (graph == null)
@@ -589,9 +591,11 @@ public class GitHistoryPage extends HistoryPage {
 		list.source(currentWalk);
 
 		final GenerateHistoryJob rj = new GenerateHistoryJob(this, list);
+		final Repository fdb = db;
 		rj.addJobChangeListener(new JobChangeAdapter() {
 			@Override
 			public void done(final IJobChangeEvent event) {
+				revObjectSelectionProvider.setActiveRepository(fdb);
 				final Control graphctl = graph.getControl();
 				if (job != rj || graphctl.isDisposed())
 					return;
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java
index c44b229..46a091c 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevObjectSelectionProvider.java
@@ -14,6 +14,7 @@ import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.spearce.jgit.lib.Repository;
 
 /**
  * A selection provider for Git revision objects
@@ -24,6 +25,8 @@ public class RevObjectSelectionProvider implements ISelectionProvider {
 
 	private ISelection selection;
 
+	private Repository repository;
+
 	public void addSelectionChangedListener(ISelectionChangedListener listener) {
 		listeners.add(listener);
 	}
@@ -45,4 +48,20 @@ public class RevObjectSelectionProvider implements ISelectionProvider {
 		}
 	}
 
+	/**
+	 * Sets the active repository. This one is called by the view when the view
+	 * is updated with new data.
+	 *
+	 * @param repository
+	 */
+	public void setActiveRepository(Repository repository) {
+		this.repository = repository;
+	}
+
+	/**
+	 * @return currently active repository
+	 */
+	public Repository getActiveRepository() {
+		return repository;
+	}
 }
-- 
1.5.6.2.220.g44701

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [EGIT PATCH 5/6] Create baseclasses for actions and operations on RevObjects
  2008-07-10 22:39       ` [EGIT PATCH 4/6] Teach the revision selection handler about the active repository Robin Rosenberg
@ 2008-07-10 22:39         ` Robin Rosenberg
  2008-07-10 22:39           ` [EGIT PATCH 6/6] Add actions in history view to perform reset actions Robin Rosenberg
  0 siblings, 1 reply; 10+ messages in thread
From: Robin Rosenberg @ 2008-07-10 22:39 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: git, Marek Zawirski, Robin Rosenberg

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
 .../internal/actions/AbstractOperationAction.java  |   15 +++++++----
 .../internal/actions/AbstractRevObjectAction.java  |   26 ++++++++++++++++++++
 .../actions/AbstractRevObjectOperation.java        |   21 ++++++++++++++++
 3 files changed, 57 insertions(+), 5 deletions(-)
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractRevObjectAction.java
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractRevObjectOperation.java

diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractOperationAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractOperationAction.java
index be6d0d5..52f60f5 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractOperationAction.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractOperationAction.java
@@ -32,11 +32,20 @@ import org.spearce.egit.ui.UIText;
  * Common functionality for EGit operations.
  */
 public abstract class AbstractOperationAction implements IObjectActionDelegate {
-	private IWorkbenchPart wp;
+	/**
+	 * The active workbench part
+	 */
+	protected IWorkbenchPart wp;
 
 	private IWorkspaceRunnable op;
 
 	public void selectionChanged(final IAction act, final ISelection sel) {
+		// work performed in setActivePart
+	}
+
+	public void setActivePart(final IAction act, final IWorkbenchPart part) {
+		wp = part;
+		ISelection sel = part.getSite().getPage().getSelection();
 		final List selection;
 		if (sel instanceof IStructuredSelection && !sel.isEmpty()) {
 			selection = ((IStructuredSelection) sel).toList();
@@ -47,10 +56,6 @@ public abstract class AbstractOperationAction implements IObjectActionDelegate {
 		act.setEnabled(op != null && wp != null);
 	}
 
-	public void setActivePart(final IAction act, final IWorkbenchPart part) {
-		wp = part;
-	}
-
 	/**
 	 * Instantiate an operation on an action on provided objects.
 	 *
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractRevObjectAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractRevObjectAction.java
new file mode 100644
index 0000000..b7f4285
--- /dev/null
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractRevObjectAction.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * See LICENSE for the full license text, also available.
+ *******************************************************************************/
+package org.spearce.egit.ui.internal.actions;
+
+import org.spearce.egit.ui.internal.history.RevObjectSelectionProvider;
+import org.spearce.jgit.lib.Repository;
+
+abstract class AbstractRevObjectAction extends AbstractOperationAction {
+
+	/**
+	 * Find out which repository is involved here
+	 *
+	 * @return the Git repository associated with the selected RevObject
+	 */
+	protected Repository getActiveRepository() {
+		RevObjectSelectionProvider selectionProvider = (RevObjectSelectionProvider) wp
+				.getSite().getSelectionProvider();
+		return selectionProvider.getActiveRepository();
+	}
+
+}
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractRevObjectOperation.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractRevObjectOperation.java
new file mode 100644
index 0000000..0c5d570
--- /dev/null
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/AbstractRevObjectOperation.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * See LICENSE for the full license text, also available.
+ *******************************************************************************/
+package org.spearce.egit.ui.internal.actions;
+
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.spearce.jgit.lib.Repository;
+
+abstract class AbstractRevObjectOperation implements IWorkspaceRunnable {
+
+	Repository repository;
+
+	AbstractRevObjectOperation(final Repository repository) {
+		this.repository = repository;
+	}
+
+}
-- 
1.5.6.2.220.g44701

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [EGIT PATCH 6/6] Add actions in history view to perform reset actions
  2008-07-10 22:39         ` [EGIT PATCH 5/6] Create baseclasses for actions and operations on RevObjects Robin Rosenberg
@ 2008-07-10 22:39           ` Robin Rosenberg
  0 siblings, 0 replies; 10+ messages in thread
From: Robin Rosenberg @ 2008-07-10 22:39 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: git, Marek Zawirski, Robin Rosenberg

Soft, mixed and hard reset supported

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
 org.spearce.egit.ui/plugin.xml                     |   43 +++++++++++---------
 .../actions/HardResetToRevisionAction.java         |   26 ++++++++++++
 .../actions/MixedResetToRevisionAction.java        |   26 ++++++++++++
 .../actions/SoftResetToRevisionAction.java         |   26 ++++++++++++
 4 files changed, 102 insertions(+), 19 deletions(-)
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/HardResetToRevisionAction.java
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/MixedResetToRevisionAction.java
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/SoftResetToRevisionAction.java

diff --git a/org.spearce.egit.ui/plugin.xml b/org.spearce.egit.ui/plugin.xml
index 924c6e5..cfd4b80 100644
--- a/org.spearce.egit.ui/plugin.xml
+++ b/org.spearce.egit.ui/plugin.xml
@@ -97,29 +97,34 @@
                menubarPath="team.main/group1"
                tooltip="%CommitAction_tooltip"/>
 	  </objectContribution>
-      <objectContribution
-            id="org.spearce.egit.ui.revobjectContributions"
-            adaptable="true"
-            objectClass="org.spearce.jgit.revwalk.RevObject">
+	  <objectContribution
+         id="org.spearce.egit.ui.resetto"
+         objectClass="org.spearce.jgit.revwalk.RevCommit">
          <action
-               class="org.spearce.egit.ui.internal.actions.BranchAction"
-               id="org.spearce.egit.ui.action1"
-               label="Kolla"
-               enablesFor="*"
-               menubarPath="additions">
+               class="org.spearce.egit.ui.internal.actions.SoftResetToRevisionAction"
+               id="org.spearce.egit.ui.softresettorevision"
+               label="Soft Reset"
+               menubarPath="additions"
+               enablesFor="1"
+               tooltip="Resets HEAD but not working directory nor index">
          </action>
-      </objectContribution>
-      <viewerContribution
-            id="org.spearce.egit.ui.viewerContribution1"
-            targetID="org.spearce.egit.ui.historyPageContributions">
          <action
-               class="org.spearce.egit.ui.internal.actions.ResetAction"
-               id="org.spearce.egit.ui.action1"
-               label="Titta"
-               enablesFor="*"
-               menubarPath="additions">
+               class="org.spearce.egit.ui.internal.actions.MixedResetToRevisionAction"
+               id="org.spearce.egit.ui.mixedresettorevision"
+               label="Mixed Reset"
+               menubarPath="additions"
+               enablesFor="1"
+               tooltip="Resets HEAD and index, but not working directory">
          </action>
-      </viewerContribution>
+         <action
+               class="org.spearce.egit.ui.internal.actions.HardResetToRevisionAction"
+               id="org.spearce.egit.ui.hardresettorevision"
+               label="Hard Reset"
+               menubarPath="additions"
+               enablesFor="1"
+               tooltip="Resets HEAD and index, and working directory (changed in tracked files will be lost)">
+         </action>
+	  </objectContribution>
    </extension>
 
    <extension
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/HardResetToRevisionAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/HardResetToRevisionAction.java
new file mode 100644
index 0000000..78fd87f
--- /dev/null
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/HardResetToRevisionAction.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * See LICENSE for the full license text, also available.
+ *******************************************************************************/
+package org.spearce.egit.ui.internal.actions;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.jface.action.IAction;
+import org.spearce.egit.core.op.ResetOperation;
+
+/**
+ * Hard reset to selected revision
+ */
+public class HardResetToRevisionAction extends AbstractRevObjectAction {
+
+	@Override
+	protected IWorkspaceRunnable createOperation(IAction act, List selection) {
+		return new ResetOperation(getActiveRepository(), selection.get(0)
+				.toString(), ResetOperation.ResetType.HARD);
+	}
+}
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/MixedResetToRevisionAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/MixedResetToRevisionAction.java
new file mode 100644
index 0000000..6e4a9bf
--- /dev/null
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/MixedResetToRevisionAction.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * See LICENSE for the full license text, also available.
+ *******************************************************************************/
+package org.spearce.egit.ui.internal.actions;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.jface.action.IAction;
+import org.spearce.egit.core.op.ResetOperation;
+
+/**
+ * Mixed reset to selected revision
+ */
+public class MixedResetToRevisionAction extends AbstractRevObjectAction {
+
+	@Override
+	protected IWorkspaceRunnable createOperation(IAction act, List selection) {
+		return new ResetOperation(getActiveRepository(), selection.get(0)
+				.toString(), ResetOperation.ResetType.MIXED);
+	}
+}
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/SoftResetToRevisionAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/SoftResetToRevisionAction.java
new file mode 100644
index 0000000..7abbc92
--- /dev/null
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/SoftResetToRevisionAction.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * See LICENSE for the full license text, also available.
+ *******************************************************************************/
+package org.spearce.egit.ui.internal.actions;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.jface.action.IAction;
+import org.spearce.egit.core.op.ResetOperation;
+
+/**
+ * Soft reset to selected revision
+ */
+public class SoftResetToRevisionAction extends AbstractRevObjectAction {
+
+	@Override
+	protected IWorkspaceRunnable createOperation(IAction act, List selection) {
+		return new ResetOperation(getActiveRepository(), selection.get(0)
+				.toString(), ResetOperation.ResetType.SOFT);
+	}
+}
-- 
1.5.6.2.220.g44701

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome.
  2008-07-10 22:39   ` [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome Robin Rosenberg
  2008-07-10 22:39     ` [EGIT PATCH 3/6] Adapt Git team operations to non-resouce objects Robin Rosenberg
@ 2008-07-11  3:47     ` Shawn O. Pearce
  2008-07-11  3:52       ` Shawn O. Pearce
  1 sibling, 1 reply; 10+ messages in thread
From: Shawn O. Pearce @ 2008-07-11  3:47 UTC (permalink / raw)
  To: Robin Rosenberg; +Cc: git, Marek Zawirski

Robin Rosenberg <robin.rosenberg@dewire.com> wrote:
> +         <action
> +               class="org.spearce.egit.ui.internal.actions.BranchAction"
> +               id="org.spearce.egit.ui.action1"
> +               label="Kolla"

What does this label mean?

> +         <action
> +               class="org.spearce.egit.ui.internal.actions.ResetAction"
> +               id="org.spearce.egit.ui.action1"
> +               label="Titta"

Ditto.  You can use i18n translations in plugin.xml by putting these
into a properties file and using %propertyname inside the XML.
So we can prepare translations, but given that all of our source
is documented in English I would prefer the property names to be
the English name if we are going to start supporting translations.

-- 
Shawn.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome.
  2008-07-11  3:47     ` [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome Shawn O. Pearce
@ 2008-07-11  3:52       ` Shawn O. Pearce
  2008-07-11 11:14         ` Johannes Schindelin
  0 siblings, 1 reply; 10+ messages in thread
From: Shawn O. Pearce @ 2008-07-11  3:52 UTC (permalink / raw)
  To: Robin Rosenberg; +Cc: git, Marek Zawirski

"Shawn O. Pearce" <spearce@spearce.org> wrote:
> Robin Rosenberg <robin.rosenberg@dewire.com> wrote:
> > +         <action
> > +               class="org.spearce.egit.ui.internal.actions.BranchAction"
> > +               id="org.spearce.egit.ui.action1"
> > +               label="Kolla"
> 
> What does this label mean?
> 
> > +         <action
> > +               class="org.spearce.egit.ui.internal.actions.ResetAction"
> > +               id="org.spearce.egit.ui.action1"
> > +               label="Titta"
> 
> Ditto.  You can use i18n translations in plugin.xml by putting these
> into a properties file and using %propertyname inside the XML.
> So we can prepare translations, but given that all of our source
> is documented in English I would prefer the property names to be
> the English name if we are going to start supporting translations.

Never mind, I see you fixed this in 6/6.  Don't bother reworking
the series of this minor issue.

-- 
Shawn.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome.
  2008-07-11  3:52       ` Shawn O. Pearce
@ 2008-07-11 11:14         ` Johannes Schindelin
  0 siblings, 0 replies; 10+ messages in thread
From: Johannes Schindelin @ 2008-07-11 11:14 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: Robin Rosenberg, git, Marek Zawirski

Hi,

On Fri, 11 Jul 2008, Shawn O. Pearce wrote:

> "Shawn O. Pearce" <spearce@spearce.org> wrote:
> > Robin Rosenberg <robin.rosenberg@dewire.com> wrote:
> > 
> > > +         <action
> > > +               class="org.spearce.egit.ui.internal.actions.ResetAction"
> > > +               id="org.spearce.egit.ui.action1"
> > > +               label="Titta"

Just in case somebody thought Robin tried to slip in a perverse word: not 
so.  In Swedish, "Titta" means "look!".

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2008-07-11 11:14 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-10 22:39 [EGIT PATCH 0/6] RevObject selection handler Robin Rosenberg
2008-07-10 22:39 ` [EGIT PATCH 1/6] Create a selection handler for the revision graph Robin Rosenberg
2008-07-10 22:39   ` [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome Robin Rosenberg
2008-07-10 22:39     ` [EGIT PATCH 3/6] Adapt Git team operations to non-resouce objects Robin Rosenberg
2008-07-10 22:39       ` [EGIT PATCH 4/6] Teach the revision selection handler about the active repository Robin Rosenberg
2008-07-10 22:39         ` [EGIT PATCH 5/6] Create baseclasses for actions and operations on RevObjects Robin Rosenberg
2008-07-10 22:39           ` [EGIT PATCH 6/6] Add actions in history view to perform reset actions Robin Rosenberg
2008-07-11  3:47     ` [EGIT PATCH 2/6] Using the page site selection turned out to be cumbersome Shawn O. Pearce
2008-07-11  3:52       ` Shawn O. Pearce
2008-07-11 11:14         ` Johannes Schindelin

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).