Switch jgit library to the EDL (3-clause BSD)
[jgit.git] / org.spearce.jgit / src / org / spearce / jgit / pgm / Glog.java
blob984b6d8b55c82e09b887a77ba57c155d45c23081
1 /*
2 * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
4 * All rights reserved.
6 * Redistribution and use in source and binary forms, with or
7 * without modification, are permitted provided that the following
8 * conditions are met:
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * - Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
18 * - Neither the name of the Git Development Community nor the
19 * names of its contributors may be used to endorse or promote
20 * products derived from this software without specific prior
21 * written permission.
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
24 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
25 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
26 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
28 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
30 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
33 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
35 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 package org.spearce.jgit.pgm;
40 import java.awt.BorderLayout;
41 import java.awt.FlowLayout;
42 import java.awt.event.ActionEvent;
43 import java.awt.event.ActionListener;
44 import java.awt.event.WindowAdapter;
45 import java.awt.event.WindowEvent;
46 import java.io.File;
48 import javax.swing.JButton;
49 import javax.swing.JFrame;
50 import javax.swing.JPanel;
51 import javax.swing.JScrollPane;
53 import org.spearce.jgit.awtui.CommitGraphPane;
54 import org.spearce.jgit.revplot.PlotWalk;
55 import org.spearce.jgit.revwalk.RevCommit;
56 import org.spearce.jgit.revwalk.RevSort;
57 import org.spearce.jgit.revwalk.RevWalk;
59 class Glog extends RevWalkTextBuiltin {
60 final JFrame frame;
62 final CommitGraphPane graphPane;
64 Glog() {
65 frame = new JFrame();
66 frame.addWindowListener(new WindowAdapter() {
67 @Override
68 public void windowClosing(final WindowEvent e) {
69 frame.dispose();
71 });
73 graphPane = new CommitGraphPane();
75 final JScrollPane graphScroll = new JScrollPane(graphPane);
77 final JPanel buttons = new JPanel(new FlowLayout());
78 final JButton repaint = new JButton();
79 repaint.setText("Repaint");
80 repaint.addActionListener(new ActionListener() {
81 public void actionPerformed(ActionEvent e) {
82 graphPane.repaint();
84 });
85 buttons.add(repaint);
87 final JPanel world = new JPanel(new BorderLayout());
88 world.add(buttons, BorderLayout.SOUTH);
89 world.add(graphScroll, BorderLayout.CENTER);
91 frame.getContentPane().add(world);
94 @Override
95 protected int walkLoop() throws Exception {
96 graphPane.getCommitList().source(walk);
97 graphPane.getCommitList().fillTo(Integer.MAX_VALUE);
99 frame.setTitle("[" + repoName() + "]");
100 frame.pack();
101 frame.setVisible(true);
102 return graphPane.getCommitList().size();
105 @Override
106 protected void show(final RevCommit c) throws Exception {
107 throw new UnsupportedOperationException();
110 @Override
111 protected RevWalk createWalk() {
112 if (objects)
113 throw new Die("Cannot use --objects with glog");
114 final PlotWalk w = new PlotWalk(db);
115 w.sort(RevSort.BOUNDARY, true);
116 return w;
119 private String repoName() {
120 final File f = db.getDirectory();
121 String n = f.getName();
122 if (".git".equals(n))
123 n = f.getParentFile().getName();
124 return n;