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 com.intellij.util.containers.ContainerUtil; import mobi.hsz.idea.vcswatch.core.Commit; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.svn.SvnApplicationSettings; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; public class SvnWatchRequest extends VcsWatchRequest { public SvnWatchRequest(@NotNull AbstractVcs root, @NotNull VirtualFile workingDirectory) { super(root, workingDirectory); } @NotNull @Override protected String getExecutable() { return SvnApplicationSettings.getInstance().getCommandLinePath(); } @Override public void run() { // Check logs. If nothing is returned, there are not commits to pull. ProcessOutput output = exec("log", "-r", "BASE:HEAD"); if (output == null) { return; } List<String> lines = output.getStdoutLines(); String id = null; String user = null; Date date = null; String message; // Parse logs. for (int i = 3; i < lines.size(); i++) { final String line = lines.get(i); int mod = i % 3; switch (mod) { case 1: List<String> parts = ContainerUtil.newArrayList(line.split("\\s*\\|\\s*")); id = parts.get(0); user = parts.get(1); DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH); try { date = format.parse(parts.get(2)); } catch (ParseException e) { date = null; } break; case 2: message = line; assert id != null; assert date != null; addCommit(new Commit(id, user, date, message)); break; } } } }