{"thread":{"id":"17071","subject":"[EGIT PATCH 0/3] Show all changes files in the same compare editor","startedAt":"2009-01-10T01:14:34Z","lastAt":"2009-01-12T16:54:35Z","messageCount":6,"participants":["Robin Rosenberg","Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"99835","messageId":"1231550077-1057-1-git-send-email-robin.rosenberg@dewire.com","threadId":"17071","inReplyTo":null,"subject":"[EGIT PATCH 0/3] Show all changes files in the same compare editor","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2009-01-10T01:14:34Z","receivedAt":"2009-01-10T01:14:34Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"Hereby I ressurrect some of the goodness the old compare editor had,\nby enabling it to show all changes in the same compare editor so one\ncan browse back and forth using Ctrl-. and Ctrl-, instead of having\nto click on each changed file.\n\nQuestion: Do we need the filediff viewer AND the compare editor. We\nused to have the compare editor update automaticall when one switched\nrevision in the history pane.\n\n-- robin\n\nRobin Rosenberg (3):\n  Support viewing all changes in a single compare editor\n  Present type of change with file revision in diff viewer\n  Present full name of file revision\n\n .../core/internal/storage/GitFileRevision.java     |    5 +-\n .../ui/internal/history/CommitFileDiffViewer.java  |   40 +++++++--\n .../internal/history/FileDiffContentProvider.java  |   11 ++-\n .../ui/internal/history/FileDiffLabelProvider.java |   49 +++++++++--\n .../spearce/egit/ui/internal/history/RevDiff.java  |   91 ++++++++++++++++++++\n 5 files changed, 179 insertions(+), 17 deletions(-)\n create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java\n"},{"id":"99836","messageId":"1231550077-1057-2-git-send-email-robin.rosenberg@dewire.com","threadId":"17071","inReplyTo":"1231550077-1057-1-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 1/3] Support viewing all changes in a single compare editor","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2009-01-10T01:14:35Z","receivedAt":"2009-01-10T01:14:35Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"Instead of having to click on every file listed as a diff\nan extra diff entry is inserted at the top. Double clicking\non it will launch a compare editor for all changed files.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../ui/internal/history/CommitFileDiffViewer.java  |   40 ++++++++++++--\n .../internal/history/FileDiffContentProvider.java  |   11 +++-\n .../ui/internal/history/FileDiffLabelProvider.java |   49 +++++++++++++++--\n .../spearce/egit/ui/internal/history/RevDiff.java  |   55 ++++++++++++++++++++\n 4 files changed, 141 insertions(+), 14 deletions(-)\n create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java\n\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitFileDiffViewer.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitFileDiffViewer.java\nindex ebec261..7549aa4 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitFileDiffViewer.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitFileDiffViewer.java\n@@ -64,9 +64,17 @@ public void open(final OpenEvent event) {\n \t\t\t\tif (s.isEmpty() || !(s instanceof IStructuredSelection))\n \t\t\t\t\treturn;\n \t\t\t\tfinal IStructuredSelection iss = (IStructuredSelection) s;\n-\t\t\t\tfinal FileDiff d = (FileDiff) iss.getFirstElement();\n-\t\t\t\tif (walker != null && d.blobs.length == 2)\n-\t\t\t\t\tshowTwoWayFileDiff(d);\n+\t\t\t\tif (iss.getFirstElement() instanceof RevDiff)\n+\t\t\t\t\tshowTwoWayDiff((RevDiff)iss.getFirstElement());\n+\t\t\t\telse {\n+\t\t\t\t\tFileDiff d = (FileDiff)iss.getFirstElement();\n+\t\t\t\t\tif (walker != null && d.blobs.length == 2) {\n+\t\t\t\t\t\tif (iss.size() == 1)\n+\t\t\t\t\t\t\tshowTwoWayFileDiff(d);\n+\t\t\t\t\t\telse\n+\t\t\t\t\t\t\tshowTwoWayDiff(iss.toArray());\n+\t\t\t\t\t}\n+\t\t\t\t}\n \t\t\t}\n \t\t});\n \n@@ -98,6 +106,23 @@ void showTwoWayFileDiff(final FileDiff d) {\n \t\tCompareUI.openCompareEditor(in);\n \t}\n \n+\tvoid showTwoWayDiff(RevDiff d) {\n+\t\tfinal GitCompareFileRevisionEditorInput in = new GitCompareFileRevisionEditorInput(d.left, d.right, null);\n+\t\tCompareUI.openCompareEditor(in);\n+\t}\n+\n+\tvoid showTwoWayDiff(final Object[] d) {\n+\t\tFileDiff[] diffs = new FileDiff[d.length];\n+\t\tSystem.arraycopy(d, 0, diffs, 0, d.length);\n+\n+\t\tfinal Repository db = walker.getRepository();\n+\t\tDiffSide base = new DiffSide(diffs, 0, db);\n+\t\tDiffSide next = new DiffSide(diffs, 1, db);\n+\n+\t\tfinal GitCompareFileRevisionEditorInput in = new GitCompareFileRevisionEditorInput(base, next, null);\n+\t\tCompareUI.openCompareEditor(in);\n+\t}\n+\n \tTreeWalk getTreeWalk() {\n \t\treturn walker;\n \t}\n@@ -124,13 +149,16 @@ void doCopy() {\n \t\tif (s.isEmpty() || !(s instanceof IStructuredSelection))\n \t\t\treturn;\n \t\tfinal IStructuredSelection iss = (IStructuredSelection) s;\n-\t\tfinal Iterator<FileDiff> itr = iss.iterator();\n+\t\tfinal Iterator itr = iss.iterator();\n \t\tfinal StringBuilder r = new StringBuilder();\n \t\twhile (itr.hasNext()) {\n-\t\t\tfinal FileDiff d = itr.next();\n+\t\t\tObject o = itr.next();\n \t\t\tif (r.length() > 0)\n \t\t\t\tr.append(\"\\n\");\n-\t\t\tr.append(d.path);\n+\t\t\tif (o instanceof FileDiff)\n+\t\t\t\tr.append(((FileDiff)o).path);\n+\t\t\telse\n+\t\t\t\tr.append(((RevDiff)o).left.getChildren().length + \" files\");\n \t\t}\n \n \t\tclipboard.setContents(new Object[] { r.toString() },\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffContentProvider.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffContentProvider.java\nindex c84e9f3..25e7714 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffContentProvider.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffContentProvider.java\n@@ -20,7 +20,7 @@\n \n \tprivate RevCommit commit;\n \n-\tprivate FileDiff[] diff;\n+\tprivate Object[] diff;\n \n \tpublic void inputChanged(final Viewer newViewer, final Object oldInput,\n \t\t\tfinal Object newInput) {\n@@ -32,7 +32,14 @@ public void inputChanged(final Viewer newViewer, final Object oldInput,\n \tpublic Object[] getElements(final Object inputElement) {\n \t\tif (diff == null && walk != null && commit != null) {\n \t\t\ttry {\n-\t\t\t\tdiff = FileDiff.compute(walk, commit);\n+\t\t\t\tFileDiff[] fdiff = FileDiff.compute(walk, commit);\n+\t\t\t\tif (fdiff.length <= 1) {\n+\t\t\t\t\tdiff = fdiff;\n+\t\t\t\t} else {\n+\t\t\t\t\tdiff = new Object[fdiff.length + 1];\n+\t\t\t\t\tdiff[0] = new RevDiff(fdiff, walk.getRepository());\n+\t\t\t\t\tSystem.arraycopy(fdiff, 0, diff, 1, fdiff.length);\n+\t\t\t\t}\n \t\t\t} catch (IOException err) {\n \t\t\t\tActivator.error(\"Can't get file difference of \"\n \t\t\t\t\t\t+ commit.getId() + \".\", err);\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffLabelProvider.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffLabelProvider.java\nindex 60b3a5a..c78ba6e 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffLabelProvider.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffLabelProvider.java\n@@ -14,12 +14,49 @@\n class FileDiffLabelProvider extends BaseLabelProvider implements\n \t\tITableLabelProvider {\n \tpublic String getColumnText(final Object element, final int columnIndex) {\n-\t\tfinal FileDiff c = (FileDiff) element;\n-\t\tswitch (columnIndex) {\n-\t\tcase 0:\n-\t\t\treturn c.change;\n-\t\tcase 1:\n-\t\t\treturn c.path;\n+\t\tif (element instanceof FileDiff) {\n+\t\t\tfinal FileDiff c = (FileDiff) element;\n+\t\t\tswitch (columnIndex) {\n+\t\t\tcase 0:\n+\t\t\t\treturn c.change;\n+\t\t\tcase 1:\n+\t\t\t\treturn c.path;\n+\t\t\t}\n+\t\t} else {\n+\t\t\tfinal RevDiff c = (RevDiff) element;\n+\t\t\tswitch (columnIndex) {\n+\t\t\tcase 0:\n+\t\t\t\treturn \"\\u03a3\";\n+\t\t\tcase 1:\n+\t\t\t\t{\n+\t\t\t\t\tint mod = 0;\n+\t\t\t\t\tint add = 0;\n+\t\t\t\t\tint del = 0;\n+\t\t\t\t\tfor (int i = 0; i < c.left.fileDiffs.length; ++i) {\n+\t\t\t\t\t\tif (c.left.fileDiffs[i].change.equals(\"A\"))\n+\t\t\t\t\t\t\tadd++;\n+\t\t\t\t\t\tif (c.left.fileDiffs[i].change.equals(\"M\"))\n+\t\t\t\t\t\t\tmod++;\n+\t\t\t\t\t\tif (c.left.fileDiffs[i].change.equals(\"D\"))\n+\t\t\t\t\t\t\tdel++;\n+\t\t\t\t\t}\n+\t\t\t\t\tStringBuilder b = new StringBuilder();\n+\t\t\t\t\tif (add > 0) {\n+\t\t\t\t\t\tb.append(add + \" added\");\n+\t\t\t\t\t}\n+\t\t\t\t\tif (mod > 0) {\n+\t\t\t\t\t\tif (b.length() > 0)\n+\t\t\t\t\t\t\tb.append(\", \");\n+\t\t\t\t\t\tb.append(mod + \" changed\");\n+\t\t\t\t\t}\n+\t\t\t\t\tif (del > 0) {\n+\t\t\t\t\t\tif (b.length() > 0)\n+\t\t\t\t\t\t\tb.append(\", \");\n+\t\t\t\t\t\tb.append(del + \" deleted\");\n+\t\t\t\t\t}\n+\t\t\t\t\treturn b.toString();\n+\t\t\t\t}\n+\t\t\t}\n \t\t}\n \t\treturn \"\";\n \t}\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java\nnew file mode 100644\nindex 0000000..020ec73\n--- /dev/null\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java\n@@ -0,0 +1,55 @@\n+package org.spearce.egit.ui.internal.history;\n+\n+import org.eclipse.compare.ITypedElement;\n+import org.eclipse.compare.structuremergeviewer.IStructureComparator;\n+import org.eclipse.swt.graphics.Image;\n+import org.eclipse.team.internal.ui.history.FileRevisionTypedElement;\n+import org.spearce.egit.core.internal.storage.GitFileRevision;\n+import org.spearce.jgit.lib.Repository;\n+\n+class RevDiff {\n+\tDiffSide left;\n+\n+\tDiffSide right;\n+\n+\tRevDiff(FileDiff[] fileDiffs, Repository db) {\n+\t\tleft = new DiffSide(fileDiffs, 0, db);\n+\t\tright = new DiffSide(fileDiffs, 1, db);\n+\t}\n+}\n+\n+class DiffSide implements ITypedElement, IStructureComparator {\n+\tfinal FileDiff[] fileDiffs;\n+\n+\tprivate final int side;\n+\n+\tprivate final Repository db;\n+\n+\tDiffSide(FileDiff[] fileDiffs, int side, Repository db) {\n+\t\tthis.fileDiffs = fileDiffs;\n+\t\tthis.side = side;\n+\t\tthis.db = db;\n+\t}\n+\n+\tpublic Image getImage() {\n+\t\treturn null;\n+\t}\n+\n+\tpublic String getName() {\n+\t\treturn \"EGit diff\";\n+\t}\n+\n+\tpublic String getType() {\n+\t\treturn FOLDER_TYPE;\n+\t}\n+\n+\tpublic Object[] getChildren() {\n+\t\tFileRevisionTypedElement[] ret = new FileRevisionTypedElement[fileDiffs.length];\n+\t\tfor (int i = 0; i < ret.length; ++i) {\n+\t\t\tret[i] = new FileRevisionTypedElement(GitFileRevision.inCommit(db,\n+\t\t\t\t\tfileDiffs[i].commit, fileDiffs[i].path,\n+\t\t\t\t\tfileDiffs[i].blobs[side]));\n+\t\t}\n+\t\treturn ret;\n+\t}\n+}\n-- \n1.6.1.rc3.56.gd0306\n"},{"id":"99837","messageId":"1231550077-1057-3-git-send-email-robin.rosenberg@dewire.com","threadId":"17071","inReplyTo":"1231550077-1057-2-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 2/3] Present type of change with file revision in diff viewer","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2009-01-10T01:14:36Z","receivedAt":"2009-01-10T01:14:36Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../spearce/egit/ui/internal/history/RevDiff.java  |   40 +++++++++++++++++++-\n 1 files changed, 38 insertions(+), 2 deletions(-)\n\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java\nindex 020ec73..084da3b 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java\n@@ -2,9 +2,13 @@\n \n import org.eclipse.compare.ITypedElement;\n import org.eclipse.compare.structuremergeviewer.IStructureComparator;\n+import org.eclipse.jface.resource.ImageDescriptor;\n+import org.eclipse.jface.viewers.DecorationOverlayIcon;\n+import org.eclipse.jface.viewers.IDecoration;\n import org.eclipse.swt.graphics.Image;\n import org.eclipse.team.internal.ui.history.FileRevisionTypedElement;\n import org.spearce.egit.core.internal.storage.GitFileRevision;\n+import org.spearce.egit.ui.UIIcons;\n import org.spearce.jgit.lib.Repository;\n \n class RevDiff {\n@@ -46,9 +50,41 @@ public String getType() {\n \tpublic Object[] getChildren() {\n \t\tFileRevisionTypedElement[] ret = new FileRevisionTypedElement[fileDiffs.length];\n \t\tfor (int i = 0; i < ret.length; ++i) {\n+\t\t\tfinal FileDiff d = fileDiffs[i];\n \t\t\tret[i] = new FileRevisionTypedElement(GitFileRevision.inCommit(db,\n-\t\t\t\t\tfileDiffs[i].commit, fileDiffs[i].path,\n-\t\t\t\t\tfileDiffs[i].blobs[side]));\n+\t\t\t\t\td.commit, d.path, d.blobs[side])) {\n+\t\t\t\tprivate Image image;\n+\n+\t\t\t\t@Override\n+\t\t\t\tprotected void finalize() throws Throwable {\n+\t\t\t\t\tif (image != null)\n+\t\t\t\t\t\timage.dispose();\n+\t\t\t\t}\n+\n+\t\t\t\t@Override\n+\t\t\t\tpublic Image getImage() {\n+\t\t\t\t\tif (image == null) {\n+\t\t\t\t\t\tImageDescriptor overlay;\n+\t\t\t\t\t\tswitch (d.change.charAt(0)) {\n+\t\t\t\t\t\tcase 'A':\n+\t\t\t\t\t\t\toverlay = UIIcons.OVR_PENDING_ADD;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'M':\n+\t\t\t\t\t\t\toverlay = UIIcons.OVR_SHARED;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'D':\n+\t\t\t\t\t\t\toverlay = UIIcons.OVR_PENDING_REMOVE;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\treturn super.getImage(); // Should not happen...\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\timage = new DecorationOverlayIcon(super.getImage(),\n+\t\t\t\t\t\t\t\toverlay, IDecoration.BOTTOM_RIGHT)\n+\t\t\t\t\t\t\t\t.createImage();\n+\t\t\t\t\t}\n+\t\t\t\t\treturn image;\n+\t\t\t\t}\n+\t\t\t};\n \t\t}\n \t\treturn ret;\n \t}\n-- \n1.6.1.rc3.56.gd0306\n"},{"id":"99838","messageId":"1231550077-1057-4-git-send-email-robin.rosenberg@dewire.com","threadId":"17071","inReplyTo":"1231550077-1057-3-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 3/3] Present full name of file revision","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2009-01-10T01:14:37Z","receivedAt":"2009-01-10T01:14:37Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"The name need not be a path.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../core/internal/storage/GitFileRevision.java     |    5 ++---\n 1 files changed, 2 insertions(+), 3 deletions(-)\n\ndiff --git a/org.spearce.egit.core/src/org/spearce/egit/core/internal/storage/GitFileRevision.java b/org.spearce.egit.core/src/org/spearce/egit/core/internal/storage/GitFileRevision.java\nindex 21ba19e..c762e2e 100644\n--- a/org.spearce.egit.core/src/org/spearce/egit/core/internal/storage/GitFileRevision.java\n+++ b/org.spearce.egit.core/src/org/spearce/egit/core/internal/storage/GitFileRevision.java\n@@ -32,7 +32,7 @@\n \n \t/**\n \t * Obtain a file revision for a specific blob of an existing commit.\n-\t * \n+\t *\n \t * @param db\n \t *            the repository this commit was loaded out of, and that this\n \t *            file's blob should also be reachable through.\n@@ -56,8 +56,7 @@ GitFileRevision(final String fileName) {\n \t}\n \n \tpublic String getName() {\n-\t\tfinal int last = path.lastIndexOf('/');\n-\t\treturn last >= 0 ? path.substring(last + 1) : path;\n+\t\treturn path;\n \t}\n \n \tpublic boolean isPropertyMissing() {\n-- \n1.6.1.rc3.56.gd0306\n"},{"id":"99839","messageId":"200901100228.40768.robin.rosenberg@dewire.com","threadId":"17071","inReplyTo":"1231550077-1057-4-git-send-email-robin.rosenberg@dewire.com","subject":"Re: [EGIT PATCH 3/3] Present full name of file revision","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2009-01-10T01:28:40Z","receivedAt":"2009-01-10T01:28:40Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"lördag 10 januari 2009 02:14:37 skrev Robin Rosenberg:\n> The name need not be a path.\n\nDrop that part of the comment. Not true.\n\n-- robin\n"},{"id":"100135","messageId":"20090112165435.GH10179@spearce.org","threadId":"17071","inReplyTo":"1231550077-1057-2-git-send-email-robin.rosenberg@dewire.com","subject":"Re: [EGIT PATCH 1/3] Support viewing all changes in a single compare editor","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2009-01-12T16:54:35Z","receivedAt":"2009-01-12T16:54:35Z","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> Instead of having to click on every file listed as a diff\n> an extra diff entry is inserted at the top. Double clicking\n> on it will launch a compare editor for all changed files.\n\nNice.\n \n> diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitFileDiffViewer.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitFileDiffViewer.java\n> index ebec261..7549aa4 100644\n> --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitFileDiffViewer.java\n> +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/CommitFileDiffViewer.java\n> @@ -124,13 +149,16 @@ void doCopy() {\n...\n> +\t\t\telse\n> +\t\t\t\tr.append(((RevDiff)o).left.getChildren().length + \" files\");\n\nThis should use the NLS framework for translation.\n\n> diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffLabelProvider.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffLabelProvider.java\n> index 60b3a5a..c78ba6e 100644\n> --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffLabelProvider.java\n> +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/FileDiffLabelProvider.java\n> @@ -14,12 +14,49 @@\n>  class FileDiffLabelProvider extends BaseLabelProvider implements\n...\n> +\t\t\t\t\tStringBuilder b = new StringBuilder();\n> +\t\t\t\t\tif (add > 0) {\n> +\t\t\t\t\t\tb.append(add + \" added\");\n> +\t\t\t\t\t}\n> +\t\t\t\t\tif (mod > 0) {\n> +\t\t\t\t\t\tif (b.length() > 0)\n> +\t\t\t\t\t\t\tb.append(\", \");\n> +\t\t\t\t\t\tb.append(mod + \" changed\");\n> +\t\t\t\t\t}\n> +\t\t\t\t\tif (del > 0) {\n> +\t\t\t\t\t\tif (b.length() > 0)\n> +\t\t\t\t\t\t\tb.append(\", \");\n> +\t\t\t\t\t\tb.append(del + \" deleted\");\n\nAgain, NLS.\n\n> diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java\n> new file mode 100644\n> index 0000000..020ec73\n> --- /dev/null\n> +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java\n> +class DiffSide implements ITypedElement, IStructureComparator {\n...\n> +\tpublic String getName() {\n> +\t\treturn \"EGit diff\";\n> +\t}\n\nShould this have NLS applied to it?\n\n-- \nShawn.\n"}]}