{"thread":{"id":"7742","subject":"[PATCH 1/3] Drop the non-structured compare","startedAt":"2007-04-19T19:10:37Z","lastAt":"2007-04-20T06:28:14Z","messageCount":4,"participants":["Robin Rosenberg","Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"39914","messageId":"20070419191036.19224.81654.stgit@lathund.dewire.com","threadId":"7742","inReplyTo":null,"subject":"[PATCH 1/3] Drop the non-structured compare","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2007-04-19T19:10:37Z","receivedAt":"2007-04-19T19:10:37Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"\n---\n\n .../src/org/spearce/egit/ui/GitHistoryPage.java    |   11 +----------\n .../internal/actions/GitCompareRevisionAction.java |    2 +-\n 2 files changed, 2 insertions(+), 11 deletions(-)\n\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java\nindex 3057344..bd80324 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java\n@@ -57,7 +57,6 @@ import org.eclipse.team.core.history.IFileHistory;\n import org.eclipse.team.core.history.IFileHistoryProvider;\n import org.eclipse.team.core.history.IFileRevision;\n import org.eclipse.team.internal.ui.TeamUIMessages;\n-import org.eclipse.team.internal.ui.actions.CompareRevisionAction;\n import org.eclipse.team.internal.ui.history.DialogHistoryPageSite;\n import org.eclipse.team.ui.history.HistoryPage;\n import org.eclipse.team.ui.history.IHistoryCompareAdapter;\n@@ -103,10 +102,8 @@ public class GitHistoryPage extends HistoryPage implements IAdaptable,\n \t\tif (parentSite != null && parentSite instanceof DialogHistoryPageSite)\n \t\t\tparentSite.setSelectionProvider(viewer);\n \n-\t\tfinal CompareRevisionAction compareAction = new CompareRevisionAction(\n+\t\tfinal GitCompareRevisionAction compareAction = new GitCompareRevisionAction(\n \t\t\t\t\"Compare\");\n-\t\tfinal GitCompareRevisionAction compareActionNG = new GitCompareRevisionAction(\n-\t\t\t\t\"Compare NG\");\n \t\ttree.addSelectionListener(new SelectionAdapter() {\n \t\t\tpublic void widgetSelected(SelectionEvent e) {\n \t\t\t\t// update the current\n@@ -119,20 +116,14 @@ public class GitHistoryPage extends HistoryPage implements IAdaptable,\n \t\t\t\tcompareAction.setCurrentFileRevision(fileRevisions[0]);\n \t\t\t\tcompareAction.selectionChanged(new StructuredSelection(\n \t\t\t\t\t\tselection2));\n-\n-\t\t\t\tcompareActionNG.setCurrentFileRevision(fileRevisions[0]);\n-\t\t\t\tcompareActionNG.selectionChanged(new StructuredSelection(\n-\t\t\t\t\t\tselection2));\n \t\t\t}\n \t\t});\n \t\tcompareAction.setPage(this);\n-\t\tcompareActionNG.setPage(this);\n \t\tMenuManager menuMgr = new MenuManager();\n \t\tMenu menu = menuMgr.createContextMenu(tree);\n \t\tmenuMgr.addMenuListener(new IMenuListener() {\n \t\t\tpublic void menuAboutToShow(IMenuManager menuMgr) {\n \t\t\t\tmenuMgr.add(compareAction);\n-\t\t\t\tmenuMgr.add(compareActionNG);\n \t\t\t}\n \t\t});\n \t\tmenuMgr.setRemoveAllWhenShown(true);\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/GitCompareRevisionAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/GitCompareRevisionAction.java\nindex 9a0b378..9487197 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/GitCompareRevisionAction.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/GitCompareRevisionAction.java\n@@ -188,7 +188,7 @@ public class GitCompareRevisionAction extends BaseSelectionListenerAction {\n \t\t\treturn shouldShow();\n \t\t}\n \t\telse if (selection.size() == 2){\n-\t\t\tthis.setText(TeamUIMessages.CompareRevisionAction_CompareWithOther+\" NG\");\n+\t\t\tthis.setText(TeamUIMessages.CompareRevisionAction_CompareWithOther);\n \t\t\treturn shouldShow();\n \t\t}\n \n"},{"id":"39915","messageId":"20070419191042.19224.60676.stgit@lathund.dewire.com","threadId":"7742","inReplyTo":"20070419191036.19224.81654.stgit@lathund.dewire.com","subject":"[PATCH 2/3] Add compare with previous action.","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2007-04-19T19:10:42Z","receivedAt":"2007-04-19T19:10:42Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"When only one item is selected, add a compare action for the previous\nversion. \n\nThis solution has a wart, such that when two consequent commits are\nselected the menu shows only a \"Show commit diff\".\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n\n .../src/org/spearce/egit/ui/GitHistoryPage.java    |   32 +++++++++++++++++++++++\n .../internal/actions/GitCompareRevisionAction.java |   15 ++++++++++-\n 2 files changed, 46 insertions(+), 1 deletions(-)\n\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java\nindex bd80324..5655105 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java\n@@ -16,10 +16,12 @@\n  */\n package org.spearce.egit.ui;\n \n+import java.io.IOException;\n import java.util.Date;\n \n import org.eclipse.compare.CompareConfiguration;\n import org.eclipse.compare.structuremergeviewer.ICompareInput;\n+import org.eclipse.core.resources.IProject;\n import org.eclipse.core.resources.IResource;\n import org.eclipse.core.resources.IResourceChangeEvent;\n import org.eclipse.core.resources.IResourceChangeListener;\n@@ -61,8 +63,12 @@ import org.eclipse.team.internal.ui.history.DialogHistoryPageSite;\n import org.eclipse.team.ui.history.HistoryPage;\n import org.eclipse.team.ui.history.IHistoryCompareAdapter;\n import org.eclipse.team.ui.history.IHistoryPageSite;\n+import org.spearce.egit.core.GitProvider;\n import org.spearce.egit.core.internal.mapping.GitFileRevision;\n+import org.spearce.egit.core.project.RepositoryMapping;\n import org.spearce.egit.ui.internal.actions.GitCompareRevisionAction;\n+import org.spearce.jgit.lib.Commit;\n+import org.spearce.jgit.lib.ObjectId;\n \n public class GitHistoryPage extends HistoryPage implements IAdaptable,\n \t\tIHistoryCompareAdapter {\n@@ -104,6 +110,8 @@ public class GitHistoryPage extends HistoryPage implements IAdaptable,\n \n \t\tfinal GitCompareRevisionAction compareAction = new GitCompareRevisionAction(\n \t\t\t\t\"Compare\");\n+\t\tfinal GitCompareRevisionAction compareActionPrev = new GitCompareRevisionAction(\n+\t\t\t\t\"Show commit\");\n \t\ttree.addSelectionListener(new SelectionAdapter() {\n \t\t\tpublic void widgetSelected(SelectionEvent e) {\n \t\t\t\t// update the current\n@@ -116,14 +124,38 @@ public class GitHistoryPage extends HistoryPage implements IAdaptable,\n \t\t\t\tcompareAction.setCurrentFileRevision(fileRevisions[0]);\n \t\t\t\tcompareAction.selectionChanged(new StructuredSelection(\n \t\t\t\t\t\tselection2));\n+\t\t\t\tIProject project = ((IResource) getInput()).getProject();\n+\t\t\t\tGitProvider provider = (GitProvider)RepositoryProvider\n+\t\t\t\t\t\t.getProvider(project);\n+\t\t\t\tRepositoryMapping repositoryMapping = provider.getData().getRepositoryMapping(project);\n+\t\t\t\tObjectId parentId = (ObjectId)((GitFileRevision)selection2[0]).getCommit().getParentIds().get(0);\n+\t\t\t\ttry {\n+\t\t\t\t\tif (selection2.length == 1) {\n+\t\t\t\t\t\tCommit parent = repositoryMapping.getRepository().mapCommit(parentId);\n+\t\t\t\t\t\tIFileRevision previous = new GitFileRevision(parent,\n+\t\t\t\t\t\t\t\t((GitFileRevision)selection2[0]).getResource(),\n+\t\t\t\t\t\t\t\t((GitFileRevision)selection2[0]).getCount()+1);\n+//\t\t\t\t\t\tcompareActionPrev.setCurrentFileRevision(selection2[0]);\n+\t\t\t\t\t\tcompareActionPrev.setCurrentFileRevision(null);\n+\t\t\t\t\t\tcompareActionPrev.selectionChanged(new StructuredSelection(new IFileRevision[] {selection2[0], previous}));\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tcompareActionPrev.setCurrentFileRevision(null);\n+\t\t\t\t\t\tcompareActionPrev.selectionChanged(new StructuredSelection(new IFileRevision[0]));\n+\t\t\t\t\t}\n+\t\t\t\t} catch (IOException e1) {\n+\t\t\t\t\t// TODO Auto-generated catch block\n+\t\t\t\t\te1.printStackTrace();\n+\t\t\t\t}\n \t\t\t}\n \t\t});\n \t\tcompareAction.setPage(this);\n+\t\tcompareActionPrev.setPage(this);\n \t\tMenuManager menuMgr = new MenuManager();\n \t\tMenu menu = menuMgr.createContextMenu(tree);\n \t\tmenuMgr.addMenuListener(new IMenuListener() {\n \t\t\tpublic void menuAboutToShow(IMenuManager menuMgr) {\n \t\t\t\tmenuMgr.add(compareAction);\n+\t\t\t\tmenuMgr.add(compareActionPrev);\n \t\t\t}\n \t\t});\n \t\tmenuMgr.setRemoveAllWhenShown(true);\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/GitCompareRevisionAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/GitCompareRevisionAction.java\nindex 9487197..d5780a5 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/GitCompareRevisionAction.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/GitCompareRevisionAction.java\n@@ -32,8 +32,10 @@ import org.eclipse.ui.IReusableEditor;\n import org.eclipse.ui.IWorkbenchPage;\n import org.eclipse.ui.actions.BaseSelectionListenerAction;\n import org.spearce.egit.core.GitWorkspaceFileRevision;\n+import org.spearce.egit.core.internal.mapping.GitFileRevision;\n import org.spearce.egit.ui.internal.GitCompareFileRevisionEditorInput;\n import org.spearce.egit.ui.internal.GitResourceNode;\n+import org.spearce.jgit.lib.ObjectId;\n \n /**\n  * Action to invoke a Git based compare on selected revivsions in the history window.\n@@ -188,7 +190,18 @@ public class GitCompareRevisionAction extends BaseSelectionListenerAction {\n \t\t\treturn shouldShow();\n \t\t}\n \t\telse if (selection.size() == 2){\n-\t\t\tthis.setText(TeamUIMessages.CompareRevisionAction_CompareWithOther);\n+\t\t\tIFileRevision rev1=(IFileRevision)selection.toArray()[0];\n+\t\t\tIFileRevision rev2=(IFileRevision)selection.toArray()[1];\n+\t\t\tSystem.out.println(\"Compare \"+rev1.getContentIdentifier()+\" with \"+rev2.getContentIdentifier());\n+\t\t\tif (rev1 instanceof GitFileRevision && rev2 instanceof GitFileRevision) {\n+\t\t\t\tObjectId pid = (ObjectId) ((GitFileRevision)rev1).getCommit().getParentIds().get(0);\n+\t\t\t\tif (pid.equals(((GitFileRevision)rev2).getCommit().getCommitId())) {\n+\t\t\t\t\tthis.setText(\"Show commit diff\");\n+\t\t\t\t} else {\n+\t\t\t\t\tthis.setText(TeamUIMessages.CompareRevisionAction_CompareWithOther);\n+\t\t\t\t}\n+\t\t\t} else\n+\t\t\t\tthis.setText(TeamUIMessages.CompareRevisionAction_CompareWithOther);\n \t\t\treturn shouldShow();\n \t\t}\n \n"},{"id":"39916","messageId":"20070419191047.19224.99661.stgit@lathund.dewire.com","threadId":"7742","inReplyTo":"20070419191036.19224.81654.stgit@lathund.dewire.com","subject":"[PATCH 3/3] Show patch name in history view","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2007-04-19T19:10:47Z","receivedAt":"2007-04-19T19:10:47Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"Substitute commit id for patch name if a commit represents a patch state.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n\n .../src/org/spearce/egit/ui/GitHistoryPage.java    |   20 ++++++++++++\n .../src/org/spearce/jgit/lib/Repository.java       |   38 +++++++++++++++++++++++\n 2 files changed, 57 insertions(+), 1 deletions(-)\n\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java\nindex 5655105..c72e1f1 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/GitHistoryPage.java\n@@ -18,6 +18,7 @@ package org.spearce.egit.ui;\n \n import java.io.IOException;\n import java.util.Date;\n+import java.util.Map;\n \n import org.eclipse.compare.CompareConfiguration;\n import org.eclipse.compare.structuremergeviewer.ICompareInput;\n@@ -69,6 +70,7 @@ import org.spearce.egit.core.project.RepositoryMapping;\n import org.spearce.egit.ui.internal.actions.GitCompareRevisionAction;\n import org.spearce.jgit.lib.Commit;\n import org.spearce.jgit.lib.ObjectId;\n+import org.spearce.jgit.lib.Repository.StGitPatch;\n \n public class GitHistoryPage extends HistoryPage implements IAdaptable,\n \t\tIHistoryCompareAdapter {\n@@ -198,6 +200,11 @@ public class GitHistoryPage extends HistoryPage implements IAdaptable,\n \t\t\t\tString rss = ((IFileRevision) element).getURI().toString();\n \t\t\t\tString rs = rss.substring(rss.length()-10);\n \t\t\t\tString id = ((IFileRevision) element).getContentIdentifier();\n+\t\t\t\tif (appliedPatches!=null) {\n+\t\t\t\t\tStGitPatch patch = (StGitPatch) appliedPatches.get(new ObjectId(id));\n+\t\t\t\t\tif (patch!=null)\n+\t\t\t\t\t\treturn patch.getName();\n+\t\t\t\t}\n \t\t\t\tif (id != null)\n \t\t\t\t\tif (id.length() > 9) // make sure \"Workspace\" is spelled out\n \t\t\t\t\t\treturn id.substring(0, 7) + \"..\";\n@@ -280,6 +287,8 @@ public class GitHistoryPage extends HistoryPage implements IAdaptable,\n \t\tviewer.setInput(getInput());\n \t}\n \n+\tprivate Map appliedPatches;\n+\n \tclass GitHistoryContentProvider implements ITreeContentProvider,\n \t\t\tILazyTreeContentProvider {\n \n@@ -288,8 +297,17 @@ public class GitHistoryPage extends HistoryPage implements IAdaptable,\n \t\t\t\treturn;\n \t\t\tSystem.out.println(\"inputChanged(\" + viewer + \",\" + oldInput + \",\"\n \t\t\t\t\t+ newInput);\n+\t\t\tIProject project = ((IResource) getInput()).getProject();\n \t\t\tRepositoryProvider provider = RepositoryProvider\n-\t\t\t\t\t.getProvider(((IResource) getInput()).getProject());\n+\t\t\t\t\t.getProvider(project);\n+\t\t\tRepositoryMapping repositoryMapping = ((GitProvider)provider).getData().getRepositoryMapping(project);\n+\t\t\ttry {\n+\t\t\t\tappliedPatches = null;\n+\t\t\t\tappliedPatches = repositoryMapping.getRepository().getAppliedPatches();\n+\t\t\t} catch (IOException e) {\n+\t\t\t\t// TODO Auto-generated catch block\n+\t\t\t\te.printStackTrace();\n+\t\t\t}\n \t\t\tIFileHistoryProvider fileHistoryProvider = provider\n \t\t\t\t\t.getFileHistoryProvider();\n \t\t\tIFileHistory fileHistoryFor = fileHistoryProvider\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java\nindex 5c31092..501dcc8 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java\n@@ -27,6 +27,7 @@ import java.lang.ref.Reference;\n import java.lang.ref.SoftReference;\n import java.util.ArrayList;\n import java.util.Collection;\n+import java.util.HashMap;\n import java.util.Map;\n import java.util.WeakHashMap;\n \n@@ -477,6 +478,43 @@ public class Repository {\n \t\t}\n \t}\n \n+\tpublic static class StGitPatch {\n+\t\tpublic StGitPatch(String patchName, ObjectId id) {\n+\t\t\tname = patchName;\n+\t\t\tgitId = id;\n+\t\t}\n+\t\tpublic ObjectId getGitId() {\n+\t\t\treturn gitId;\n+\t\t}\n+\t\tpublic String getName() {\n+\t\t\treturn name;\n+\t\t}\n+\t\tprivate String name;\n+\t\tprivate ObjectId gitId;\t\t\n+\t}\n+\n+\t/**\n+\t * @return applied patches in a map indexed on current commit id\n+\t * @throws IOException\n+\t */\n+\tpublic Map getAppliedPatches() throws IOException {\n+\t\tMap ret = new HashMap();\n+\t\tif (isStGitMode()) {\n+\t\t\tFile patchDir = new File(new File(getDirectory(),\"patches\"),getBranch());\n+\t\t\tBufferedReader apr = new BufferedReader(new FileReader(new File(patchDir,\"applied\")));\n+\t\t\tfor (String patchName=apr.readLine(); patchName!=null; patchName=apr.readLine()) {\n+\t\t\t\tFile topFile = new File(new File(new File(patchDir,\"patches\"), patchName), \"top\");\n+\t\t\t\tBufferedReader tfr = new BufferedReader(new FileReader(topFile));\n+\t\t\t\tString objectId = tfr.readLine();\n+\t\t\t\tObjectId id = new ObjectId(objectId);\n+\t\t\t\tret.put(id, new StGitPatch(patchName, id));\n+\t\t\t\ttfr.close();\n+\t\t\t}\n+\t\t\tapr.close();\n+\t\t}\n+\t\treturn ret;\n+\t}\n+\t\n \tprivate Collection listFilesRecursively(File root, File start) {\n \t\tif (start == null)\n \t\t\tstart = root;\n"},{"id":"39943","messageId":"20070420062814.GA8373@spearce.org","threadId":"7742","inReplyTo":"20070419191047.19224.99661.stgit@lathund.dewire.com","subject":"Re: [PATCH 3/3] Show patch name in history view","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2007-04-20T06:28:14Z","receivedAt":"2007-04-20T06:28:14Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Robin Rosenberg <robin.rosenberg@dewire.com> wrote:\n> Substitute commit id for patch name if a commit represents a patch state.\n\nThanks; all 3 are applied and pushed.\n\n-- \nShawn.\n"}]}