Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 68d5a2e

Browse files
Reset and diff added
1 parent c3d3d88 commit 68d5a2e

File tree

2 files changed

+117
-20
lines changed

2 files changed

+117
-20
lines changed

‎app/src/processing/app/Editor.java‎

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public boolean test(Sketch sketch) {
161161

162162
static volatile AbstractMonitor serialMonitor;
163163
static AbstractMonitor serialPlotter;
164-
164+
165165
final EditorHeader header;
166166
EditorStatus status;
167167
EditorConsole console;
@@ -257,7 +257,7 @@ public void windowDeactivated(WindowEvent e) {
257257

258258
//PdeKeywords keywords = new PdeKeywords();
259259
//sketchbook = new Sketchbook(this);
260-
260+
261261
buildMenuBar();
262262

263263
// For rev 0120, placing things inside a JPanel
@@ -305,7 +305,7 @@ public void windowDeactivated(WindowEvent e) {
305305
scrollPane.setViewportBorder(BorderFactory.createEmptyBorder());
306306
scrollPane.setLineNumbersEnabled(PreferencesData.getBoolean("editor.linenumbers"));
307307
scrollPane.setIconRowHeaderEnabled(false);
308-
308+
309309
Gutter gutter = scrollPane.getGutter();
310310
gutter.setBookmarkingEnabled(false);
311311
//gutter.setBookmarkIcon(CompletionsRenderer.getIcon(CompletionType.TEMPLATE));
@@ -714,8 +714,8 @@ private JMenu buildGitMenu() {
714714

715715
item = newJMenuItem(tr("Commit"), 'C');
716716
item.addActionListener(e -> {
717-
String commitMessage = JOptionPane.showInputDialog("Commit message:");
718-
gitManager.commit(sketch.getFolder(), commitMessage);
717+
String commitMessage = JOptionPane.showInputDialog("Commit message:");
718+
gitManager.commit(sketch.getFolder(), commitMessage);
719719
});
720720
gitMenu.add(item);
721721

@@ -725,6 +725,33 @@ private JMenu buildGitMenu() {
725725
);
726726
gitMenu.add(item);
727727

728+
item = newJMenuItem(tr("Diff"), 'D');
729+
item.addActionListener(e -> {
730+
gitManager.diff(sketch.getFolder());
731+
});
732+
gitMenu.add(item);
733+
734+
item = newJMenuItem(tr("Reset"), 'R');
735+
item.addActionListener(e -> {
736+
int i = JOptionPane.showConfirmDialog(
737+
null,
738+
tr("This is revert all changes.\n Are you sure?"),
739+
tr("alert"),
740+
JOptionPane.OK_CANCEL_OPTION
741+
);
742+
if (i == JOptionPane.OK_OPTION) {
743+
gitManager.reset(sketch.getFolder(), sketch.getCurrentCode().getFile());
744+
}
745+
// Update the currently visible program with its code
746+
try {
747+
sketch.load(true);
748+
textarea.setText(sketch.getCurrentCode().getProgram());
749+
} catch (IOException e1) {
750+
e1.printStackTrace();
751+
}
752+
});
753+
gitMenu.add(item);
754+
728755
return gitMenu;
729756
}
730757

@@ -1630,7 +1657,7 @@ public void actionPerformed(ActionEvent e) {
16301657
}
16311658

16321659
protected void updateUndoState() {
1633-
1660+
16341661
UndoManager undo = textarea.getUndoManager();
16351662

16361663
if (undo.canUndo()) {
@@ -1666,7 +1693,7 @@ public void actionPerformed(ActionEvent e) {
16661693

16671694
protected void updateRedoState() {
16681695
UndoManager undo = textarea.getUndoManager();
1669-
1696+
16701697
if (undo.canRedo()) {
16711698
redoItem.setEnabled(true);
16721699
redoItem.setText(undo.getRedoPresentationName());
@@ -1829,25 +1856,25 @@ protected void setCode(final SketchCodeDocument codeDoc) {
18291856
}
18301857
// set up this guy's own undo manager
18311858
// code.undo = new UndoManager();
1832-
1859+
18331860
codeDoc.setDocument(document);
18341861
}
18351862

18361863
if(codeDoc.getUndo() == null){
18371864
codeDoc.setUndo(new LastUndoableEditAwareUndoManager(textarea, this));
18381865
document.addUndoableEditListener(codeDoc.getUndo());
18391866
}
1840-
1867+
18411868
// Update the document object that's in use
18421869
textarea.switchDocument(document, codeDoc.getUndo());
1843-
1870+
18441871
// HACK multiple tabs: for update Listeners of Gutter, forcin call: Gutter.setTextArea(RTextArea)
18451872
// BUG: https://github.com/bobbylight/RSyntaxTextArea/issues/84
18461873
scrollPane.setViewportView(textarea);
1847-
1874+
18481875
textarea.select(codeDoc.getSelectionStart(), codeDoc.getSelectionStop());
18491876
textarea.requestFocus(); // get the caret blinking
1850-
1877+
18511878
final int position = codeDoc.getScrollPosition();
18521879

18531880
// invokeLater: Expect the document to be rendered correctly to set the new position
@@ -2594,7 +2621,7 @@ public void handleSerial() {
25942621
return;
25952622
}
25962623
}
2597-
2624+
25982625
if (serialMonitor != null) {
25992626
// The serial monitor already exists
26002627

@@ -2683,7 +2710,7 @@ public void handleSerial() {
26832710
} while (serialMonitor.requiresAuthorization() && !success);
26842711

26852712
}
2686-
2713+
26872714
public void handlePlotter() {
26882715
if(serialMonitor != null) {
26892716
if(serialMonitor.isClosed()) {
@@ -2693,7 +2720,7 @@ public void handlePlotter() {
26932720
return;
26942721
}
26952722
}
2696-
2723+
26972724
if (serialPlotter != null) {
26982725
// The serial plotter already exists
26992726

@@ -3014,7 +3041,7 @@ private void configurePopupMenu(final SketchTextArea textarea){
30143041
item.setName("menuToolsAutoFormat");
30153042

30163043
menu.add(item);
3017-
3044+
30183045
item = newJMenuItem(tr("Comment/Uncomment"), '/');
30193046
item.addActionListener(new ActionListener() {
30203047
public void actionPerformed(ActionEvent e) {
@@ -3058,23 +3085,23 @@ public void actionPerformed(ActionEvent e) {
30583085

30593086
final JMenuItem referenceItem = new JMenuItem(tr("Find in Reference"));
30603087
referenceItem.addActionListener(this::handleFindReference);
3061-
menu.add(referenceItem);
3088+
menu.add(referenceItem);
30623089

30633090
final JMenuItem openURLItem = new JMenuItem(tr("Open URL"));
30643091
openURLItem.addActionListener(new ActionListener() {
30653092
public void actionPerformed(ActionEvent e) {
30663093
Base.openURL(e.getActionCommand());
30673094
}
30683095
});
3069-
menu.add(openURLItem);
3070-
3096+
menu.add(openURLItem);
3097+
30713098
menu.addPopupMenuListener(new PopupMenuListener() {
30723099

30733100
@Override
30743101
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
30753102
String referenceFile = base.getPdeKeywords().getReference(getCurrentKeyword());
30763103
referenceItem.setEnabled(referenceFile != null);
3077-
3104+
30783105
int offset = textarea.getCaretPosition();
30793106
org.fife.ui.rsyntaxtextarea.Token token = RSyntaxUtilities.getTokenAtOffset(textarea, offset);
30803107
if (token != null && token.isHyperlink()) {
@@ -3107,4 +3134,6 @@ public void goToLine(int line) {
31073134
}
31083135
}
31093136

3137+
3138+
31103139
}

‎app/src/processing/app/git/GitManager.java‎

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,25 @@
33
import org.eclipse.jgit.api.Git;
44
import org.eclipse.jgit.api.errors.GitAPIException;
55
import org.eclipse.jgit.api.errors.NoHeadException;
6+
import org.eclipse.jgit.diff.DiffEntry;
7+
import org.eclipse.jgit.diff.DiffFormatter;
68
import org.eclipse.jgit.errors.RepositoryNotFoundException;
9+
import org.eclipse.jgit.lib.Constants;
10+
import org.eclipse.jgit.lib.ObjectReader;
711
import org.eclipse.jgit.lib.Repository;
812
import org.eclipse.jgit.revwalk.RevCommit;
13+
import org.eclipse.jgit.revwalk.RevTree;
14+
import org.eclipse.jgit.revwalk.RevWalk;
915
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
16+
import org.eclipse.jgit.treewalk.AbstractTreeIterator;
17+
import org.eclipse.jgit.treewalk.CanonicalTreeParser;
18+
import org.eclipse.jgit.treewalk.FileTreeIterator;
1019

1120
import java.io.File;
1221
import java.io.IOException;
22+
import java.nio.file.Path;
23+
import java.nio.file.Paths;
24+
import java.util.List;
1325
import java.util.function.Consumer;
1426

1527

@@ -23,6 +35,62 @@ public void init(File repoDir) {
2335
}
2436
}
2537

38+
public void reset(File repoDir, File file) {
39+
Consumer<Git> resetCommand = git -> {
40+
try {
41+
// We need get relative repository path
42+
Path pathAbsolute = Paths.get(file.getPath());
43+
Path pathBase = Paths.get(repoDir.getPath());
44+
Path pathRelative = pathBase.relativize(pathAbsolute);
45+
46+
git.checkout().addPath(pathRelative.toString()).call();
47+
48+
System.out.println("Reset file " + file.getName());
49+
} catch (GitAPIException e) {
50+
e.printStackTrace();
51+
}
52+
};
53+
runGitCommand(repoDir, resetCommand);
54+
}
55+
56+
public void diff(File repoDir) {
57+
Consumer<Git> commitCommand = git -> {
58+
try {
59+
DiffFormatter diffFormatter = new DiffFormatter(System.out);
60+
diffFormatter.setRepository(git.getRepository());
61+
AbstractTreeIterator commitTreeIterator = prepareTreeParser(git.getRepository(), Constants.HEAD);
62+
FileTreeIterator workTreeIterator = new FileTreeIterator(git.getRepository());
63+
List<DiffEntry> diffEntries = diffFormatter.scan(commitTreeIterator, workTreeIterator);
64+
65+
for (DiffEntry entry : diffEntries) {
66+
System.out.printf("Entry: %s, from: %s, to: %s%n", entry, entry.getOldId(), entry.getNewId());
67+
diffFormatter.format(entry);
68+
}
69+
System.out.println("Diff in " + repoDir);
70+
} catch (IOException e) {
71+
e.printStackTrace();
72+
}
73+
};
74+
runGitCommand(repoDir, commitCommand);
75+
}
76+
77+
private AbstractTreeIterator prepareTreeParser(Repository repository, String objectId) throws IOException {
78+
// from the commit we can build the tree which allows us to construct the TreeParser
79+
try (RevWalk walk = new RevWalk(repository)) {
80+
RevCommit commit = walk.parseCommit(repository.resolve(objectId));
81+
RevTree tree = walk.parseTree(commit.getTree().getId());
82+
83+
CanonicalTreeParser oldTreeParser = new CanonicalTreeParser();
84+
try (ObjectReader oldReader = repository.newObjectReader()) {
85+
oldTreeParser.reset(oldReader, tree.getId());
86+
}
87+
88+
walk.dispose();
89+
90+
return oldTreeParser;
91+
}
92+
}
93+
2694
public void commit(File repoDir, String message) {
2795
if (!commitMessageIsValid(message)) {
2896
System.err.println("Commit message isn't valid.");

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /