From 9b7692e69c415e7fdd2c5b114dd464028690e425 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Mon, 9 Jul 2018 18:38:40 +0300 Subject: [PATCH] [vcs-log] read VcsCommitMetadata instead of VcsShortCommitDetails VcsCommitMetadata adds full commit message to the VcsShortCommitDetails. It can be used in places where we need full message, but not changes, like commit detail panel. HgLogProvider already reads full message, so it is not a big change. For git, commits are read from index (with full message) most of the time. In case of not indexed commits requesting commit body does not make git command significantly slower. --- .../com/intellij/vcs/log/VcsLogProvider.java | 2 +- .../vcs/log/data/MiniDetailsGetter.java | 13 +++++----- .../vcs/log/impl/TestVcsLogProvider.java | 2 +- .../src/git4idea/history/GitLogUtil.java | 25 +++++++++--------- .../src/git4idea/log/GitLogProvider.java | 2 +- .../org/zmlx/hg4idea/log/HgHistoryUtil.java | 26 +++++++++---------- .../org/zmlx/hg4idea/log/HgLogProvider.java | 4 +-- 7 files changed, 37 insertions(+), 37 deletions(-) diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProvider.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProvider.java index cfdd30fd2828..b10378f1b92a 100644 --- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProvider.java +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProvider.java @@ -77,7 +77,7 @@ public interface VcsLogProvider { * Reads those details of the given commits, which are necessary to be shown in the log table. */ @NotNull - List readShortDetails(@NotNull VirtualFile root, @NotNull List hashes) throws VcsException; + List readShortDetails(@NotNull VirtualFile root, @NotNull List hashes) throws VcsException; /** * Read full details of the given commits from the VCS. diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.java index 85d776f1ba60..bf9b2e6cf03e 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.java @@ -8,7 +8,6 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.vcs.log.VcsCommitMetadata; import com.intellij.vcs.log.VcsLogObjectsFactory; import com.intellij.vcs.log.VcsLogProvider; -import com.intellij.vcs.log.VcsShortCommitDetails; import com.intellij.vcs.log.data.index.IndexDataGetter; import com.intellij.vcs.log.data.index.IndexedDetails; import com.intellij.vcs.log.data.index.VcsLogIndex; @@ -21,7 +20,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; -public class MiniDetailsGetter extends AbstractDataGetter { +public class MiniDetailsGetter extends AbstractDataGetter { @NotNull private final TopCommitsCache myTopCommitsDetailsCache; @NotNull private final VcsLogObjectsFactory myFactory; @@ -39,26 +38,26 @@ public class MiniDetailsGetter extends AbstractDataGetter @Nullable @Override - protected VcsShortCommitDetails getFromAdditionalCache(int commitId) { + protected VcsCommitMetadata getFromAdditionalCache(int commitId) { return myTopCommitsDetailsCache.get(commitId); } @NotNull @Override - protected List readDetails(@NotNull VcsLogProvider logProvider, @NotNull VirtualFile root, - @NotNull List hashes) throws VcsException { + protected List readDetails(@NotNull VcsLogProvider logProvider, @NotNull VirtualFile root, + @NotNull List hashes) throws VcsException { return logProvider.readShortDetails(root, hashes); } @NotNull @Override - public TIntObjectHashMap preLoadCommitData(@NotNull TIntHashSet commits) throws VcsException { + public TIntObjectHashMap preLoadCommitData(@NotNull TIntHashSet commits) throws VcsException { IndexDataGetter dataGetter = myIndex.getDataGetter(); if (dataGetter == null) return super.preLoadCommitData(commits); TIntHashSet notIndexed = new TIntHashSet(); - TIntObjectHashMap result = TroveUtil.map2MapNotNull(commits, commit -> { + TIntObjectHashMap result = TroveUtil.map2MapNotNull(commits, commit -> { VcsCommitMetadata metadata = IndexedDetails.createMetadata(commit, dataGetter, myStorage, myFactory); if (metadata == null) notIndexed.add(commit); return metadata; diff --git a/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java b/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java index 291969e2bc62..55421d97cce7 100644 --- a/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java +++ b/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java @@ -141,7 +141,7 @@ public class TestVcsLogProvider implements VcsLogProvider { @NotNull @Override - public List readShortDetails(@NotNull VirtualFile root, @NotNull List hashes) { + public List readShortDetails(@NotNull VirtualFile root, @NotNull List hashes) { throw new UnsupportedOperationException(); } diff --git a/plugins/git4idea/src/git4idea/history/GitLogUtil.java b/plugins/git4idea/src/git4idea/history/GitLogUtil.java index 5d77c701c6f2..d34cfd714cdb 100644 --- a/plugins/git4idea/src/git4idea/history/GitLogUtil.java +++ b/plugins/git4idea/src/git4idea/history/GitLogUtil.java @@ -46,10 +46,10 @@ public class GitLogUtil { public static final String STDIN = "--stdin"; @NotNull - public static List collectShortDetails(@NotNull Project project, - @NotNull GitVcs vcs, - @NotNull VirtualFile root, - @NotNull List hashes) + public static List collectShortDetails(@NotNull Project project, + @NotNull GitVcs vcs, + @NotNull VirtualFile root, + @NotNull List hashes) throws VcsException { VcsLogObjectsFactory factory = getObjectsFactoryWithDisposeCheck(project); if (factory == null) { @@ -57,8 +57,8 @@ public class GitLogUtil { } GitLineHandler h = createGitHandler(project, root); - GitLogParser parser = new GitLogParser(project, GitLogParser.NameStatus.NONE, HASH, PARENTS, AUTHOR_NAME, - AUTHOR_EMAIL, COMMIT_TIME, SUBJECT, COMMITTER_NAME, COMMITTER_EMAIL, AUTHOR_TIME); + GitLogParser parser = new GitLogParser(project, GitLogParser.NameStatus.NONE, HASH, PARENTS, AUTHOR_NAME, AUTHOR_EMAIL, + COMMIT_TIME, SUBJECT, COMMITTER_NAME, COMMITTER_EMAIL, AUTHOR_TIME, BODY, RAW_BODY); h.setSilent(true); // git show can show either -p, or --name-status, or --name-only, but we need nothing, just details => using git log --no-walk h.addParameters(getNoWalkParameter(vcs)); @@ -77,10 +77,9 @@ public class GitLogUtil { parents.add(HashImpl.build(parent)); } record.setUsedHandler(h); - return factory.createShortDetails(HashImpl.build(record.getHash()), parents, record.getCommitTime(), root, - record.getSubject(), record.getAuthorName(), record.getAuthorEmail(), record.getCommitterName(), - record.getCommitterEmail(), - record.getAuthorTimeStamp()); + return factory.createCommitMetadata(HashImpl.build(record.getHash()), parents, record.getCommitTime(), root, + record.getSubject(), record.getAuthorName(), record.getAuthorEmail(), record.getFullMessage(), + record.getCommitterName(), record.getCommitterEmail(), record.getAuthorTimeStamp()); }); } @@ -167,7 +166,8 @@ public class GitLogUtil { List commits = ContainerUtil.newArrayList(); try { - GitLineHandler handler = createGitHandler(project, root, createConfigParameters(false, false, DiffRenameLimit.GIT_CONFIG), lowPriorityProcess); + GitLineHandler handler = + createGitHandler(project, root, createConfigParameters(false, false, DiffRenameLimit.GIT_CONFIG), lowPriorityProcess); readRecordsFromHandler(project, root, true, false, record -> commits.add(converter.fun(record)), handler, parameters); } catch (VcsException e) { @@ -240,7 +240,8 @@ public class GitLogUtil { @NotNull String... parameters) throws VcsException { DiffRenameLimit renameLimit = DiffRenameLimit.REGISTRY; - GitLineHandler handler = createGitHandler(project, root, createConfigParameters(true, includeRootChanges, renameLimit), lowPriorityProcess); + GitLineHandler handler = + createGitHandler(project, root, createConfigParameters(true, includeRootChanges, renameLimit), lowPriorityProcess); readFullDetailsFromHandler(project, root, commitConsumer, renameLimit, handler, preserverOrder, parameters); } diff --git a/plugins/git4idea/src/git4idea/log/GitLogProvider.java b/plugins/git4idea/src/git4idea/log/GitLogProvider.java index 8dd70a9fa774..24c79b84baf4 100644 --- a/plugins/git4idea/src/git4idea/log/GitLogProvider.java +++ b/plugins/git4idea/src/git4idea/log/GitLogProvider.java @@ -353,7 +353,7 @@ public class GitLogProvider implements VcsLogProvider { @NotNull @Override - public List readShortDetails(@NotNull final VirtualFile root, @NotNull List hashes) + public List readShortDetails(@NotNull final VirtualFile root, @NotNull List hashes) throws VcsException { return GitLogUtil.collectShortDetails(myProject, myVcs, root, hashes); } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java index 6de385611830..f3c7d8e42294 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java @@ -351,9 +351,9 @@ public class HgHistoryUtil { } @NotNull - public static List readMiniDetails(@NotNull final Project project, - @NotNull final VirtualFile root, - @NotNull List hashes) + public static List readCommitMetadata(@NotNull final Project project, + @NotNull final VirtualFile root, + @NotNull List hashes) throws VcsException { final VcsLogObjectsFactory factory = getObjectsFactoryWithDisposeCheck(project); if (factory == null) { @@ -372,15 +372,15 @@ public class HgHistoryUtil { HgCommandResult logResult = getLogResult(project, root, version, -1, strings, HgChangesetUtil.makeTemplate(templates)); - return getCommitRecords(project, logResult, new HgBaseLogParser() { + return 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) { + protected VcsCommitMetadata 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<>(); @@ -388,8 +388,8 @@ public class HgHistoryUtil { parentsHash.add(factory.createHash(parent.getChangeset())); } return factory - .createShortDetails(factory.createHash(changeset), parentsHash, revisionDate.getTime(), root, - subject, author, email, author, email, revisionDate.getTime()); + .createCommitMetadata(factory.createHash(changeset), parentsHash, revisionDate.getTime(), root, + subject, author, email, message, author, email, revisionDate.getTime()); } }); }); diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java index bdf03b777f23..d5c7d678514d 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java @@ -127,9 +127,9 @@ public class HgLogProvider implements VcsLogProvider { @NotNull @Override - public List readShortDetails(@NotNull VirtualFile root, @NotNull List hashes) + public List readShortDetails(@NotNull VirtualFile root, @NotNull List hashes) throws VcsException { - return HgHistoryUtil.readMiniDetails(myProject, root, hashes); + return HgHistoryUtil.readCommitMetadata(myProject, root, hashes); } @NotNull