mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[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.
This commit is contained in:
@@ -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<? extends VcsShortCommitDetails> readShortDetails(@NotNull VirtualFile root, @NotNull List<String> hashes) throws VcsException;
|
||||
List<? extends VcsCommitMetadata> readShortDetails(@NotNull VirtualFile root, @NotNull List<String> hashes) throws VcsException;
|
||||
|
||||
/**
|
||||
* Read full details of the given commits from the VCS.
|
||||
|
||||
@@ -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<VcsShortCommitDetails> {
|
||||
public class MiniDetailsGetter extends AbstractDataGetter<VcsCommitMetadata> {
|
||||
|
||||
@NotNull private final TopCommitsCache myTopCommitsDetailsCache;
|
||||
@NotNull private final VcsLogObjectsFactory myFactory;
|
||||
@@ -39,26 +38,26 @@ public class MiniDetailsGetter extends AbstractDataGetter<VcsShortCommitDetails>
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected VcsShortCommitDetails getFromAdditionalCache(int commitId) {
|
||||
protected VcsCommitMetadata getFromAdditionalCache(int commitId) {
|
||||
return myTopCommitsDetailsCache.get(commitId);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected List<? extends VcsShortCommitDetails> readDetails(@NotNull VcsLogProvider logProvider, @NotNull VirtualFile root,
|
||||
@NotNull List<String> hashes) throws VcsException {
|
||||
protected List<? extends VcsCommitMetadata> readDetails(@NotNull VcsLogProvider logProvider, @NotNull VirtualFile root,
|
||||
@NotNull List<String> hashes) throws VcsException {
|
||||
return logProvider.readShortDetails(root, hashes);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public TIntObjectHashMap<VcsShortCommitDetails> preLoadCommitData(@NotNull TIntHashSet commits) throws VcsException {
|
||||
public TIntObjectHashMap<VcsCommitMetadata> preLoadCommitData(@NotNull TIntHashSet commits) throws VcsException {
|
||||
IndexDataGetter dataGetter = myIndex.getDataGetter();
|
||||
if (dataGetter == null) return super.preLoadCommitData(commits);
|
||||
|
||||
TIntHashSet notIndexed = new TIntHashSet();
|
||||
|
||||
TIntObjectHashMap<VcsShortCommitDetails> result = TroveUtil.map2MapNotNull(commits, commit -> {
|
||||
TIntObjectHashMap<VcsCommitMetadata> result = TroveUtil.map2MapNotNull(commits, commit -> {
|
||||
VcsCommitMetadata metadata = IndexedDetails.createMetadata(commit, dataGetter, myStorage, myFactory);
|
||||
if (metadata == null) notIndexed.add(commit);
|
||||
return metadata;
|
||||
|
||||
@@ -141,7 +141,7 @@ public class TestVcsLogProvider implements VcsLogProvider {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<? extends VcsShortCommitDetails> readShortDetails(@NotNull VirtualFile root, @NotNull List<String> hashes) {
|
||||
public List<? extends VcsCommitMetadata> readShortDetails(@NotNull VirtualFile root, @NotNull List<String> hashes) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
||||
@@ -46,10 +46,10 @@ public class GitLogUtil {
|
||||
public static final String STDIN = "--stdin";
|
||||
|
||||
@NotNull
|
||||
public static List<? extends VcsShortCommitDetails> collectShortDetails(@NotNull Project project,
|
||||
@NotNull GitVcs vcs,
|
||||
@NotNull VirtualFile root,
|
||||
@NotNull List<String> hashes)
|
||||
public static List<? extends VcsCommitMetadata> collectShortDetails(@NotNull Project project,
|
||||
@NotNull GitVcs vcs,
|
||||
@NotNull VirtualFile root,
|
||||
@NotNull List<String> 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<VcsCommitMetadata> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -353,7 +353,7 @@ public class GitLogProvider implements VcsLogProvider {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<? extends VcsShortCommitDetails> readShortDetails(@NotNull final VirtualFile root, @NotNull List<String> hashes)
|
||||
public List<? extends VcsCommitMetadata> readShortDetails(@NotNull final VirtualFile root, @NotNull List<String> hashes)
|
||||
throws VcsException {
|
||||
return GitLogUtil.collectShortDetails(myProject, myVcs, root, hashes);
|
||||
}
|
||||
|
||||
@@ -351,9 +351,9 @@ public class HgHistoryUtil {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static List<? extends VcsShortCommitDetails> readMiniDetails(@NotNull final Project project,
|
||||
@NotNull final VirtualFile root,
|
||||
@NotNull List<String> hashes)
|
||||
public static List<? extends VcsCommitMetadata> readCommitMetadata(@NotNull final Project project,
|
||||
@NotNull final VirtualFile root,
|
||||
@NotNull List<String> 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<VcsShortCommitDetails>() {
|
||||
return getCommitRecords(project, logResult, new HgBaseLogParser<VcsCommitMetadata>() {
|
||||
@Override
|
||||
protected VcsShortCommitDetails convertDetails(@NotNull String rev,
|
||||
@NotNull String changeset,
|
||||
@NotNull SmartList<HgRevisionNumber> parents,
|
||||
@NotNull Date revisionDate,
|
||||
@NotNull String author,
|
||||
@NotNull String email,
|
||||
@NotNull List<String> attributes) {
|
||||
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<>();
|
||||
@@ -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());
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -127,9 +127,9 @@ public class HgLogProvider implements VcsLogProvider {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<? extends VcsShortCommitDetails> readShortDetails(@NotNull VirtualFile root, @NotNull List<String> hashes)
|
||||
public List<? extends VcsCommitMetadata> readShortDetails(@NotNull VirtualFile root, @NotNull List<String> hashes)
|
||||
throws VcsException {
|
||||
return HgHistoryUtil.readMiniDetails(myProject, root, hashes);
|
||||
return HgHistoryUtil.readCommitMetadata(myProject, root, hashes);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user