package zielu.gittoolbox.util;
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import git4idea.GitVcs;
import git4idea.repo.GitRepository;
import git4idea.util.GitUIUtil;
import java.util.Map;
import java.util.Map.Entry;
import zielu.gittoolbox.compat.Notifier;
public class FetchResultsPerRoot {
private final Map<GitRepository, FetchResult> errorsPerRoot = Maps.newLinkedHashMap();
private boolean anyProblems;
public void add(GitRepository repository, FetchResult result) {
Preconditions.checkState(errorsPerRoot.put(repository, result) == null);
if (!result.result().isSuccess()) {
anyProblems = true;
}
}
private boolean executableValid(GitRepository repository) {
GitVcs instance = GitVcs.getInstance(repository.getProject());
return instance != null && instance.getExecutableValidator().isExecutableValid();
}
public void showProblems(Notifier notifier) {
if (anyProblems) {
boolean anyNotAuthorized = false;
boolean anyError = false;
StringBuilder message = new StringBuilder();
for (Entry<GitRepository, FetchResult> entry : errorsPerRoot.entrySet()) {
message.append(Html.br);
String boldName = GitUIUtil.bold(GtUtil.name(entry.getKey()));
FetchResult entryResult = entry.getValue();
if (entryResult.result().isCancelled()) {
message.append(boldName).append(": cancelled by user").append(entryResult.result().getAdditionalInfo());
} else if (entryResult.result().isNotAuthorized()) {
message.append(boldName).append(": couldn't authorize").append(entryResult.result().getAdditionalInfo());
anyNotAuthorized = true;
} else if (entryResult.result().isError() && executableValid(entry.getKey())) {
message.append(boldName).append(": fetch failed").append(entryResult.result().getAdditionalInfo());
anyError = true;
}
}
if (anyError || anyNotAuthorized) {
notifier.notifyWeakError("Fetch problems:" + Html.br + message.toString());
} else {
notifier.notifyMinorWarning("Fetch problems:", message.toString());
}
}
}
}