* [JGIT PATCH 0/3] Request for help: graph-based UI
@ 2009-07-12 14:46 Johannes Schindelin
2009-07-12 14:46 ` [JGIT PATCH 1/3] Add a rudimentary graph-based user interface Johannes Schindelin
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Johannes Schindelin @ 2009-07-12 14:46 UTC (permalink / raw)
To: git; +Cc: spearce, robin.rosenberg
Hi,
unfortunately, the GSoC project for the graph-based UI failed.
Unwilling to give up on the idea, I ask you for help to make it become
a reality, though.
The basic concept is this: show the user a graph instead of a list of
objects. This should make things much more intuitive, especially when the
user can not only see the history, but "make" it in this UI, too!
Just imagine being able to drag 'n drop a commit onto HEAD, and it is
cherry-picked. Or drag 'n drop files or directories onto the window, and
you see the history filtered to see only commits touching those files or
directories.
Things like that are as near in the future as you make it.
Don't be intimidated by the size of the overall patch; almost half of it
are license boiler-plates.
Now, as for some low-hanging fruits I can think of, here is a short list:
- I am crap at annotation, so that is lacking.
- I am crap at documentation, so that is lacking.
- It should be possible to read the commits on demand (maybe in the
background, too, with a MIN_PRIORITY thread).
- At the moment, only (part of) the commit subject is shown. It would be
nice to have tooltips for the full subject, maybe a panel that shows the
full commit metadata, and maybe make it configurable what is to be shown
in the boxes to begin with.
- The boxes could be resizable, automatically resizing the graph.
- Coloring commits provides a very nice way to convey additional
information; I could imagine that it would be nice to have a color
coding of authors, for example.
- It should be possible to reinitialize the GraphWalk with different
options/refs.
- I am developing using vi and bash, but that is not the way most Java
developers work; Eclipse seems to be the most popular development
platform. There should be a little how-to for people wanting to hack on
JGit GUI.
- The commits are shown in a rigid grid. Maybe it would be nice to be
able to rearrange them interactively. Or to make that grid less rigid?
(Well, the latter is not so low-hanging anymore...)
- Nothing in the GUI let's you access the file revisions of the commits
yet. What would be the most intuitive interface for that?
- I have a rudimentary diff implementation in my repository
(http://repo.or.cz/w/jgit/dscho.git where you can find the "gui"
branch, too) which could be used to show the diffs corresponding to the
commits.
Interested?
Ciao,
Dscho
Johannes Schindelin (3):
Add a rudimentary graph-based user interface
Add license boiler-plates
Introduce the command 'jgit gui'
.../services/org.spearce.jgit.pgm.TextBuiltin | 1 +
.../src/org/spearce/jgit/pgm/Gui.java | 100 +++++++++++
.../src/org/spearce/jgit/gui/CommitGraph.java | 64 +++++++
.../src/org/spearce/jgit/gui/CommitGrid.java | 184 ++++++++++++++++++++
.../src/org/spearce/jgit/gui/CommitPainter.java | 80 +++++++++
.../src/org/spearce/jgit/gui/CommitRow.java | 69 ++++++++
.../src/org/spearce/jgit/gui/GraphCommit.java | 78 ++++++++
.../src/org/spearce/jgit/gui/GraphWalk.java | 73 ++++++++
8 files changed, 649 insertions(+), 0 deletions(-)
create mode 100644 org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Gui.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java
^ permalink raw reply [flat|nested] 8+ messages in thread
* [JGIT PATCH 1/3] Add a rudimentary graph-based user interface
2009-07-12 14:46 [JGIT PATCH 0/3] Request for help: graph-based UI Johannes Schindelin
@ 2009-07-12 14:46 ` Johannes Schindelin
2009-07-12 14:47 ` [JGIT PATCH 2/3] Add license boiler-plates Johannes Schindelin
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Johannes Schindelin @ 2009-07-12 14:46 UTC (permalink / raw)
To: git; +Cc: spearce, robin.rosenberg
The idea for a graph-based user interface cropped up during the Google
Summer of Code 2009. Unfortunately, the project failed, but the idea
is too good to let it go to waste.
This commit introduces a very basic Swing component which shows a graph
of the commits in the repository, newest on top, older on the bottom.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
.../src/org/spearce/jgit/gui/CommitGraph.java | 27 ++++
.../src/org/spearce/jgit/gui/CommitGrid.java | 147 ++++++++++++++++++++
.../src/org/spearce/jgit/gui/CommitPainter.java | 43 ++++++
.../src/org/spearce/jgit/gui/CommitRow.java | 32 +++++
.../src/org/spearce/jgit/gui/GraphCommit.java | 41 ++++++
.../src/org/spearce/jgit/gui/GraphWalk.java | 36 +++++
6 files changed, 326 insertions(+), 0 deletions(-)
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java
new file mode 100644
index 0000000..0d94865
--- /dev/null
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java
@@ -0,0 +1,27 @@
+package org.spearce.jgit.gui;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+
+import java.io.IOException;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.spearce.jgit.lib.Repository;
+import org.spearce.jgit.errors.MissingObjectException;
+
+public class CommitGraph extends JScrollPane {
+
+ protected GraphWalk walk;
+ protected CommitGrid grid;
+
+ public CommitGraph(GraphWalk walk)
+ throws IOException, MissingObjectException {
+ super(new CommitGrid(walk));
+ }
+
+ public Dimension getPreferredSize() {
+ return new Dimension(300, 600);
+ }
+}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java
new file mode 100644
index 0000000..77f56f6
--- /dev/null
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java
@@ -0,0 +1,147 @@
+package org.spearce.jgit.gui;
+
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+
+import java.io.IOException;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JComponent;
+
+import org.spearce.jgit.lib.Repository;
+
+import org.spearce.jgit.revwalk.RevSort;
+
+public class CommitGrid extends JComponent {
+ protected GraphWalk walk;
+ protected List<CommitRow> rows;
+ protected CommitPainter painter;
+ protected Rectangle clip;
+
+ protected Dimension size;
+ protected int minColumn = 0, maxColumn = 0;
+
+ // commit dimensions
+ protected int w = 200;
+ protected int h = 30;
+ protected int spacing = 20;
+
+ public CommitGrid(GraphWalk walk) {
+ this.walk = walk;
+ rows = new ArrayList<CommitRow>();
+ painter = new CommitPainter();
+ clip = new Rectangle();
+ size = new Dimension(0, 0);
+ }
+
+ public Dimension getMinimumSize() {
+ return new Dimension((maxColumn - minColumn) * (w + spacing),
+ rows.size() * (h + spacing));
+ }
+
+ public Dimension getPreferredSize() {
+ return new Dimension((maxColumn - minColumn) * (w + spacing),
+ rows.size() * (h + spacing));
+ }
+
+ // TODO: public void resetWalk(Graphwalk walk)
+
+ protected void readCommits(int maxRow) {
+ if (rows.size() > maxRow)
+ return;
+ for (;;) {
+ GraphCommit commit;
+ try {
+ commit = (GraphCommit)walk.next();
+ if (commit == null)
+ return;
+ } catch (IOException e) {
+ // TODO: show error
+ continue;
+ }
+ commit.calculateColumn();
+ int row = commit.getRow();
+ while (row >= rows.size()) {
+ rows.add(new CommitRow());
+ size.height += h + spacing;
+ resize(getMinimumSize());
+ revalidate();
+ }
+ commit.column =
+ rows.get(row).add(commit, commit.getColumn());
+ commit.childrenCount = -1;
+ maxColumn = Math.max(maxColumn, commit.column);
+ minColumn = Math.min(minColumn, commit.column);
+ }
+ }
+
+ int x2column(int x) { return x / (w + spacing); }
+ int y2row(int y) { return y / (h + spacing); }
+ int column2x(int column) { return column * (w + spacing); }
+ int row2y(int row) { return row * (h + spacing); }
+
+ class CommitsInRectangle implements Iterator<GraphCommit> {
+ int minRow, maxRow, minColumn, maxColumn;
+ int row, column;
+
+ CommitsInRectangle(int minRow, int maxRow,
+ int minColumn, int maxColumn) {
+ this.minRow = minRow;
+ this.maxRow = maxRow;
+ this.minColumn = minColumn;
+ this.maxColumn = maxColumn;
+ row = minRow;
+ column = minColumn - 1;
+
+ readCommits(maxRow);
+ maxRow = Math.min(maxRow, rows.size());
+ }
+
+ CommitsInRectangle(Rectangle r) {
+ this(y2row(r.y), y2row(r.y + r.height - 1),
+ x2column(r.x), x2column(r.x + r.width - 1));
+ }
+
+ public boolean hasNext() {
+ for (; row <= maxRow; row++, column = minColumn - 1)
+ while (++column <= maxColumn)
+ if (rows.get(row).get(column) != null)
+ return true;
+ return false;
+ }
+
+ public GraphCommit next() {
+ return rows.get(row).get(column);
+ }
+
+ public void remove() throws UnsupportedOperationException {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ public void paintComponent(Graphics g) {
+ g.getClipBounds(clip);
+ CommitsInRectangle iter = new CommitsInRectangle(clip);
+ while (iter.hasNext()) {
+ GraphCommit commit = iter.next();
+ painter.paint((Graphics2D)g, commit,
+ column2x(iter.column), row2y(iter.row),
+ w, h);
+ for (int i = 0; i < commit.getParentCount(); i++) {
+ GraphCommit parent =
+ (GraphCommit)commit.getParent(i);
+ parent.calculateColumn();
+ g.setColor(painter.foreground);
+ g.drawLine(column2x(commit.column) + w / 2,
+ row2y(commit.row) + h,
+ column2x(parent.column) + w / 2,
+ row2y(parent.row));
+ }
+ }
+ }
+}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java
new file mode 100644
index 0000000..061cd2f
--- /dev/null
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java
@@ -0,0 +1,43 @@
+package org.spearce.jgit.gui;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.GradientPaint;
+import java.awt.Rectangle;
+import java.awt.Shape;
+
+import java.awt.geom.Area;
+
+class CommitPainter {
+
+ protected Color background1, background2, foreground;
+ protected int margin = 2;
+
+ public CommitPainter() {
+ background1 = Color.LIGHT_GRAY;
+ background2 = background1.darker();
+ foreground = Color.BLACK;
+ }
+
+ public void paint(Graphics2D g, GraphCommit commit,
+ int x, int y, int w, int h) {
+
+ GradientPaint gradient = new GradientPaint(x, y, background1,
+ x + w, y + h, background2);
+
+ g.setPaint(gradient);
+ g.fillRect(x, y, w, h);
+ g.setColor(foreground);
+ g.drawRect(x, y, w, h);
+
+ Shape clip = g.getClip();
+ Area area = new Area(new Rectangle(x + margin, y + margin,
+ w - 2 * margin, h - 2 * margin));
+ area.intersect(new Area(clip));
+ g.setClip(area);
+ g.drawString(commit.getShortMessage(),
+ x + margin, y + margin + h / 2);
+ g.setClip(clip);
+ }
+}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java
new file mode 100644
index 0000000..d110e89
--- /dev/null
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java
@@ -0,0 +1,32 @@
+package org.spearce.jgit.gui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CommitRow {
+ protected List<GraphCommit> left, right;
+
+ public CommitRow() {
+ left = new ArrayList<GraphCommit>();
+ right = new ArrayList<GraphCommit>();
+ }
+
+ public GraphCommit get(int index) {
+ if (index < 0) {
+ index = -1 - index;
+ return index < left.size() ? left.get(index) : null;
+ }
+ return index < right.size() ? right.get(index) : null;
+ }
+
+ public int add(GraphCommit commit, int desiredColumn) {
+ int leftIndex = -1 - desiredColumn;
+ if (Math.abs(-1 - desiredColumn - left.size()) <
+ Math.abs(desiredColumn - right.size())) {
+ left.add(commit);
+ return -left.size();
+ }
+ right.add(commit);
+ return right.size() - 1;
+ }
+}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java
new file mode 100644
index 0000000..13a5936
--- /dev/null
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java
@@ -0,0 +1,41 @@
+package org.spearce.jgit.gui;
+
+import org.spearce.jgit.lib.AnyObjectId;
+import org.spearce.jgit.revwalk.RevCommit;
+
+public class GraphCommit extends RevCommit {
+
+ protected int column = 0, row = 0;
+
+ protected int childrenCount = 0;
+ protected int cumulatedChildColumn = 0;
+
+ protected GraphCommit(final AnyObjectId id) {
+ super(id);
+ }
+
+ public void addChild(GraphCommit child) {
+ cumulatedChildColumn += child.column;
+ this.row = Math.max(this.row, child.row + 1);
+ childrenCount++;
+ }
+
+ // TODO: CommitLayout argument
+ public void calculateColumn() {
+ if (childrenCount < 0)
+ return; // already assigned
+ if (childrenCount > 0)
+ column = cumulatedChildColumn / childrenCount;
+ else
+ column = 0;
+ // TODO: ask the layout for the position
+ }
+
+ public int getColumn() {
+ return column;
+ }
+
+ public int getRow() {
+ return row;
+ }
+}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java
new file mode 100644
index 0000000..fe98df3
--- /dev/null
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java
@@ -0,0 +1,36 @@
+package org.spearce.jgit.gui;
+
+import java.io.IOException;
+
+import org.spearce.jgit.lib.AnyObjectId;
+import org.spearce.jgit.lib.Repository;
+import org.spearce.jgit.revwalk.RevSort;
+import org.spearce.jgit.revwalk.RevWalk;
+import org.spearce.jgit.revwalk.RevCommit;
+import org.spearce.jgit.errors.IncorrectObjectTypeException;
+import org.spearce.jgit.errors.MissingObjectException;
+
+public class GraphWalk extends RevWalk {
+ public GraphWalk(final Repository repo)
+ /* throws IOException, MissingObjectException */ {
+ super(repo);
+ sort(RevSort.COMMIT_TIME_DESC, true);
+ }
+
+ protected RevCommit createCommit(final AnyObjectId id) {
+ return new GraphCommit(id);
+ }
+
+ public RevCommit next() throws MissingObjectException,
+ IncorrectObjectTypeException, IOException {
+ GraphCommit commit = (GraphCommit)super.next();
+ if (commit == null)
+ return null;
+
+ // Update all parents
+ for (int i = 0; i < commit.getParentCount(); i++)
+ ((GraphCommit)commit.getParent(i)).addChild(commit);
+
+ return commit;
+ }
+}
--
1.6.3.3.644.g82c56
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [JGIT PATCH 2/3] Add license boiler-plates
2009-07-12 14:46 [JGIT PATCH 0/3] Request for help: graph-based UI Johannes Schindelin
2009-07-12 14:46 ` [JGIT PATCH 1/3] Add a rudimentary graph-based user interface Johannes Schindelin
@ 2009-07-12 14:47 ` Johannes Schindelin
2009-07-12 14:47 ` [JGIT PATCH 3/3] Introduce the command 'jgit gui' Johannes Schindelin
2009-07-21 19:40 ` [JGIT PATCH 0/3] Request for help: graph-based UI Robin Rosenberg
3 siblings, 0 replies; 8+ messages in thread
From: Johannes Schindelin @ 2009-07-12 14:47 UTC (permalink / raw)
To: git; +Cc: spearce, robin.rosenberg
Add some legalese so that sue-happy people get not that happy. This
patch is separate from the code part to help reviewers in getting
less distracted.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
.../src/org/spearce/jgit/gui/CommitGraph.java | 37 ++++++++++++++++++++
.../src/org/spearce/jgit/gui/CommitGrid.java | 37 ++++++++++++++++++++
.../src/org/spearce/jgit/gui/CommitPainter.java | 37 ++++++++++++++++++++
.../src/org/spearce/jgit/gui/CommitRow.java | 37 ++++++++++++++++++++
.../src/org/spearce/jgit/gui/GraphCommit.java | 37 ++++++++++++++++++++
.../src/org/spearce/jgit/gui/GraphWalk.java | 37 ++++++++++++++++++++
6 files changed, 222 insertions(+), 0 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java
index 0d94865..7c77c9b 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGraph.java
@@ -1,3 +1,40 @@
+/*
+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
package org.spearce.jgit.gui;
import java.awt.Dimension;
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java
index 77f56f6..379bdf3 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitGrid.java
@@ -1,3 +1,40 @@
+/*
+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
package org.spearce.jgit.gui;
import java.awt.Dimension;
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java
index 061cd2f..e67e6ab 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitPainter.java
@@ -1,3 +1,40 @@
+/*
+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
package org.spearce.jgit.gui;
import java.awt.Color;
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java
index d110e89..e3ec75f 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/CommitRow.java
@@ -1,3 +1,40 @@
+/*
+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
package org.spearce.jgit.gui;
import java.util.ArrayList;
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java
index 13a5936..6c99a4f 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphCommit.java
@@ -1,3 +1,40 @@
+/*
+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
package org.spearce.jgit.gui;
import org.spearce.jgit.lib.AnyObjectId;
diff --git a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java
index fe98df3..8297b57 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/gui/GraphWalk.java
@@ -1,3 +1,40 @@
+/*
+ * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
package org.spearce.jgit.gui;
import java.io.IOException;
--
1.6.3.3.644.g82c56
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [JGIT PATCH 3/3] Introduce the command 'jgit gui'
2009-07-12 14:46 [JGIT PATCH 0/3] Request for help: graph-based UI Johannes Schindelin
2009-07-12 14:46 ` [JGIT PATCH 1/3] Add a rudimentary graph-based user interface Johannes Schindelin
2009-07-12 14:47 ` [JGIT PATCH 2/3] Add license boiler-plates Johannes Schindelin
@ 2009-07-12 14:47 ` Johannes Schindelin
2009-07-21 19:40 ` [JGIT PATCH 0/3] Request for help: graph-based UI Robin Rosenberg
3 siblings, 0 replies; 8+ messages in thread
From: Johannes Schindelin @ 2009-07-12 14:47 UTC (permalink / raw)
To: git; +Cc: spearce, robin.rosenberg
Expose the graph-based user interface to the user. This command takes
the same arguments as 'jgit log'.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
.../services/org.spearce.jgit.pgm.TextBuiltin | 1 +
.../src/org/spearce/jgit/pgm/Gui.java | 100 ++++++++++++++++++++
2 files changed, 101 insertions(+), 0 deletions(-)
create mode 100644 org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Gui.java
diff --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
index 3a8cc09..335a643 100644
--- 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
@@ -4,6 +4,7 @@ org.spearce.jgit.pgm.Daemon
org.spearce.jgit.pgm.DiffTree
org.spearce.jgit.pgm.Fetch
org.spearce.jgit.pgm.Glog
+org.spearce.jgit.pgm.Gui
org.spearce.jgit.pgm.IndexPack
org.spearce.jgit.pgm.Init
org.spearce.jgit.pgm.Log
diff --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
new file mode 100644
index 0000000..59904a7
--- /dev/null
+++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Gui.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2009, Shawn O. Pearce <spearce@spearce.org>,
+ * Johannes E. Schindelin <johannes.schindelin@gmx.de>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.spearce.jgit.pgm;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import java.io.File;
+
+import javax.swing.JFrame;
+
+import org.spearce.jgit.gui.CommitGraph;
+import org.spearce.jgit.gui.GraphWalk;
+
+import org.spearce.jgit.revwalk.RevCommit;
+import org.spearce.jgit.revwalk.RevWalk;
+
+class Gui extends RevWalkTextBuiltin {
+ final JFrame frame;
+
+ CommitGraph graph;
+
+ Gui() {
+ frame = new JFrame();
+ frame.addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(final WindowEvent e) {
+ frame.dispose();
+ }
+ });
+ }
+
+ @Override
+ protected int walkLoop() throws Exception {
+ graph = new CommitGraph((GraphWalk)walk);
+ frame.getContentPane().add(graph);
+
+ frame.setTitle("[" + repoName() + "]");
+ frame.pack();
+ frame.setVisible(true);
+ return 0;
+ }
+
+ @Override
+ protected void show(final RevCommit c) throws Exception {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ protected RevWalk createWalk() {
+ if (objects)
+ throw die("Cannot use --objects with gui");
+ final GraphWalk w = new GraphWalk(db);
+ return w;
+ }
+
+ private String repoName() {
+ final File f = db.getDirectory();
+ String n = f.getName();
+ if (".git".equals(n))
+ n = f.getParentFile().getName();
+ return n;
+ }
+}
--
1.6.3.3.644.g82c56
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [JGIT PATCH 0/3] Request for help: graph-based UI
2009-07-12 14:46 [JGIT PATCH 0/3] Request for help: graph-based UI Johannes Schindelin
` (2 preceding siblings ...)
2009-07-12 14:47 ` [JGIT PATCH 3/3] Introduce the command 'jgit gui' Johannes Schindelin
@ 2009-07-21 19:40 ` Robin Rosenberg
2009-07-25 20:54 ` Douglas Campos
3 siblings, 1 reply; 8+ messages in thread
From: Robin Rosenberg @ 2009-07-21 19:40 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git, spearce
Diff yes, absolutely.
As for the graph, have you considered using JGraph (LGPL) or some
other graph toolkit.
I'm not sure jgit gui in any advanced version belong in jgit itself, but should
probably be a project on its' own and let jgit stay as building blocks for more
advanced stuff, such as EGit, NbGit, Gerrit and others, and of course the gui
of yours.
I'm not likely to have much time for much non-Eclipse GUI stuff, but I do
think this is a sensible project.
-- robin
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [JGIT PATCH 0/3] Request for help: graph-based UI
2009-07-21 19:40 ` [JGIT PATCH 0/3] Request for help: graph-based UI Robin Rosenberg
@ 2009-07-25 20:54 ` Douglas Campos
2009-07-25 20:59 ` Shawn O. Pearce
0 siblings, 1 reply; 8+ messages in thread
From: Douglas Campos @ 2009-07-25 20:54 UTC (permalink / raw)
To: Robin Rosenberg; +Cc: Johannes Schindelin, git, spearce
Just a question.. all graphic things that we implement in swing aren't
usable inside eclipse with swt-awt bridge?
On Tue, Jul 21, 2009 at 4:40 PM, Robin
Rosenberg<robin.rosenberg@dewire.com> wrote:
> Diff yes, absolutely.
>
> As for the graph, have you considered using JGraph (LGPL) or some
> other graph toolkit.
>
> I'm not sure jgit gui in any advanced version belong in jgit itself, but should
> probably be a project on its' own and let jgit stay as building blocks for more
> advanced stuff, such as EGit, NbGit, Gerrit and others, and of course the gui
> of yours.
>
> I'm not likely to have much time for much non-Eclipse GUI stuff, but I do
> think this is a sensible project.
>
> -- robin
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
Douglas Campos
Theros Consulting
+55 11 7626 5959
+55 11 3020 8168
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [JGIT PATCH 0/3] Request for help: graph-based UI
2009-07-25 20:54 ` Douglas Campos
@ 2009-07-25 20:59 ` Shawn O. Pearce
2009-07-25 23:20 ` Johannes Schindelin
0 siblings, 1 reply; 8+ messages in thread
From: Shawn O. Pearce @ 2009-07-25 20:59 UTC (permalink / raw)
To: Douglas Campos; +Cc: Robin Rosenberg, Johannes Schindelin, git
Douglas Campos <douglas@theros.info> wrote:
> Just a question.. all graphic things that we implement in swing aren't
> usable inside eclipse with swt-awt bridge?
They should be usuable inside the SWT-AWT bridge, but that bridge
is really dicey to get working right sometimes. I had a lot of
trouble with it at my prior day-job and am happy I no longer have
to deal with it.
For the most part, SWT and AWT are similar enough in their rendering
that its possible to build most of a layout algorithm to be rendering
API agnostic, and then permit implementation of AWT and SWT backends.
But that still is duplicated effort, vs. straightforward code reuse.
--
Shawn.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [JGIT PATCH 0/3] Request for help: graph-based UI
2009-07-25 20:59 ` Shawn O. Pearce
@ 2009-07-25 23:20 ` Johannes Schindelin
0 siblings, 0 replies; 8+ messages in thread
From: Johannes Schindelin @ 2009-07-25 23:20 UTC (permalink / raw)
To: Shawn O. Pearce; +Cc: Douglas Campos, Robin Rosenberg, git
Hi,
On Sat, 25 Jul 2009, Shawn O. Pearce wrote:
> Douglas Campos <douglas@theros.info> wrote:
> > Just a question.. all graphic things that we implement in swing aren't
> > usable inside eclipse with swt-awt bridge?
>
> They should be usuable inside the SWT-AWT bridge, but that bridge is
> really dicey to get working right sometimes. I had a lot of trouble
> with it at my prior day-job and am happy I no longer have to deal with
> it.
>
> For the most part, SWT and AWT are similar enough in their rendering
> that its possible to build most of a layout algorithm to be rendering
> API agnostic, and then permit implementation of AWT and SWT backends.
> But that still is duplicated effort, vs. straightforward code reuse.
Of course, the Graph GUI is Swing...
But I would definitely welcome if somebody made the rendering more
modular, to allow for an SWT backend.
In fact, I think I welcome almost everything people contribute to the
Graph GUI project.
Ciao,
Dscho
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-07-25 23:20 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-12 14:46 [JGIT PATCH 0/3] Request for help: graph-based UI Johannes Schindelin
2009-07-12 14:46 ` [JGIT PATCH 1/3] Add a rudimentary graph-based user interface Johannes Schindelin
2009-07-12 14:47 ` [JGIT PATCH 2/3] Add license boiler-plates Johannes Schindelin
2009-07-12 14:47 ` [JGIT PATCH 3/3] Introduce the command 'jgit gui' Johannes Schindelin
2009-07-21 19:40 ` [JGIT PATCH 0/3] Request for help: graph-based UI Robin Rosenberg
2009-07-25 20:54 ` Douglas Campos
2009-07-25 20:59 ` Shawn O. Pearce
2009-07-25 23:20 ` 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).