{"thread":{"id":"20094","subject":"[JGIT PATCH 0/3] Request for help: graph-based UI","startedAt":"2009-07-12T14:46:49Z","lastAt":"2009-07-25T23:20:48Z","messageCount":8,"participants":["Johannes Schindelin","Robin Rosenberg","Shawn O. Pearce","Douglas Campos"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"117863","messageId":"cover.1247408350u.git.johannes.schindelin@gmx.de","threadId":"20094","inReplyTo":null,"subject":"[JGIT PATCH 0/3] Request for help: graph-based UI","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2009-07-12T14:46:49Z","receivedAt":"2009-07-12T14:46:49Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nunfortunately, the GSoC project for the graph-based UI failed.\n\nUnwilling to give up on the idea, I ask you for help to make it become \na reality, though.\n\nThe basic concept is this: show the user a graph instead of a list of \nobjects.  This should make things much more intuitive, especially when the \nuser can not only see the history, but \"make\" it in this UI, too!\n\nJust imagine being able to drag 'n drop a commit onto HEAD, and it is \ncherry-picked.  Or drag 'n drop files or directories onto the window, and \nyou see the history filtered to see only commits touching those files or \ndirectories.\n\nThings like that are as near in the future as you make it.\n\nDon't be intimidated by the size of the overall patch; almost half of it \nare license boiler-plates.\n\nNow, as for some low-hanging fruits I can think of, here is a short list:\n\n- I am crap at annotation, so that is lacking.\n\n- I am crap at documentation, so that is lacking.\n\n- It should be possible to read the commits on demand (maybe in the \n  background, too, with a MIN_PRIORITY thread).\n\n- At the moment, only (part of) the commit subject is shown.  It would be \n  nice to have tooltips for the full subject, maybe a panel that shows the \n  full commit metadata, and maybe make it configurable what is to be shown \n  in the boxes to begin with.\n\n- The boxes could be resizable, automatically resizing the graph.\n\n- Coloring commits provides a very nice way to convey additional \n  information; I could imagine that it would be nice to have a color \n  coding of authors, for example.\n\n- It should be possible to reinitialize the GraphWalk with different \n  options/refs.\n\n- I am developing using vi and bash, but that is not the way most Java \n  developers work; Eclipse seems to be the most popular development \n  platform.  There should be a little how-to for people wanting to hack on \n  JGit GUI.\n\n- The commits are shown in a rigid grid.  Maybe it would be nice to be \n  able to rearrange them interactively.  Or to make that grid less rigid?  \n  (Well, the latter is not so low-hanging anymore...)\n\n- Nothing in the GUI let's you access the file revisions of the commits \n  yet.  What would be the most intuitive interface for that?\n\n- I have a rudimentary diff implementation in my repository \n  (http://repo.or.cz/w/jgit/dscho.git where you can find the \"gui\"  \n  branch, too) which could be used to show the diffs corresponding to the \n  commits.\n\nInterested?\n\nCiao,\nDscho\n\nJohannes Schindelin (3):\n  Add a rudimentary graph-based user interface\n  Add license boiler-plates\n  Introduce the command 'jgit gui'\n\n .../services/org.spearce.jgit.pgm.TextBuiltin      |    1 +\n .../src/org/spearce/jgit/pgm/Gui.java              |  100 +++++++++++\n .../src/org/spearce/jgit/gui/CommitGraph.java      |   64 +++++++\n .../src/org/spearce/jgit/gui/CommitGrid.java       |  184 ++++++++++++++++++++\n .../src/org/spearce/jgit/gui/CommitPainter.java    |   80 +++++++++\n .../src/org/spearce/jgit/gui/CommitRow.java        |   69 ++++++++\n .../src/org/spearce/jgit/gui/GraphCommit.java      |   78 ++++++++\n .../src/org/spearce/jgit/gui/GraphWalk.java        |   73 ++++++++\n 8 files changed, 649 insertions(+), 0 deletions(-)\n create mode 100644 org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Gui.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java\n"},{"id":"117865","messageId":"6f63336b3517387304f5f3b3ed298d6dcab7cd47.1247408350u.git.johannes.schindelin@gmx.de","threadId":"20094","inReplyTo":"cover.1247408350u.git.johannes.schindelin@gmx.de","subject":"[JGIT PATCH 1/3] Add a rudimentary graph-based user interface","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2009-07-12T14:46:55Z","receivedAt":"2009-07-12T14:46:55Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"The idea for a graph-based user interface cropped up during the Google\nSummer of Code 2009.  Unfortunately, the project failed, but the idea\nis too good to let it go to waste.\n\nThis commit introduces a very basic Swing component which shows a graph\nof the commits in the repository, newest on top, older on the bottom.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n .../src/org/spearce/jgit/gui/CommitGraph.java      |   27 ++++\n .../src/org/spearce/jgit/gui/CommitGrid.java       |  147 ++++++++++++++++++++\n .../src/org/spearce/jgit/gui/CommitPainter.java    |   43 ++++++\n .../src/org/spearce/jgit/gui/CommitRow.java        |   32 +++++\n .../src/org/spearce/jgit/gui/GraphCommit.java      |   41 ++++++\n .../src/org/spearce/jgit/gui/GraphWalk.java        |   36 +++++\n 6 files changed, 326 insertions(+), 0 deletions(-)\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java\n create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java\nnew file mode 100644\nindex 0000000..0d94865\n--- /dev/null\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java\n@@ -0,0 +1,27 @@\n+package org.spearce.jgit.gui;\n+\n+import java.awt.Dimension;\n+import java.awt.Rectangle;\n+\n+import java.io.IOException;\n+\n+import javax.swing.JPanel;\n+import javax.swing.JScrollPane;\n+\n+import org.spearce.jgit.lib.Repository;\n+import org.spearce.jgit.errors.MissingObjectException;\n+\n+public class CommitGraph extends JScrollPane {\n+\n+\tprotected GraphWalk walk;\n+\tprotected CommitGrid grid;\n+\n+\tpublic CommitGraph(GraphWalk walk)\n+\t\t\tthrows IOException, MissingObjectException {\n+\t\tsuper(new CommitGrid(walk));\n+\t}\n+\n+\tpublic Dimension getPreferredSize() {\n+\t\treturn new Dimension(300, 600);\n+\t}\n+}\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java\nnew file mode 100644\nindex 0000000..77f56f6\n--- /dev/null\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java\n@@ -0,0 +1,147 @@\n+package org.spearce.jgit.gui;\n+\n+import java.awt.Dimension;\n+import java.awt.Graphics;\n+import java.awt.Graphics2D;\n+import java.awt.Rectangle;\n+\n+import java.io.IOException;\n+\n+import java.util.ArrayList;\n+import java.util.Iterator;\n+import java.util.List;\n+\n+import javax.swing.JComponent;\n+\n+import org.spearce.jgit.lib.Repository;\n+\n+import org.spearce.jgit.revwalk.RevSort;\n+\n+public class CommitGrid extends JComponent {\n+\tprotected GraphWalk walk;\n+\tprotected List<CommitRow> rows;\n+\tprotected CommitPainter painter;\n+\tprotected Rectangle clip;\n+\n+\tprotected Dimension size;\n+\tprotected int minColumn = 0, maxColumn = 0;\n+\n+\t// commit dimensions\n+\tprotected int w = 200;\n+\tprotected int h = 30;\n+\tprotected int spacing = 20;\n+\n+\tpublic CommitGrid(GraphWalk walk) {\n+\t\tthis.walk = walk;\n+\t\trows = new ArrayList<CommitRow>();\n+\t\tpainter = new CommitPainter();\n+\t\tclip = new Rectangle();\n+\t\tsize = new Dimension(0, 0);\n+\t}\n+\n+\tpublic Dimension getMinimumSize() {\n+\t\treturn new Dimension((maxColumn - minColumn) * (w + spacing),\n+\t\t\trows.size() * (h + spacing));\n+\t}\n+\n+\tpublic Dimension getPreferredSize() {\n+\t\treturn new Dimension((maxColumn - minColumn) * (w + spacing),\n+\t\t\trows.size() * (h + spacing));\n+\t}\n+\n+\t// TODO: public void resetWalk(Graphwalk walk)\n+\n+\tprotected void readCommits(int maxRow) {\n+\t\tif (rows.size() > maxRow)\n+\t\t\treturn;\n+\t\tfor (;;) {\n+\t\t\tGraphCommit commit;\n+\t\t\ttry {\n+\t\t\t\tcommit = (GraphCommit)walk.next();\n+\t\t\t\tif (commit == null)\n+\t\t\t\t\treturn;\n+\t\t\t} catch (IOException e) {\n+\t\t\t\t// TODO: show error\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\tcommit.calculateColumn();\n+\t\t\tint row = commit.getRow();\n+\t\t\twhile (row >= rows.size()) {\n+\t\t\t\trows.add(new CommitRow());\n+\t\t\t\tsize.height += h + spacing;\n+\t\t\t\tresize(getMinimumSize());\n+\t\t\t\trevalidate();\n+\t\t\t}\n+\t\t\tcommit.column =\n+\t\t\t\trows.get(row).add(commit, commit.getColumn());\n+\t\t\tcommit.childrenCount = -1;\n+\t\t\tmaxColumn = Math.max(maxColumn, commit.column);\n+\t\t\tminColumn = Math.min(minColumn, commit.column);\n+\t\t}\n+\t}\n+\n+\tint x2column(int x) { return x / (w + spacing); }\n+\tint y2row(int y) { return y / (h + spacing); }\n+\tint column2x(int column) { return column * (w + spacing); }\n+\tint row2y(int row) { return row * (h + spacing); }\n+\n+\tclass CommitsInRectangle implements Iterator<GraphCommit> {\n+\t\tint minRow, maxRow, minColumn, maxColumn;\n+\t\tint row, column;\n+\n+\t\tCommitsInRectangle(int minRow, int maxRow,\n+\t\t\t\tint minColumn, int maxColumn) {\n+\t\t\tthis.minRow = minRow;\n+\t\t\tthis.maxRow = maxRow;\n+\t\t\tthis.minColumn = minColumn;\n+\t\t\tthis.maxColumn = maxColumn;\n+\t\t\trow = minRow;\n+\t\t\tcolumn = minColumn - 1;\n+\n+\t\t\treadCommits(maxRow);\n+\t\t\tmaxRow = Math.min(maxRow, rows.size());\n+\t\t}\n+\n+\t\tCommitsInRectangle(Rectangle r) {\n+\t\t\tthis(y2row(r.y), y2row(r.y + r.height - 1),\n+\t\t\t\tx2column(r.x), x2column(r.x + r.width - 1));\n+\t\t}\n+\n+\t\tpublic boolean hasNext() {\n+\t\t\tfor (; row <= maxRow; row++, column = minColumn - 1)\n+\t\t\t\twhile (++column <= maxColumn)\n+\t\t\t\t\tif (rows.get(row).get(column) != null)\n+\t\t\t\t\t\treturn true;\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tpublic GraphCommit next() {\n+\t\t\treturn rows.get(row).get(column);\n+\t\t}\n+\n+\t\tpublic void remove() throws UnsupportedOperationException {\n+\t\t\tthrow new UnsupportedOperationException();\n+\t\t}\n+\t}\n+\n+\tpublic void paintComponent(Graphics g) {\n+\t\tg.getClipBounds(clip);\n+\t\tCommitsInRectangle iter = new CommitsInRectangle(clip);\n+\t\twhile (iter.hasNext()) {\n+\t\t\tGraphCommit commit = iter.next();\n+\t\t\tpainter.paint((Graphics2D)g, commit,\n+\t\t\t\t\tcolumn2x(iter.column), row2y(iter.row),\n+\t\t\t\t\tw, h);\n+\t\t\tfor (int i = 0; i < commit.getParentCount(); i++) {\n+\t\t\t\tGraphCommit parent =\n+\t\t\t\t\t(GraphCommit)commit.getParent(i);\n+\t\t\t\tparent.calculateColumn();\n+\t\t\t\tg.setColor(painter.foreground);\n+\t\t\t\tg.drawLine(column2x(commit.column) + w / 2,\n+\t\t\t\t\trow2y(commit.row) + h,\n+\t\t\t\t\tcolumn2x(parent.column) + w / 2,\n+\t\t\t\t\trow2y(parent.row));\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java\nnew file mode 100644\nindex 0000000..061cd2f\n--- /dev/null\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java\n@@ -0,0 +1,43 @@\n+package org.spearce.jgit.gui;\n+\n+import java.awt.Color;\n+import java.awt.Dimension;\n+import java.awt.Graphics2D;\n+import java.awt.GradientPaint;\n+import java.awt.Rectangle;\n+import java.awt.Shape;\n+\n+import java.awt.geom.Area;\n+\n+class CommitPainter {\n+\n+\tprotected Color background1, background2, foreground;\n+\tprotected int margin = 2;\n+\n+\tpublic CommitPainter() {\n+\t\tbackground1 = Color.LIGHT_GRAY;\n+\t\tbackground2 = background1.darker();\n+\t\tforeground = Color.BLACK;\n+\t}\n+\n+\tpublic void paint(Graphics2D g, GraphCommit commit,\n+\t\t\tint x, int y, int w, int h) {\n+\n+\t\tGradientPaint gradient = new GradientPaint(x, y, background1,\n+\t\t\t\tx + w, y + h, background2);\n+\n+\t\tg.setPaint(gradient);\n+\t\tg.fillRect(x, y, w, h);\n+\t\tg.setColor(foreground);\n+\t\tg.drawRect(x, y, w, h);\n+\n+\t\tShape clip = g.getClip();\n+\t\tArea area = new Area(new Rectangle(x + margin, y + margin,\n+\t\t\t\t\tw - 2 * margin, h - 2 * margin));\n+\t\tarea.intersect(new Area(clip));\n+\t\tg.setClip(area);\n+\t\tg.drawString(commit.getShortMessage(),\n+\t\t\t\tx + margin, y + margin + h / 2);\n+\t\tg.setClip(clip);\n+\t}\n+}\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java\nnew file mode 100644\nindex 0000000..d110e89\n--- /dev/null\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java\n@@ -0,0 +1,32 @@\n+package org.spearce.jgit.gui;\n+\n+import java.util.ArrayList;\n+import java.util.List;\n+\n+public class CommitRow {\n+\tprotected List<GraphCommit> left, right;\n+\n+\tpublic CommitRow() {\n+\t\tleft = new ArrayList<GraphCommit>();\n+\t\tright = new ArrayList<GraphCommit>();\n+\t}\n+\n+\tpublic GraphCommit get(int index) {\n+\t\tif (index < 0) {\n+\t\t\tindex = -1 - index;\n+\t\t\treturn index < left.size() ? left.get(index) : null;\n+\t\t}\n+\t\treturn index < right.size() ? right.get(index) : null;\n+\t}\n+\n+\tpublic int add(GraphCommit commit, int desiredColumn) {\n+\t\tint leftIndex = -1 - desiredColumn;\n+\t\tif (Math.abs(-1 - desiredColumn - left.size()) <\n+\t\t\t\tMath.abs(desiredColumn - right.size())) {\n+\t\t\tleft.add(commit);\n+\t\t\treturn -left.size();\n+\t\t}\n+\t\tright.add(commit);\n+\t\treturn right.size() - 1;\n+\t}\n+}\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java\nnew file mode 100644\nindex 0000000..13a5936\n--- /dev/null\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java\n@@ -0,0 +1,41 @@\n+package org.spearce.jgit.gui;\n+\n+import org.spearce.jgit.lib.AnyObjectId;\n+import org.spearce.jgit.revwalk.RevCommit;\n+\n+public class GraphCommit extends RevCommit {\n+\n+\tprotected int column = 0, row = 0;\n+\n+\tprotected int childrenCount = 0;\n+\tprotected int cumulatedChildColumn = 0;\n+\n+\tprotected GraphCommit(final AnyObjectId id) {\n+\t\tsuper(id);\n+\t}\n+\n+\tpublic void addChild(GraphCommit child) {\n+\t\tcumulatedChildColumn += child.column;\n+\t\tthis.row = Math.max(this.row, child.row + 1);\n+\t\tchildrenCount++;\n+\t}\n+\n+\t// TODO: CommitLayout argument\n+\tpublic void calculateColumn() {\n+\t\tif (childrenCount < 0)\n+\t\t\treturn; // already assigned\n+\t\tif (childrenCount > 0)\n+\t\t\tcolumn = cumulatedChildColumn / childrenCount;\n+\t\telse\n+\t\t\tcolumn = 0;\n+\t\t// TODO: ask the layout for the position\n+\t}\n+\n+\tpublic int getColumn() {\n+\t\treturn column;\n+\t}\n+\n+\tpublic int getRow() {\n+\t\treturn row;\n+\t}\n+}\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java\nnew file mode 100644\nindex 0000000..fe98df3\n--- /dev/null\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java\n@@ -0,0 +1,36 @@\n+package org.spearce.jgit.gui;\n+\n+import java.io.IOException;\n+\n+import org.spearce.jgit.lib.AnyObjectId;\n+import org.spearce.jgit.lib.Repository;\n+import org.spearce.jgit.revwalk.RevSort;\n+import org.spearce.jgit.revwalk.RevWalk;\n+import org.spearce.jgit.revwalk.RevCommit;\n+import org.spearce.jgit.errors.IncorrectObjectTypeException;\n+import org.spearce.jgit.errors.MissingObjectException;\n+\n+public class GraphWalk extends RevWalk {\n+\tpublic GraphWalk(final Repository repo)\n+\t\t\t/* throws IOException, MissingObjectException */ {\n+\t\tsuper(repo);\n+\t\tsort(RevSort.COMMIT_TIME_DESC, true);\n+\t}\n+\t\n+\tprotected RevCommit createCommit(final AnyObjectId id) {\n+\t\treturn new GraphCommit(id);\n+\t}\n+\n+\tpublic RevCommit next() throws MissingObjectException,\n+\t\t\tIncorrectObjectTypeException, IOException {\n+\t\tGraphCommit commit = (GraphCommit)super.next();\n+\t\tif (commit == null)\n+\t\t\treturn null;\n+\n+\t\t// Update all parents\n+\t\tfor (int i = 0; i < commit.getParentCount(); i++)\n+\t\t\t((GraphCommit)commit.getParent(i)).addChild(commit);\n+\n+\t\treturn commit;\n+\t}\n+}\n-- \n1.6.3.3.644.g82c56\n"},{"id":"117864","messageId":"7723165e07318851210a9636cd94d10c23b85167.1247408350u.git.johannes.schindelin@gmx.de","threadId":"20094","inReplyTo":"cover.1247408350u.git.johannes.schindelin@gmx.de","subject":"[JGIT PATCH 2/3] Add license boiler-plates","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2009-07-12T14:47:00Z","receivedAt":"2009-07-12T14:47:00Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Add some legalese so that sue-happy people get not that happy.  This\npatch is separate from the code part to help reviewers in getting\nless distracted.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n .../src/org/spearce/jgit/gui/CommitGraph.java      |   37 ++++++++++++++++++++\n .../src/org/spearce/jgit/gui/CommitGrid.java       |   37 ++++++++++++++++++++\n .../src/org/spearce/jgit/gui/CommitPainter.java    |   37 ++++++++++++++++++++\n .../src/org/spearce/jgit/gui/CommitRow.java        |   37 ++++++++++++++++++++\n .../src/org/spearce/jgit/gui/GraphCommit.java      |   37 ++++++++++++++++++++\n .../src/org/spearce/jgit/gui/GraphWalk.java        |   37 ++++++++++++++++++++\n 6 files changed, 222 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java\nindex 0d94865..7c77c9b 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java\n@@ -1,3 +1,40 @@\n+/*\n+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n package org.spearce.jgit.gui;\n \n import java.awt.Dimension;\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java\nindex 77f56f6..379bdf3 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java\n@@ -1,3 +1,40 @@\n+/*\n+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n package org.spearce.jgit.gui;\n \n import java.awt.Dimension;\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java\nindex 061cd2f..e67e6ab 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java\n@@ -1,3 +1,40 @@\n+/*\n+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n package org.spearce.jgit.gui;\n \n import java.awt.Color;\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java\nindex d110e89..e3ec75f 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java\n@@ -1,3 +1,40 @@\n+/*\n+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n package org.spearce.jgit.gui;\n \n import java.util.ArrayList;\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java\nindex 13a5936..6c99a4f 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java\n@@ -1,3 +1,40 @@\n+/*\n+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n package org.spearce.jgit.gui;\n \n import org.spearce.jgit.lib.AnyObjectId;\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java\nindex fe98df3..8297b57 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java\n@@ -1,3 +1,40 @@\n+/*\n+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n package org.spearce.jgit.gui;\n \n import java.io.IOException;\n-- \n1.6.3.3.644.g82c56\n"},{"id":"117866","messageId":"3966c8049c37155b2d09d3b4d2997d9e289d1e7a.1247408350u.git.johannes.schindelin@gmx.de","threadId":"20094","inReplyTo":"cover.1247408350u.git.johannes.schindelin@gmx.de","subject":"[JGIT PATCH 3/3] Introduce the command 'jgit gui'","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2009-07-12T14:47:06Z","receivedAt":"2009-07-12T14:47:06Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Expose the graph-based user interface to the user.  This command takes\nthe same arguments as 'jgit log'.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n .../services/org.spearce.jgit.pgm.TextBuiltin      |    1 +\n .../src/org/spearce/jgit/pgm/Gui.java              |  100 ++++++++++++++++++++\n 2 files changed, 101 insertions(+), 0 deletions(-)\n create mode 100644 org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Gui.java\n\ndiff --git a/org.spearce.jgit.pgm/src/META-INF/services/org.spearce.jgit.pgm.TextBuiltin b/org.spearce.jgit.pgm/src/META-INF/services/org.spearce.jgit.pgm.TextBuiltin\nindex 3a8cc09..335a643 100644\n--- a/org.spearce.jgit.pgm/src/META-INF/services/org.spearce.jgit.pgm.TextBuiltin\n+++ b/org.spearce.jgit.pgm/src/META-INF/services/org.spearce.jgit.pgm.TextBuiltin\n@@ -4,6 +4,7 @@ org.spearce.jgit.pgm.Daemon\n org.spearce.jgit.pgm.DiffTree\n org.spearce.jgit.pgm.Fetch\n org.spearce.jgit.pgm.Glog\n+org.spearce.jgit.pgm.Gui\n org.spearce.jgit.pgm.IndexPack\n org.spearce.jgit.pgm.Init\n org.spearce.jgit.pgm.Log\ndiff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Gui.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Gui.java\nnew file mode 100644\nindex 0000000..59904a7\n--- /dev/null\n+++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Gui.java\n@@ -0,0 +1,100 @@\n+/*\n+ * Copyright (C) 2009, Shawn O. Pearce <spearce@spearce.org>,\n+ *                     Johannes E. Schindelin <johannes.schindelin@gmx.de>\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+package org.spearce.jgit.pgm;\n+\n+import java.awt.event.WindowAdapter;\n+import java.awt.event.WindowEvent;\n+\n+import java.io.File;\n+\n+import javax.swing.JFrame;\n+\n+import org.spearce.jgit.gui.CommitGraph;\n+import org.spearce.jgit.gui.GraphWalk;\n+\n+import org.spearce.jgit.revwalk.RevCommit;\n+import org.spearce.jgit.revwalk.RevWalk;\n+\n+class Gui extends RevWalkTextBuiltin {\n+\tfinal JFrame frame;\n+\n+\tCommitGraph graph;\n+\n+\tGui() {\n+\t\tframe = new JFrame();\n+\t\tframe.addWindowListener(new WindowAdapter() {\n+\t\t\t@Override\n+\t\t\tpublic void windowClosing(final WindowEvent e) {\n+\t\t\t\tframe.dispose();\n+\t\t\t}\n+\t\t});\n+\t}\n+\n+\t@Override\n+\tprotected int walkLoop() throws Exception {\n+\t\tgraph = new CommitGraph((GraphWalk)walk);\n+\t\tframe.getContentPane().add(graph);\n+\n+\t\tframe.setTitle(\"[\" + repoName() + \"]\");\n+\t\tframe.pack();\n+\t\tframe.setVisible(true);\n+\t\treturn 0;\n+\t}\n+\n+\t@Override\n+\tprotected void show(final RevCommit c) throws Exception {\n+\t\tthrow new UnsupportedOperationException();\n+\t}\n+\n+\t@Override\n+\tprotected RevWalk createWalk() {\n+\t\tif (objects)\n+\t\t\tthrow die(\"Cannot use --objects with gui\");\n+\t\tfinal GraphWalk w = new GraphWalk(db);\n+\t\treturn w;\n+\t}\n+\n+\tprivate String repoName() {\n+\t\tfinal File f = db.getDirectory();\n+\t\tString n = f.getName();\n+\t\tif (\".git\".equals(n))\n+\t\t\tn = f.getParentFile().getName();\n+\t\treturn n;\n+\t}\n+}\n-- \n1.6.3.3.644.g82c56\n"},{"id":"118396","messageId":"200907212140.32520.robin.rosenberg@dewire.com","threadId":"20094","inReplyTo":"cover.1247408350u.git.johannes.schindelin@gmx.de","subject":"Re: [JGIT PATCH 0/3] Request for help: graph-based UI","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2009-07-21T19:40:32Z","receivedAt":"2009-07-21T19:40:32Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"Diff yes, absolutely.\n\nAs for the graph, have you considered using JGraph (LGPL) or some\nother  graph toolkit.\n\nI'm not sure jgit gui in any advanced version belong in jgit itself, but should\nprobably be a project on its' own and let jgit stay as building blocks for more\nadvanced stuff, such as EGit, NbGit, Gerrit and others, and of course the gui\nof yours. \n\nI'm not likely to have much time for much non-Eclipse GUI stuff, but I do\nthink this is a sensible project. \n\n-- robin\n"},{"id":"118780","messageId":"ed88cb980907251354o3c5e9007t4de328d0c4cdea52@mail.gmail.com","threadId":"20094","inReplyTo":"200907212140.32520.robin.rosenberg@dewire.com","subject":"Re: [JGIT PATCH 0/3] Request for help: graph-based UI","fromName":"Douglas Campos","fromEmail":"douglas@theros.info","sentAt":"2009-07-25T20:54:34Z","receivedAt":"2009-07-25T20:54:34Z","isPatch":true,"sender":{"key":"douglas@theros.info","avatar":"https://gravatar.com/avatar/bca8e0e43e860dab00ec17dd3f1b60df6af911655fae70a0bbdeebeb889de421?d=mp&s=160"},"body":"Just a question.. all graphic things that we implement in swing aren't\nusable inside eclipse with swt-awt bridge?\n\nOn Tue, Jul 21, 2009 at 4:40 PM, Robin\nRosenberg<robin.rosenberg@dewire.com> wrote:\n> Diff yes, absolutely.\n>\n> As for the graph, have you considered using JGraph (LGPL) or some\n> other  graph toolkit.\n>\n> I'm not sure jgit gui in any advanced version belong in jgit itself, but should\n> probably be a project on its' own and let jgit stay as building blocks for more\n> advanced stuff, such as EGit, NbGit, Gerrit and others, and of course the gui\n> of yours.\n>\n> I'm not likely to have much time for much non-Eclipse GUI stuff, but I do\n> think this is a sensible project.\n>\n> -- robin\n> --\n> To unsubscribe from this list: send the line \"unsubscribe git\" in\n> the body of a message to majordomo@vger.kernel.org\n> More majordomo info at  http://vger.kernel.org/majordomo-info.html\n>\n\n\n\n-- \nDouglas Campos\nTheros Consulting\n+55 11 7626 5959\n+55 11 3020 8168\n"},{"id":"118779","messageId":"20090725205936.GF11191@spearce.org","threadId":"20094","inReplyTo":"ed88cb980907251354o3c5e9007t4de328d0c4cdea52@mail.gmail.com","subject":"Re: [JGIT PATCH 0/3] Request for help: graph-based UI","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2009-07-25T20:59:36Z","receivedAt":"2009-07-25T20:59:36Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Douglas Campos <douglas@theros.info> wrote:\n> Just a question.. all graphic things that we implement in swing aren't\n> usable inside eclipse with swt-awt bridge?\n\nThey should be usuable inside the SWT-AWT bridge, but that bridge\nis really dicey to get working right sometimes.  I had a lot of\ntrouble with it at my prior day-job and am happy I no longer have\nto deal with it.\n\nFor the most part, SWT and AWT are similar enough in their rendering\nthat its possible to build most of a layout algorithm to be rendering\nAPI agnostic, and then permit implementation of AWT and SWT backends.\nBut that still is duplicated effort, vs. straightforward code reuse.\n\n-- \nShawn.\n"},{"id":"118804","messageId":"alpine.DEB.1.00.0907260119140.8306@pacific.mpi-cbg.de","threadId":"20094","inReplyTo":"20090725205936.GF11191@spearce.org","subject":"Re: [JGIT PATCH 0/3] Request for help: graph-based UI","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2009-07-25T23:20:48Z","receivedAt":"2009-07-25T23:20:48Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sat, 25 Jul 2009, Shawn O. Pearce wrote:\n\n> Douglas Campos <douglas@theros.info> wrote:\n> > Just a question.. all graphic things that we implement in swing aren't \n> > usable inside eclipse with swt-awt bridge?\n> \n> They should be usuable inside the SWT-AWT bridge, but that bridge is \n> really dicey to get working right sometimes.  I had a lot of trouble \n> with it at my prior day-job and am happy I no longer have to deal with \n> it.\n> \n> For the most part, SWT and AWT are similar enough in their rendering \n> that its possible to build most of a layout algorithm to be rendering \n> API agnostic, and then permit implementation of AWT and SWT backends. \n> But that still is duplicated effort, vs. straightforward code reuse.\n\nOf course, the Graph GUI is Swing...\n\nBut I would definitely welcome if somebody made the rendering more \nmodular, to allow for an SWT backend.\n\nIn fact, I think I welcome almost everything people contribute to the \nGraph GUI project.\n\nCiao,\nDscho\n"}]}