1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 package org.eclipse.jgit.pgm;
46
47 import java.awt.BorderLayout;
48 import java.awt.FlowLayout;
49 import java.awt.event.ActionEvent;
50 import java.awt.event.ActionListener;
51 import java.awt.event.WindowAdapter;
52 import java.awt.event.WindowEvent;
53 import java.io.File;
54
55 import javax.swing.JButton;
56 import javax.swing.JFrame;
57 import javax.swing.JPanel;
58 import javax.swing.JScrollPane;
59
60 import org.eclipse.jgit.awtui.CommitGraphPane;
61 import org.eclipse.jgit.lib.Constants;
62 import org.eclipse.jgit.pgm.internal.CLIText;
63 import org.eclipse.jgit.revplot.PlotWalk;
64 import org.eclipse.jgit.revwalk.RevCommit;
65 import org.eclipse.jgit.revwalk.RevSort;
66 import org.eclipse.jgit.revwalk.RevWalk;
67
68 @Command(usage = "usage_Glog")
69 class Glog extends RevWalkTextBuiltin {
70 final JFrame frame;
71
72 final CommitGraphPane graphPane;
73
74 Glog() {
75 frame = new JFrame();
76 frame.addWindowListener(new WindowAdapter() {
77 @Override
78 public void windowClosing(WindowEvent e) {
79 frame.dispose();
80 }
81 });
82
83 graphPane = new CommitGraphPane();
84
85 final JScrollPane graphScroll = new JScrollPane(graphPane);
86
87 final JPanel buttons = new JPanel(new FlowLayout());
88 final JButton repaint = new JButton();
89 repaint.setText(CLIText.get().repaint);
90 repaint.addActionListener(new ActionListener() {
91 @Override
92 public void actionPerformed(ActionEvent e) {
93 graphPane.repaint();
94 }
95 });
96 buttons.add(repaint);
97
98 final JPanel world = new JPanel(new BorderLayout());
99 world.add(buttons, BorderLayout.SOUTH);
100 world.add(graphScroll, BorderLayout.CENTER);
101
102 frame.getContentPane().add(world);
103 }
104
105
106 @Override
107 protected int walkLoop() throws Exception {
108 graphPane.getCommitList().source(walk);
109 graphPane.getCommitList().fillTo(Integer.MAX_VALUE);
110
111 frame.setTitle("[" + repoName() + "]");
112 frame.pack();
113 frame.setVisible(true);
114 return graphPane.getCommitList().size();
115 }
116
117
118 @Override
119 protected void show(RevCommit c) throws Exception {
120 throw new UnsupportedOperationException();
121 }
122
123
124 @Override
125 protected RevWalk createWalk() {
126 if (objects)
127 throw die(CLIText.get().cannotUseObjectsWithGlog);
128 final PlotWalk w = new PlotWalk(db);
129 w.sort(RevSort.BOUNDARY, true);
130 return w;
131 }
132
133 private String repoName() {
134 final File gitDir = db.getDirectory();
135 if (gitDir == null)
136 return db.toString();
137 String n = gitDir.getName();
138 if (Constants.DOT_GIT.equals(n))
139 n = gitDir.getParentFile().getName();
140 return n;
141 }
142 }