use of org.zmlx.hg4idea.execution.HgCommandResult in project intellij-community by JetBrains.
the class HgCherryPicker method processGrafting.
private static void processGrafting(@NotNull HgRepository repository, @NotNull List<String> hashes) {
Project project = repository.getProject();
VirtualFile root = repository.getRoot();
HgGraftCommand command = new HgGraftCommand(project, repository);
HgCommandResult result = command.startGrafting(hashes);
boolean hasConflicts = HgConflictResolver.hasConflicts(project, root);
if (!hasConflicts && HgErrorUtil.isCommandExecutionFailed(result)) {
new HgCommandResultNotifier(project).notifyError(result, "Hg Error", "Couldn't graft.");
return;
}
final UpdatedFiles updatedFiles = UpdatedFiles.create();
while (hasConflicts) {
new HgConflictResolver(project, updatedFiles).resolve(root);
hasConflicts = HgConflictResolver.hasConflicts(project, root);
if (!hasConflicts) {
result = command.continueGrafting();
hasConflicts = HgConflictResolver.hasConflicts(project, root);
} else {
new HgCommandResultNotifier(project).notifyError(result, "Hg Error", "Couldn't continue grafting");
break;
}
}
repository.update();
root.refresh(true, true);
}
use of org.zmlx.hg4idea.execution.HgCommandResult in project intellij-community by JetBrains.
the class HgChangesetsCommand method getRevisions.
protected List<HgRevisionNumber> getRevisions(VirtualFile repo) {
List<String> args = new ArrayList<>(Arrays.asList("--template", HgChangesetUtil.makeTemplate("{rev}", "{node}", "{author}", "{desc|firstline}"), "--quiet"));
addArguments(args);
HgCommandResult result = executeCommandInCurrentThread(repo, args);
if (result == null) {
return Collections.emptyList();
}
String output = result.getRawOutput();
if (StringUtil.isEmpty(output)) {
return Collections.emptyList();
}
String[] changesets = output.split(HgChangesetUtil.CHANGESET_SEPARATOR);
List<HgRevisionNumber> revisions = new ArrayList<>(changesets.length);
for (String changeset : changesets) {
List<String> parts = StringUtil.split(changeset, HgChangesetUtil.ITEM_SEPARATOR);
if (parts.size() >= 3) {
//support zero commit message
revisions.add(HgRevisionNumber.getInstance(parts.get(0), parts.get(1), parts.get(2), parts.size() > 3 ? parts.get(3) : ""));
} else {
LOG.warn("Could not parse changeset [" + changeset + "]");
}
}
return revisions;
}
use of org.zmlx.hg4idea.execution.HgCommandResult in project intellij-community by JetBrains.
the class HgPullCommand method executeInCurrentThread.
public HgCommandExitCode executeInCurrentThread() {
List<String> arguments = new LinkedList<>();
if (update) {
arguments.add("--update");
} else if (rebase) {
arguments.add("--rebase");
}
if (!StringUtil.isEmptyOrSpaces(revision)) {
arguments.add("--rev");
arguments.add(revision);
}
arguments.add(source);
final HgRemoteCommandExecutor executor = new HgRemoteCommandExecutor(project, source);
executor.setShowOutput(true);
HgCommandResult result = executor.executeInCurrentThread(repo, "pull", arguments);
if (HgErrorUtil.isAuthorizationError(result)) {
new HgCommandResultNotifier(project).notifyError(result, "Authorization required", "http authorization required for <code>" + source + "</code>");
return ERROR;
} else if (HgErrorUtil.isAbort(result) || result.getExitValue() > 1) {
//if result == null - > isAbort returns true
new HgCommandResultNotifier(project).notifyError(result, "", "Pull failed");
return ERROR;
} else if (result.getExitValue() == 1) {
return UNRESOLVED;
} else {
project.getMessageBus().syncPublisher(HgVcs.REMOTE_TOPIC).update(project, null);
return SUCCESS;
}
}
use of org.zmlx.hg4idea.execution.HgCommandResult in project intellij-community by JetBrains.
the class HgRemoteChangesetsCommand method executeCommandInCurrentThread.
@Override
protected HgCommandResult executeCommandInCurrentThread(VirtualFile repo, List<String> args) {
String repositoryURL = getRepositoryUrl(repo);
if (repositoryURL == null) {
LOG.info("executeCommand no default path configured");
return null;
}
HgRemoteCommandExecutor executor = new HgRemoteCommandExecutor(project, repositoryURL);
HgCommandResult result = executor.executeInCurrentThread(repo, command, args);
if (result == HgCommandResult.CANCELLED || HgErrorUtil.isAuthorizationError(result)) {
final HgVcs vcs = HgVcs.getInstance(project);
if (vcs == null) {
return result;
}
new HgCommandResultNotifier(project).notifyError(result, "Checking for incoming/outgoing changes disabled", "Authentication is required to check incoming/outgoing changes in " + repositoryURL + "<br/>You may enable checking for changes <a href='#'>in the Settings</a>.", new NotificationListener() {
@Override
public void hyperlinkUpdate(@NotNull Notification notification, @NotNull HyperlinkEvent event) {
ShowSettingsUtil.getInstance().showSettingsDialog(project, vcs.getConfigurable().getDisplayName());
}
});
final HgProjectSettings projectSettings = vcs.getProjectSettings();
projectSettings.setCheckIncomingOutgoing(false);
project.getMessageBus().syncPublisher(HgVcs.INCOMING_OUTGOING_CHECK_TOPIC).hide();
}
return result;
}
use of org.zmlx.hg4idea.execution.HgCommandResult in project intellij-community by JetBrains.
the class HgResolveCommand method getListAsynchronously.
public void getListAsynchronously(final VirtualFile repo, final Consumer<Map<HgFile, HgResolveStatusEnum>> resultHandler) {
if (repo == null) {
resultHandler.consume(Collections.emptyMap());
}
final HgCommandExecutor executor = new HgCommandExecutor(myProject);
executor.setSilent(true);
executor.execute(repo, "resolve", Collections.singletonList("--list"), new HgCommandResultHandler() {
@Override
public void process(@Nullable HgCommandResult result) {
if (result == null) {
resultHandler.consume(Collections.emptyMap());
}
final Map<HgFile, HgResolveStatusEnum> resolveStatus = handleResult(repo, result);
resultHandler.consume(resolveStatus);
}
});
}
Aggregations