forked from hogi/ilarkesto
-
Notifications
You must be signed in to change notification settings - Fork 57
/
GitProject.java
125 lines (102 loc) · 3.1 KB
/
GitProject.java
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
* Copyright 2011 Witoslaw Koczewsi <wi@koczewski.de>, Artjom Kochtchi
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero
* General Public License as published by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
* License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
package ilarkesto.integration.git;
import ilarkesto.core.base.Args;
import ilarkesto.scm.AScmProject;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class GitProject extends AScmProject {
public GitProject(Git tool, File dir) {
super(tool, dir);
}
public boolean isInitialized() {
return getGitDir().exists();
}
public File getGitDir() {
return new File(getDir().getPath() + "/.git");
}
@Override
public boolean isDirty() {
String output = exec("status");
return !output.contains("nothing to commit (working directory clean)");
}
@Override
public String getLogAndDiffSince(String version) {
throw new RuntimeException("Not implemented yet.");
}
@Override
public String getVersion() {
throw new RuntimeException("Not implemented yet.");
}
public boolean pull(String remote, boolean ffOnly) {
List<String> params = new ArrayList<String>();
params.add("pull");
if (ffOnly) params.add("--ff-only");
if (remote != null) params.add(remote);
String output = exec(params);
output = output.trim();
return !output.equals("Already up-to-date.");
}
@Override
public boolean pullFromOrigin() {
return pull(null, true);
}
private synchronized String exec(String... parameters) {
return getTool().exec(getDir(), parameters);
}
private synchronized String exec(List<String> parameters) {
return exec(parameters);
}
@Override
public Git getTool() {
return (Git) super.getTool();
}
public void add(List<File> files) {
List<String> params = new ArrayList<String>(files.size() + 1);
params.add("add");
for (File file : files) {
params.add(file.getAbsolutePath());
}
exec(params.toArray(new String[params.size()]));
}
public void addAll() {
exec("add", "--all");
}
public void commit(String comment) {
Args.assertNotNull(comment, "comment");
exec("commit", "-m", comment);
}
public String status() {
return exec("status");
}
public void deleteIndexLock() {
new File(getGitDir().getPath() + "/index.lock").delete();
}
public void push(String repository, String branch) {
exec("push", repository, branch);
}
public void fetchAll() {
exec("fetch", "--all");
}
public void merge(String branch, boolean ffOnly) {
Args.assertNotNull(branch, "branch");
List<String> params = new ArrayList<String>();
params.add("merge");
params.add(branch);
if (ffOnly) params.add("--ff-only");
exec(params);
}
}