From 937ddd2ef6fdd84c18ce037e4fb7b7ffdfbb8af1 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 3 Sep 2015 21:23:10 +0300 Subject: [PATCH] [hg] load short and full details in chunks --- .../org/zmlx/hg4idea/log/HgHistoryUtil.java | 70 ++++++++++++------- 1 file changed, 45 insertions(+), 25 deletions(-) diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java index ac15597263ac..e8b2084f1ae4 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java @@ -35,6 +35,7 @@ import com.intellij.util.Function; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import com.intellij.vcs.log.*; +import com.intellij.vcsUtil.VcsFileUtil; import com.intellij.vcsUtil.VcsUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -98,8 +99,8 @@ public class HgHistoryUtil { public static List history(@NotNull final Project project, @NotNull final VirtualFile root, int limit, - @NotNull List parameters) throws VcsException { - return history(project, root, limit, parameters, false); + @NotNull List hashParameters) throws VcsException { + return history(project, root, limit, hashParameters, false); } /** @@ -113,14 +114,22 @@ public class HgHistoryUtil { public static List history(@NotNull final Project project, @NotNull final VirtualFile root, int limit, - @NotNull List parameters, + @NotNull List hashParameters, boolean silent) throws VcsException { HgVcs hgvcs = HgVcs.getInstance(project); assert hgvcs != null; final HgVersion version = hgvcs.getVersion(); String[] templates = HgBaseLogParser.constructFullTemplateArgument(true, version); - HgCommandResult result = getLogResult(project, root, version, limit, parameters, HgChangesetUtil.makeTemplate(templates)); - return createFullCommitsFromResult(project, root, result, version, silent); + + List result = ContainerUtil.newArrayList(); + List> hashesChunks = VcsFileUtil.chunkRelativePaths(hashParameters); + + for (List hashesChunk : hashesChunks) { + HgCommandResult logResult = getLogResult(project, root, version, limit, hashesChunk, HgChangesetUtil.makeTemplate(templates)); + result.addAll(createFullCommitsFromResult(project, root, logResult, version, silent)); + } + + return result; } public static List createFullCommitsFromResult(@NotNull Project project, @@ -243,33 +252,44 @@ public class HgHistoryUtil { if (factory == null) { return Collections.emptyList(); } + HgVcs hgvcs = HgVcs.getInstance(project); assert hgvcs != null; HgVersion version = hgvcs.getVersion(); List templateList = HgBaseLogParser.constructDefaultTemplate(version); templateList.add("{desc}"); String[] templates = ArrayUtil.toStringArray(templateList); - HgCommandResult result = getLogResult(project, root, version, -1, prepareHashes(hashes), HgChangesetUtil.makeTemplate(templates)); - return getCommitRecords(project, result, new HgBaseLogParser() { - @Override - protected VcsShortCommitDetails convertDetails(@NotNull String rev, - @NotNull String changeset, - @NotNull SmartList parents, - @NotNull Date revisionDate, - @NotNull String author, - @NotNull String email, - @NotNull List attributes) { - String message = parseAdditionalStringAttribute(attributes, MESSAGE_INDEX); - String subject = extractSubject(message); - List parentsHash = new SmartList(); - for (HgRevisionNumber parent : parents) { - parentsHash.add(factory.createHash(parent.getChangeset())); + + List result = ContainerUtil.newArrayList(); + List> hashesChunks = VcsFileUtil.chunkRelativePaths(hashes); + + for (List hashesChunk : hashesChunks) { + HgCommandResult logResult = + getLogResult(project, root, version, -1, prepareHashes(hashesChunk), HgChangesetUtil.makeTemplate(templates)); + + result.addAll(getCommitRecords(project, logResult, new HgBaseLogParser() { + @Override + protected VcsShortCommitDetails convertDetails(@NotNull String rev, + @NotNull String changeset, + @NotNull SmartList parents, + @NotNull Date revisionDate, + @NotNull String author, + @NotNull String email, + @NotNull List attributes) { + String message = parseAdditionalStringAttribute(attributes, MESSAGE_INDEX); + String subject = extractSubject(message); + List parentsHash = new SmartList(); + for (HgRevisionNumber parent : parents) { + parentsHash.add(factory.createHash(parent.getChangeset())); + } + return factory + .createShortDetails(factory.createHash(changeset), parentsHash, revisionDate.getTime(), root, subject, author, email, author, + email, revisionDate.getTime()); } - return factory.createShortDetails(factory.createHash(changeset), parentsHash, - revisionDate.getTime(), root, - subject, author, email, author, email, revisionDate.getTime()); - } - }); + })); + } + + return result; } @NotNull