mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[file-history] show file name in the root column of file history
GitOrigin-RevId: 8c90f37a08a7d4eb8450ac216484391761bd81e2
This commit is contained in:
committed by
intellij-monorepo-bot
parent
cb501335b3
commit
19f96aed52
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user