package zielu.gittoolbox.status; import com.intellij.openapi.util.Key; import com.intellij.vcs.log.Hash; import git4idea.commands.GitLineHandlerListener; import org.jetbrains.annotations.Nullable; import zielu.gittoolbox.util.GtUtil; public class GitRevListLeftRightCounter implements GitLineHandlerListener { private int ahead = 0; private Hash aheadHash; private int behind = 0; private Hash behindHash; private int exitCode; @Nullable private Throwable error; @Override public void onLineAvailable(String line, Key outputType) { if (aheadLine(line)) { ahead++; if (aheadHash == null) { aheadHash = hashFromLine(line); } } else if (behindLine(line)) { behind++; if (behindHash == null) { behindHash = hashFromLine(line); } } } private boolean aheadLine(String line) { return line.startsWith("<"); } private boolean behindLine(String line) { return line.startsWith(">"); } private Hash hashFromLine(String line) { return GtUtil.hash(line.substring(1)); } public int ahead() { return ahead; } public int behind() { return behind; } @Nullable public Hash aheadTop() { return aheadHash; } @Nullable public Hash behindTop() { return behindHash; } public boolean isSuccess() { return exitCode == 0 && error == null; } @Override public void processTerminated(int exitCode) { this.exitCode = exitCode; } @Override public void startFailed(Throwable throwable) { error = throwable; } }