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(final 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 @Override
106 protected int walkLoop() throws Exception {
107 graphPane.getCommitList().source(walk);
108 graphPane.getCommitList().fillTo(Integer.MAX_VALUE);
109
110 frame.setTitle("[" + repoName() + "]");
111 frame.pack();
112 frame.setVisible(true);
113 return graphPane.getCommitList().size();
114 }
115
116 @Override
117 protected void show(final RevCommit c) throws Exception {
118 throw new UnsupportedOperationException();
119 }
120
121 @Override
122 protected RevWalk createWalk() {
123 if (objects)
124 throw die(CLIText.get().cannotUseObjectsWithGlog);
125 final PlotWalk w = new PlotWalk(db);
126 w.sort(RevSort.BOUNDARY, true);
127 return w;
128 }
129
130 private String repoName() {
131 final File gitDir = db.getDirectory();
132 if (gitDir == null)
133 return db.toString();
134 String n = gitDir.getName();
135 if (Constants.DOT_GIT.equals(n))
136 n = gitDir.getParentFile().getName();
137 return n;
138 }
139 }