package mobi.hsz.idea.vcswatch.requests;
import com.intellij.execution.process.ProcessOutput;
import com.intellij.openapi.vcs.AbstractVcs;
import com.intellij.openapi.vfs.VirtualFile;
import mobi.hsz.idea.vcswatch.core.Commit;
import org.jetbrains.annotations.NotNull;
import org.zmlx.hg4idea.HgVcs;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HgWatchRequest extends VcsWatchRequest {
private static final String TEMPLATE = "{node|short} {author} ## {date} ## {desc}\n";
private static final Pattern PATTERN = Pattern.compile("^(\\w+) (.*?) ## (\\d+).*? ## (.*)$", Pattern.MULTILINE);
private final HgVcs root;
public HgWatchRequest(@NotNull AbstractVcs root, @NotNull VirtualFile workingDirectory) {
super(root, workingDirectory);
this.root = (HgVcs) root;
}
@NotNull
@Override
protected String getExecutable() {
return this.root.getProjectSettings().getHgExecutable();
}
@Override
public void run() {
// Check logs. If nothing is returned, there are not commits to pull.
ProcessOutput output = exec("incoming", "--quiet", "--template", TEMPLATE);
if (output == null) {
return;
}
// Parse logs.
Matcher matcher = PATTERN.matcher(output.getStdout());
while (matcher.find()) {
String id = matcher.group(1);
String user = matcher.group(2);
Date date = new Date(Long.valueOf(matcher.group(3)) * 1000);
String message = matcher.group(4);
addCommit(new Commit(id, user, date, message));
}
}
}