[file-history] show file name in the root column of file history

GitOrigin-RevId: 8c90f37a08a7d4eb8450ac216484391761bd81e2
This commit is contained in:
Julia Beliaeva
2019-06-14 23:06:49 +03:00
committed by intellij-monorepo-bot
parent cb501335b3
commit 19f96aed52
9 changed files with 90 additions and 27 deletions
@@ -0,0 +1,31 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.vcs.log.history
import com.intellij.openapi.vcs.FilePath
import com.intellij.vcs.log.VcsLogDataPack
import com.intellij.vcs.log.history.FileHistoryVisiblePack.Companion.filePaths
import com.intellij.vcs.log.ui.VcsLogColorManager
import com.intellij.vcs.log.ui.VcsLogColorManagerImpl
import java.awt.Color
class FileHistoryColorManager(private val path: FilePath) : VcsLogColorManager {
private var baseColorManager = VcsLogColorManagerImpl(setOf(path))
override fun getPathColor(path: FilePath): Color {
return baseColorManager.getPathColor(path)
}
fun update(pack: VcsLogDataPack) {
val filePaths = pack.filePaths()
if (filePaths.isEmpty()) {
baseColorManager = VcsLogColorManagerImpl(setOf(path))
}
else {
baseColorManager = VcsLogColorManagerImpl(filePaths)
}
}
override fun getPaths(): Collection<FilePath> {
return baseColorManager.paths
}
}
@@ -226,13 +226,6 @@ internal class FileHistoryFilterer(logData: VcsLogData) : VcsLogFilterer {
}
}
private fun getStructureFilter(filters: VcsLogFilterCollection) = filters.detailsFilters.singleOrNull() as? VcsLogStructureFilter
private fun getFilePath(filters: VcsLogFilterCollection): FilePath? {
val filter = getStructureFilter(filters) ?: return null
return filter.files.singleOrNull()
}
private fun getHash(filters: VcsLogFilterCollection): Hash? {
val fileHistoryFilter = getStructureFilter(filters) as? VcsLogFileHistoryFilter
if (fileHistoryFilter != null) {
@@ -242,10 +235,17 @@ internal class FileHistoryFilterer(logData: VcsLogData) : VcsLogFilterer {
val revisionFilter = filters.get(VcsLogFilterCollection.REVISION_FILTER)
return revisionFilter?.heads?.singleOrNull()?.hash
}
companion object {
private val LOG = Logger.getInstance(FileHistoryFilterer::class.java)
private fun getStructureFilter(filters: VcsLogFilterCollection) = filters.detailsFilters.singleOrNull() as? VcsLogStructureFilter
fun getFilePath(filters: VcsLogFilterCollection): FilePath? {
val filter = getStructureFilter(filters) ?: return null
return filter.files.singleOrNull()
}
@JvmStatic
fun createFilters(path: FilePath,
revision: Hash?,
@@ -23,7 +23,6 @@ import com.intellij.vcs.log.impl.VcsLogContentUtil;
import com.intellij.vcs.log.impl.VcsLogUiProperties;
import com.intellij.vcs.log.impl.VcsProjectLog;
import com.intellij.vcs.log.ui.AbstractVcsLogUi;
import com.intellij.vcs.log.ui.VcsLogColorManager;
import com.intellij.vcs.log.ui.VcsLogUiImpl;
import com.intellij.vcs.log.ui.highlighters.CurrentBranchHighlighter;
import com.intellij.vcs.log.ui.highlighters.MyCommitsHighlighter;
@@ -37,8 +36,10 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.awt.*;
import java.util.Collections;
import java.util.List;
import java.util.*;
import java.util.Objects;
import java.util.Set;
import static com.intellij.ui.JBColor.namedColor;
import static com.intellij.util.ObjectUtils.notNull;
@@ -58,13 +59,12 @@ public class FileHistoryUi extends AbstractVcsLogUi {
@NotNull private final History myHistory;
public FileHistoryUi(@NotNull VcsLogData logData,
@NotNull VcsLogColorManager manager,
@NotNull FileHistoryUiProperties uiProperties,
@NotNull VisiblePackRefresher refresher,
@NotNull FilePath path,
@Nullable Hash revision,
@NotNull VirtualFile root) {
super(getFileHistoryLogId(path, revision), logData, manager, refresher);
super(getFileHistoryLogId(path, revision), logData, new FileHistoryColorManager(path), refresher);
myPath = path;
myRoot = root;
@@ -214,7 +214,9 @@ public class FileHistoryUi extends AbstractVcsLogUi {
@Override
protected void onVisiblePackUpdated(boolean permGraphChanged) {
((FileHistoryColorManager)myColorManager).update(myVisiblePack);
myFileHistoryPanel.updateDataPack(myVisiblePack, permGraphChanged);
myFileHistoryPanel.getGraphTable().rootColumnUpdated();
}
@NotNull
@@ -275,6 +277,9 @@ public class FileHistoryUi extends AbstractVcsLogUi {
else if (CommonUiProperties.SHOW_DIFF_PREVIEW.equals(property)) {
myFileHistoryPanel.showDiffPreview(myUiProperties.get(CommonUiProperties.SHOW_DIFF_PREVIEW));
}
else if (CommonUiProperties.SHOW_ROOT_NAMES.equals(property)) {
myFileHistoryPanel.getGraphTable().rootColumnUpdated();
}
}
}
@@ -10,13 +10,10 @@ import com.intellij.vcs.log.VcsLogFilterCollection;
import com.intellij.vcs.log.data.VcsLogData;
import com.intellij.vcs.log.graph.PermanentGraph;
import com.intellij.vcs.log.impl.VcsLogManager;
import com.intellij.vcs.log.ui.VcsLogColorManagerImpl;
import com.intellij.vcs.log.visible.VisiblePackRefresherImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
public class FileHistoryUiFactory implements VcsLogManager.VcsLogUiFactory<FileHistoryUi> {
@NotNull private final FilePath myFilePath;
@NotNull private final VirtualFile myRoot;
@@ -34,7 +31,7 @@ public class FileHistoryUiFactory implements VcsLogManager.VcsLogUiFactory<FileH
VcsLogFilterCollection filters =
FileHistoryFilterer.createFilters(myFilePath, myHash, myRoot, properties.get(FileHistoryUiProperties.SHOW_ALL_BRANCHES));
return new FileHistoryUi(logData, new VcsLogColorManagerImpl(Collections.singleton(myRoot)), properties,
return new FileHistoryUi(logData, properties,
new VisiblePackRefresherImpl(project, logData,
filters,
PermanentGraph.SortType.Normal,
@@ -7,6 +7,7 @@ import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.components.StoragePathMacros;
import com.intellij.util.containers.ContainerUtilRt;
import com.intellij.vcs.log.impl.CommonUiProperties;
import com.intellij.vcs.log.impl.VcsLogUiProperties;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -28,6 +29,7 @@ public class FileHistoryUiProperties implements VcsLogUiProperties, PersistentSt
public Map<Integer, Integer> COLUMN_WIDTH = new HashMap<>();
public List<Integer> COLUMN_ORDER = new ArrayList<>();
public boolean SHOW_DIFF_PREVIEW = true;
public boolean SHOW_ROOT_NAMES = false;
}
@SuppressWarnings("unchecked")
@@ -55,6 +57,9 @@ public class FileHistoryUiProperties implements VcsLogUiProperties, PersistentSt
else if (SHOW_DIFF_PREVIEW.equals(property)) {
return (T)Boolean.valueOf(myState.SHOW_DIFF_PREVIEW);
}
else if (SHOW_ROOT_NAMES.equals(property)) {
return (T)Boolean.valueOf(myState.SHOW_ROOT_NAMES);
}
throw new UnsupportedOperationException("Unknown property " + property);
}
@@ -76,6 +81,9 @@ public class FileHistoryUiProperties implements VcsLogUiProperties, PersistentSt
else if (SHOW_DIFF_PREVIEW.equals(property)) {
myState.SHOW_DIFF_PREVIEW = (Boolean)value;
}
else if (SHOW_ROOT_NAMES.equals(property)) {
myState.SHOW_ROOT_NAMES = (Boolean)value;
}
else {
throw new UnsupportedOperationException("Unknown property " + property);
}
@@ -88,6 +96,7 @@ public class FileHistoryUiProperties implements VcsLogUiProperties, PersistentSt
SHOW_ALL_BRANCHES.equals(property) ||
COLUMN_ORDER.equals(property) ||
SHOW_DIFF_PREVIEW.equals(property) ||
SHOW_ROOT_NAMES.equals(property) ||
property instanceof TableColumnProperty;
}
@@ -21,14 +21,19 @@ import com.intellij.vcs.log.VcsLogFilterCollection
import com.intellij.vcs.log.data.DataPackBase
import com.intellij.vcs.log.graph.VisibleGraph
import com.intellij.vcs.log.visible.VisiblePack
import gnu.trove.THashSet
class FileHistoryVisiblePack(dataPack: DataPackBase, graph: VisibleGraph<Int>, canRequestMore: Boolean,
filters: VcsLogFilterCollection,
fileHistory: FileHistory) : VisiblePack(dataPack, graph, canRequestMore, filters, fileHistory) {
filters: VcsLogFilterCollection,
fileHistory: FileHistory) : VisiblePack(dataPack, graph, canRequestMore, filters, fileHistory) {
constructor(dataPack: DataPackBase, graph: VisibleGraph<Int>, canRequestMore: Boolean, filters: VcsLogFilterCollection,
commitsToPaths: Map<Int, MaybeDeletedFilePath>) : this(dataPack, graph, canRequestMore, filters, FileHistory(commitsToPaths))
override fun getFilePath(rowIndex: Int): FilePath {
return filePath(visibleGraph.getRowInfo(rowIndex).commit) ?: FileHistoryFilterer.getFilePath(filters)!!
}
companion object {
val VcsLogDataPack.fileHistory: FileHistory
get() {
@@ -44,6 +49,11 @@ class FileHistoryVisiblePack(dataPack: DataPackBase, graph: VisibleGraph<Int>, c
@JvmStatic
fun VcsLogDataPack.isDeletedInCommit(commit: Int): Boolean = this.commitsToPathsMap[commit]?.deleted ?: false
@JvmStatic
fun VcsLogDataPack.filePaths(): Set<FilePath> {
return commitsToPathsMap.values.mapTo(THashSet(FILE_PATH_HASHING_STRATEGY)) { it.filePath }
}
}
}
@@ -2,10 +2,12 @@
package com.intellij.vcs.log.ui;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Couple;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.ColorUtil;
import com.intellij.ui.JBColor;
import com.intellij.util.containers.BidirectionalMap;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import com.intellij.vcsUtil.VcsUtil;
@@ -25,15 +27,18 @@ public class VcsLogColorManagerImpl implements VcsLogColorManager {
{JBColor.RED, JBColor.GREEN, JBColor.BLUE, JBColor.ORANGE, JBColor.CYAN, JBColor.YELLOW, JBColor.MAGENTA, JBColor.PINK};
@NotNull private final Map<String, Color> myPaths2Colors;
@NotNull private final List<FilePath> mySortedPaths;
@NotNull private final List<FilePath> myPaths;
public VcsLogColorManagerImpl(@NotNull Collection<VirtualFile> roots) {
mySortedPaths = ContainerUtil.map(ContainerUtil.sorted(roots, Comparator.comparing(VirtualFile::getName)),
file -> VcsUtil.getFilePath(file));
public VcsLogColorManagerImpl(@NotNull Set<VirtualFile> roots) {
this(ContainerUtil.map(ContainerUtil.sorted(roots, Comparator.comparing(VirtualFile::getName)),
file -> VcsUtil.getFilePath(file)));
}
public VcsLogColorManagerImpl(@NotNull Collection<FilePath> paths) {
myPaths = new ArrayList<>(paths);
myPaths2Colors = new HashMap<>();
for (int i = 0; i < mySortedPaths.size(); i++) {
myPaths2Colors.put(mySortedPaths.get(i).getPath(), getColor(i, mySortedPaths.size()));
for (int i = 0; i < myPaths.size(); i++) {
myPaths2Colors.put(myPaths.get(i).getPath(), getColor(i, myPaths.size()));
}
}
@@ -87,6 +92,6 @@ public class VcsLogColorManagerImpl implements VcsLogColorManager {
@NotNull
@Override
public Collection<FilePath> getPaths() {
return mySortedPaths;
return myPaths;
}
}
@@ -15,7 +15,6 @@ import com.intellij.vcs.log.data.VcsLogData;
import com.intellij.vcs.log.ui.frame.CommitPresentationUtil;
import com.intellij.vcs.log.ui.render.GraphCommitCell;
import com.intellij.vcs.log.visible.VisiblePack;
import com.intellij.vcsUtil.VcsUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -126,7 +125,7 @@ public class GraphTableModel extends AbstractTableModel {
VcsShortCommitDetails data = getCommitMetadata(rowIndex);
switch (columnIndex) {
case ROOT_COLUMN:
return VcsUtil.getFilePath(getRoot(rowIndex));
return myDataPack.getFilePath(rowIndex);
case COMMIT_COLUMN:
return new GraphCommitCell(data.getSubject(), getRefsAtRow(rowIndex),
myDataPack.getVisibleGraph().getRowInfo(rowIndex).getPrintElements());
@@ -15,6 +15,7 @@
*/
package com.intellij.vcs.log.visible;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.vcs.log.VcsLogDataPack;
import com.intellij.vcs.log.VcsLogFilterCollection;
@@ -24,6 +25,7 @@ import com.intellij.vcs.log.data.DataPack;
import com.intellij.vcs.log.data.DataPackBase;
import com.intellij.vcs.log.graph.VisibleGraph;
import com.intellij.vcs.log.visible.filters.VcsLogFilterObject;
import com.intellij.vcsUtil.VcsUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -123,4 +125,9 @@ public class VisiblePack implements VcsLogDataPack {
", canRequestMore=" +
myCanRequestMore + "}";
}
@NotNull
public FilePath getFilePath(int index) {
return VcsUtil.getFilePath(getRoot(index));
}
}