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