use of org.zmlx.hg4idea.execution.HgCommandResult in project intellij-community by JetBrains.
the class HgHistoryUtil method loadMetadata.
@NotNull
public static List<VcsCommitMetadata> loadMetadata(@NotNull final Project project, @NotNull final VirtualFile root, int limit, @NotNull List<String> parameters) throws VcsException {
final VcsLogObjectsFactory factory = getObjectsFactoryWithDisposeCheck(project);
if (factory == null) {
return Collections.emptyList();
}
HgVcs hgvcs = HgVcs.getInstance(project);
assert hgvcs != null;
HgVersion version = hgvcs.getVersion();
List<String> templateList = HgBaseLogParser.constructDefaultTemplate(version);
templateList.add("{desc}");
String[] templates = ArrayUtil.toStringArray(templateList);
HgCommandResult result = getLogResult(project, root, version, limit, parameters, HgChangesetUtil.makeTemplate(templates));
HgBaseLogParser<VcsCommitMetadata> baseParser = new HgBaseLogParser<VcsCommitMetadata>() {
@Override
protected VcsCommitMetadata convertDetails(@NotNull String rev, @NotNull String changeset, @NotNull SmartList<HgRevisionNumber> parents, @NotNull Date revisionDate, @NotNull String author, @NotNull String email, @NotNull List<String> attributes) {
String message = parseAdditionalStringAttribute(attributes, MESSAGE_INDEX);
String subject = extractSubject(message);
List<Hash> parentsHash = new SmartList<>();
for (HgRevisionNumber parent : parents) {
parentsHash.add(factory.createHash(parent.getChangeset()));
}
return factory.createCommitMetadata(factory.createHash(changeset), parentsHash, revisionDate.getTime(), root, subject, author, email, message, author, email, revisionDate.getTime());
}
};
return getCommitRecords(project, result, baseParser);
}
use of org.zmlx.hg4idea.execution.HgCommandResult in project intellij-community by JetBrains.
the class HgHistoryUtil method getDescendingHeadsOfBranches.
@NotNull
public static Collection<String> getDescendingHeadsOfBranches(@NotNull Project project, @NotNull VirtualFile root, @NotNull Hash hash) throws VcsException {
//hg log -r "descendants(659db54c1b6865c97c4497fa867194bcd759ca76) and head()" --template "{branch}{bookmarks}"
Set<String> branchHeads = new HashSet<>();
List<String> params = new ArrayList<>();
params.add("-r");
params.add("descendants(" + hash.asString() + ") and head()");
HgLogCommand hgLogCommand = new HgLogCommand(project);
hgLogCommand.setLogFile(false);
String template = HgChangesetUtil.makeTemplate("{branch}", "{bookmarks}");
HgCommandResult logResult = hgLogCommand.execute(root, template, -1, null, params);
if (logResult == null || logResult.getExitValue() != 0) {
throw new VcsException("Couldn't get commit details: log command execution error.");
}
String output = logResult.getRawOutput();
List<String> changeSets = StringUtil.split(output, HgChangesetUtil.CHANGESET_SEPARATOR);
for (String line : changeSets) {
List<String> attributes = StringUtil.split(line, HgChangesetUtil.ITEM_SEPARATOR);
branchHeads.addAll(attributes);
}
return branchHeads;
}
use of org.zmlx.hg4idea.execution.HgCommandResult in project intellij-community by JetBrains.
the class HgHistoryUtil method history.
/**
* <p>Get & parse hg log detailed output with commits, their parents and their changes.
* For null destination return log command result</p>
* <p/>
* <p>Warning: this is method is efficient by speed, but don't query too much, because the whole log output is retrieved at once,
* and it can occupy too much memory. The estimate is ~600Kb for 1000 commits.</p>
*/
@NotNull
public static List<? extends VcsFullCommitDetails> history(@NotNull final Project project, @NotNull final VirtualFile root, final int limit, @NotNull List<String> hashParameters, final boolean silent) throws VcsException {
HgVcs hgvcs = HgVcs.getInstance(project);
assert hgvcs != null;
final HgVersion version = hgvcs.getVersion();
final String[] templates = HgBaseLogParser.constructFullTemplateArgument(true, version);
return VcsFileUtil.foreachChunk(hashParameters, 2, strings -> {
HgCommandResult logResult = getLogResult(project, root, version, limit, strings, HgChangesetUtil.makeTemplate(templates));
if (logResult == null)
return Collections.emptyList();
if (!logResult.getErrorLines().isEmpty())
throw new VcsException(logResult.getRawError());
return createFullCommitsFromResult(project, root, logResult, version, silent);
});
}
use of org.zmlx.hg4idea.execution.HgCommandResult in project intellij-community by JetBrains.
the class HgInitCommand method executeAsynchronously.
public void executeAsynchronously(@NotNull VirtualFile repositoryRoot, final HgCommandResultHandler resultHandler) {
final List<String> args = new ArrayList<>(1);
args.add(repositoryRoot.getPath());
final HgCommandExecutor executor = new HgCommandExecutor(myProject, repositoryRoot.getPath());
executor.setShowOutput(true);
executor.execute(null, "init", args, new HgCommandResultHandler() {
@Override
public void process(@Nullable HgCommandResult result) {
resultHandler.process(result);
}
});
}
use of org.zmlx.hg4idea.execution.HgCommandResult in project intellij-community by JetBrains.
the class HgMergeCommand method mergeWith.
public static void mergeWith(@NotNull final HgRepository repository, @NotNull final String branchName, @NotNull final UpdatedFiles updatedFiles, @Nullable final Runnable onSuccessHandler) {
final Project project = repository.getProject();
final VirtualFile repositoryRoot = repository.getRoot();
final HgMergeCommand hgMergeCommand = new HgMergeCommand(project, repository);
//there is no difference between branch or revision or bookmark as parameter to merge,
hgMergeCommand.setRevision(branchName);
// we need just a string
new Task.Backgroundable(project, "Merging Changes...") {
@Override
public void run(@NotNull ProgressIndicator indicator) {
try {
HgCommandResult result = hgMergeCommand.mergeSynchronously();
if (HgErrorUtil.isAncestorMergeError(result)) {
//skip and notify
VcsNotifier.getInstance(project).notifyMinorWarning("Merging is skipped for " + repositoryRoot.getPresentableName(), "Merging with a working directory ancestor has no effect");
return;
}
new HgConflictResolver(project, updatedFiles).resolve(repositoryRoot);
if (!HgConflictResolver.hasConflicts(project, repositoryRoot) && onSuccessHandler != null) {
// for example commit changes
onSuccessHandler.run();
}
} catch (VcsException exception) {
if (exception.isWarning()) {
VcsNotifier.getInstance(project).notifyWarning("Warning during merge", exception.getMessage());
} else {
VcsNotifier.getInstance(project).notifyError("Exception during merge", exception.getMessage());
}
}
}
}.queue();
}
Aggregations