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 package org.eclipse.jgit.pgm;
45
46 import java.util.ArrayList;
47 import java.util.List;
48
49 import org.eclipse.jgit.api.Git;
50 import org.eclipse.jgit.api.ResetCommand;
51 import org.eclipse.jgit.api.ResetCommand.ResetType;
52 import org.kohsuke.args4j.Argument;
53 import org.kohsuke.args4j.Option;
54 import org.kohsuke.args4j.spi.RestOfArgumentsHandler;
55
56 @Command(common = true, usage = "usage_reset")
57 class Reset extends TextBuiltin {
58
59 @Option(name = "--soft", usage = "usage_resetSoft")
60 private boolean soft = false;
61
62 @Option(name = "--mixed", usage = "usage_resetMixed")
63 private boolean mixed = false;
64
65 @Option(name = "--hard", usage = "usage_resetHard")
66 private boolean hard = false;
67
68 @Argument(required = false, index = 0, metaVar = "metaVar_commitish", usage = "usage_resetReference")
69 private String commit;
70
71 @Argument(required = false, index = 1, metaVar = "metaVar_paths")
72 @Option(name = "--", metaVar = "metaVar_paths", handler = RestOfArgumentsHandler.class)
73 private List<String> paths = new ArrayList<>();
74
75
76 @Override
77 protected void run() throws Exception {
78 try (Git git = new Git(db)) {
79 ResetCommand command = git.reset();
80 command.setRef(commit);
81 if (paths.size() > 0) {
82 for (String path : paths)
83 command.addPath(path);
84 } else {
85 ResetType mode = null;
86 if (soft)
87 mode = selectMode(mode, ResetType.SOFT);
88 if (mixed)
89 mode = selectMode(mode, ResetType.MIXED);
90 if (hard)
91 mode = selectMode(mode, ResetType.HARD);
92 if (mode == null)
93 throw die("no reset mode set");
94 command.setMode(mode);
95 }
96 command.call();
97 }
98 }
99
100 private static ResetType selectMode(ResetType mode, ResetType want) {
101 if (mode != null)
102 throw die("reset modes are mutually exclusive, select one");
103 return want;
104 }
105 }