package ilarkesto.scm.svn;
import ilarkesto.scm.AScmProject;
import ilarkesto.scm.AScmTool;
import ilarkesto.xml.JDom;
import java.io.File;
public class SvnProject extends AScmProject {
SvnProject(AScmTool workspace, File dir) {
super(workspace, dir);
}
@Override
public boolean isDirty() {
String output = exec("status");
output = output.trim();
return output.length() > 0;
}
@Override
public String getLogAndDiffSince(String version) {
if (version == null) version = "PREV";
StringBuilder sb = new StringBuilder();
sb.append("# Log since ").append(version).append(":\n\n");
sb.append(getLogSince(version));
sb.append("\n# Diff since ").append(version).append(":\n\n");
sb.append(getDiffSince(version));
return sb.toString();
}
public String getLogSince(String version) {
if (version == null) throw new IllegalArgumentException("version == null");
return exec("log", "--non-interactive", "-r", version + ":BASE");
}
public String getDiffSince(String version) {
if (version == null) throw new IllegalArgumentException("version == null");
return exec("diff", "--non-interactive", "-r", version);
}
@Override
public boolean pullFromOrigin() {
String output = exec("update", "--non-interactive");
output = output.trim();
return !output.startsWith("At revision ");
}
@Override
public String getVersion() {
String xml = exec("info", "--non-interactive", "--xml");
return JDom.getChildAttributeValue(JDom.createDocument(xml), "entry", "revision");
}
private synchronized String exec(String... parameters) {
return getTool().exec(getDir(), parameters);
}
@Override
public Svn getTool() {
return (Svn) super.getTool();
}
}