From 2c4f1f00aeda35d79bcb65d0457521902829ecbe Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Wed, 13 Jun 2018 04:50:05 +0300 Subject: [PATCH] [vcs-log] only work with VcsIndexableDetails in path index --- .../data/index/VcsLogFullDetailsIndex.java | 24 +++++++-------- .../index/VcsLogMessagesTrigramIndex.java | 2 +- .../data/index/VcsLogPathsForwardIndex.java | 3 +- .../vcs/log/data/index/VcsLogPathsIndex.java | 29 +++++-------------- .../log/data/index/VcsLogPersistentIndex.java | 2 +- .../vcs/log/data/index/VcsLogUserIndex.java | 2 +- 6 files changed, 25 insertions(+), 37 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogFullDetailsIndex.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogFullDetailsIndex.java index 7e60fc8cddce..64fb9e27fc43 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogFullDetailsIndex.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogFullDetailsIndex.java @@ -39,18 +39,18 @@ import java.util.Set; import java.util.function.BiPredicate; import java.util.function.ObjIntConsumer; -public class VcsLogFullDetailsIndex implements Disposable { +public class VcsLogFullDetailsIndex implements Disposable { protected static final String INDEX = "index"; @NotNull protected final MyMapReduceIndex myMapReduceIndex; @NotNull protected final StorageId myStorageId; @NotNull protected final String myName; - @NotNull protected final DataIndexer myIndexer; + @NotNull protected final DataIndexer myIndexer; @NotNull private final FatalErrorHandler myFatalErrorHandler; private volatile boolean myDisposed = false; public VcsLogFullDetailsIndex(@NotNull StorageId storageId, @NotNull String name, - @NotNull DataIndexer indexer, + @NotNull DataIndexer indexer, @NotNull DataExternalizer externalizer, @NotNull FatalErrorHandler fatalErrorHandler, @NotNull Disposable disposableParent) @@ -67,13 +67,13 @@ public class VcsLogFullDetailsIndex implements Disposable { @NotNull private MyMapReduceIndex createMapReduceIndex(@NotNull DataExternalizer dataExternalizer) throws IOException { - MyIndexExtension extension = new MyIndexExtension<>(myName, myIndexer, dataExternalizer, myStorageId.getVersion()); + MyIndexExtension extension = new MyIndexExtension<>(myName, myIndexer, dataExternalizer, myStorageId.getVersion()); ForwardIndex forwardIndex = createForwardIndex(extension); return new MyMapReduceIndex(extension, new MyMapIndexStorage<>(myName, myStorageId, dataExternalizer), forwardIndex); } @NotNull - protected ForwardIndex createForwardIndex(@NotNull IndexExtension extension) + protected ForwardIndex createForwardIndex(@NotNull IndexExtension extension) throws IOException { return new EmptyForwardIndex<>(); } @@ -126,7 +126,7 @@ public class VcsLogFullDetailsIndex implements Disposable { return index.getInput(commit); } - public void update(int commitId, @NotNull VcsFullCommitDetails details) { + public void update(int commitId, @NotNull D details) { checkDisposed(); myMapReduceIndex.update(commitId, details).compute(); } @@ -146,8 +146,8 @@ public class VcsLogFullDetailsIndex implements Disposable { if (myDisposed) throw new ProcessCanceledException(); } - private class MyMapReduceIndex extends MapReduceIndex { - public MyMapReduceIndex(@NotNull MyIndexExtension extension, + private class MyMapReduceIndex extends MapReduceIndex { + public MyMapReduceIndex(@NotNull MyIndexExtension extension, @NotNull MyMapIndexStorage mapIndexStorage, @NotNull ForwardIndex forwardIndex) { super(extension, mapIndexStorage, forwardIndex); @@ -184,13 +184,13 @@ public class VcsLogFullDetailsIndex implements Disposable { } } - private static class MyIndexExtension extends IndexExtension { + private static class MyIndexExtension extends IndexExtension { @NotNull private final IndexId myID; - @NotNull private final DataIndexer myIndexer; + @NotNull private final DataIndexer myIndexer; @NotNull private final DataExternalizer myExternalizer; private final int myVersion; - public MyIndexExtension(@NotNull String name, @NotNull DataIndexer indexer, + public MyIndexExtension(@NotNull String name, @NotNull DataIndexer indexer, @NotNull DataExternalizer externalizer, int version) { myID = IndexId.create(name); @@ -207,7 +207,7 @@ public class VcsLogFullDetailsIndex implements Disposable { @NotNull @Override - public DataIndexer getIndexer() { + public DataIndexer getIndexer() { return myIndexer; } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogMessagesTrigramIndex.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogMessagesTrigramIndex.java index 92146842ad36..01d2e75c6883 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogMessagesTrigramIndex.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogMessagesTrigramIndex.java @@ -31,7 +31,7 @@ import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.util.Map; -public class VcsLogMessagesTrigramIndex extends VcsLogFullDetailsIndex { +public class VcsLogMessagesTrigramIndex extends VcsLogFullDetailsIndex { public static final String TRIGRAMS = "trigrams"; public VcsLogMessagesTrigramIndex(@NotNull StorageId storageId, diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPathsForwardIndex.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPathsForwardIndex.java index 813afb23af0a..2830dcbd728c 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPathsForwardIndex.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPathsForwardIndex.java @@ -12,6 +12,7 @@ import com.intellij.util.indexing.impl.RemovedKeyProcessor; import com.intellij.util.io.DataExternalizer; import com.intellij.util.io.DataInputOutputUtil; import com.intellij.vcs.log.VcsFullCommitDetails; +import com.intellij.vcs.log.impl.VcsIndexableDetails; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -26,7 +27,7 @@ import java.util.Set; public abstract class VcsLogPathsForwardIndex extends MapBasedForwardIndex, List>> { - protected VcsLogPathsForwardIndex(@NotNull IndexExtension, VcsFullCommitDetails> extension) + protected VcsLogPathsForwardIndex(@NotNull IndexExtension, VcsIndexableDetails> extension) throws IOException { super(extension); } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPathsIndex.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPathsIndex.java index b082e2f63c74..56f851fffed6 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPathsIndex.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPathsIndex.java @@ -22,7 +22,6 @@ import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vcs.FilePath; -import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Consumer; import com.intellij.util.PathUtil; @@ -54,7 +53,7 @@ import java.util.function.ObjIntConsumer; import static com.intellij.util.containers.ContainerUtil.newTroveSet; -public class VcsLogPathsIndex extends VcsLogFullDetailsIndex> { +public class VcsLogPathsIndex extends VcsLogFullDetailsIndex, VcsIndexableDetails> { private static final Logger LOG = Logger.getInstance(VcsLogPathsIndex.class); public static final String PATHS = "paths"; public static final String INDEX_PATHS_IDS = "paths-ids"; @@ -74,7 +73,7 @@ public class VcsLogPathsIndex extends VcsLogFullDetailsIndex> createForwardIndex(@NotNull IndexExtension, VcsFullCommitDetails> extension) + protected ForwardIndex> createForwardIndex(@NotNull IndexExtension, VcsIndexableDetails> extension) throws IOException { if (!VcsLogIndexService.isPathsForwardIndexRequired()) return super.createForwardIndex(extension); return new VcsLogPathsForwardIndex(extension) { @@ -253,7 +252,7 @@ public class VcsLogPathsIndex extends VcsLogFullDetailsIndex, VcsFullCommitDetails> { + private static class PathsIndexer implements DataIndexer, VcsIndexableDetails> { @NotNull private final PersistentEnumeratorBase myPathsEnumerator; @NotNull private final Set myRoots; @NotNull private Consumer myFatalErrorConsumer = LOG::error; @@ -272,28 +271,16 @@ public class VcsLogPathsIndex extends VcsLogFullDetailsIndex> map(@NotNull VcsFullCommitDetails inputData) { + public Map> map(@NotNull VcsIndexableDetails inputData) { Map> result = new THashMap<>(); // its not exactly parents count since it is very convenient to assume that initial commit has one parent int parentsCount = inputData.getParents().isEmpty() ? 1 : inputData.getParents().size(); for (int parent = 0; parent < parentsCount; parent++) { - Collection> moves = ContainerUtil.newHashSet(); - Collection changedPaths = ContainerUtil.newHashSet(); - if (inputData instanceof VcsIndexableDetails) { - changedPaths.addAll(toLightPaths(((VcsIndexableDetails)inputData).getModifiedPaths(parent))); - moves.addAll(ContainerUtil.map(((VcsIndexableDetails)inputData).getRenamedPaths(parent), - rename -> toLightPathCouple(rename.first, rename.second))); - } - else { - for (Change change : inputData.getChanges()) { - if (change.getAfterRevision() != null) changedPaths.add(new LightFilePath(change.getAfterRevision().getFile())); - if (change.getBeforeRevision() != null) changedPaths.add(new LightFilePath(change.getBeforeRevision().getFile())); - if (change.getType().equals(Change.Type.MOVED)) { - moves.add(toLightPathCouple(change.getBeforeRevision().getFile().getPath(), change.getAfterRevision().getFile().getPath())); - } - } - } + Collection> moves = ContainerUtil.newHashSet(ContainerUtil.map(inputData.getRenamedPaths(parent), + rename -> toLightPathCouple(rename.first, + rename.second))); + Collection changedPaths = ContainerUtil.newHashSet(toLightPaths(inputData.getModifiedPaths(parent))); int finalParent = parent; moves.forEach(move -> { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPersistentIndex.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPersistentIndex.java index 8e05dd668f5b..0ed8632793b9 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPersistentIndex.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogPersistentIndex.java @@ -181,7 +181,7 @@ public class VcsLogPersistentIndex implements VcsLogModifiableIndex, Disposable myIndexStorage.messages.put(index, detail.getFullMessage()); myIndexStorage.trigrams.update(index, detail); myIndexStorage.users.update(index, detail); - myIndexStorage.paths.update(index, detail); + if (detail instanceof VcsIndexableDetails) myIndexStorage.paths.update(index, (VcsIndexableDetails)detail); myIndexStorage.parents.put(index, ContainerUtil.map(detail.getParents(), p -> myStorage.getCommitIndex(p, detail.getRoot()))); // we know the whole graph without timestamps now if (!(detail instanceof VcsIndexableDetails) || ((VcsIndexableDetails)detail).hasRenames()) { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogUserIndex.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogUserIndex.java index 861e9db07b17..9dc2c5fd0788 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogUserIndex.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/index/VcsLogUserIndex.java @@ -44,7 +44,7 @@ import java.util.Set; import static com.intellij.util.ObjectUtils.notNull; import static com.intellij.util.containers.ContainerUtil.getFirstItem; -public class VcsLogUserIndex extends VcsLogFullDetailsIndex { +public class VcsLogUserIndex extends VcsLogFullDetailsIndex { private static final Logger LOG = Logger.getInstance(VcsLogUserIndex.class); public static final String USERS = "users"; @NotNull private final VcsUserRegistryImpl myUserRegistry;