mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] take user filter into account when highlighting current user
This commit is contained in:
@@ -59,7 +59,7 @@ public class CurrentBranchHighlighter implements VcsLogHighlighter {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public VcsLogHighlighter createHighlighter(@NotNull VcsLogDataHolder logDataHolder, @NotNull VcsLogUiProperties uiProperties) {
|
||||
public VcsLogHighlighter createHighlighter(@NotNull VcsLogDataHolder logDataHolder, @NotNull VcsLogUiProperties uiProperties, @NotNull VcsLogFilterUi filterUi) {
|
||||
return new CurrentBranchHighlighter(logDataHolder, uiProperties);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,12 +18,12 @@ package com.intellij.vcs.log.ui;
|
||||
import com.intellij.ui.Gray;
|
||||
import com.intellij.ui.JBColor;
|
||||
import com.intellij.vcs.log.VcsCommitStyleFactory;
|
||||
import com.intellij.vcs.log.VcsLogFilterUi;
|
||||
import com.intellij.vcs.log.VcsLogHighlighter;
|
||||
import com.intellij.vcs.log.VcsShortCommitDetails;
|
||||
import com.intellij.vcs.log.data.LoadingDetails;
|
||||
import com.intellij.vcs.log.data.VcsLogDataHolder;
|
||||
import com.intellij.vcs.log.data.VcsLogUiProperties;
|
||||
import com.intellij.vcs.log.graph.impl.facade.PermanentGraphImpl;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class MergeCommitsHighlighter implements VcsLogHighlighter {
|
||||
@@ -53,7 +53,9 @@ public class MergeCommitsHighlighter implements VcsLogHighlighter {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public VcsLogHighlighter createHighlighter(@NotNull VcsLogDataHolder logDataHolder, @NotNull VcsLogUiProperties uiProperties) {
|
||||
public VcsLogHighlighter createHighlighter(@NotNull VcsLogDataHolder logDataHolder,
|
||||
@NotNull VcsLogUiProperties uiProperties,
|
||||
@NotNull VcsLogFilterUi filterUi) {
|
||||
return new MergeCommitsHighlighter(logDataHolder, uiProperties);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,26 +16,30 @@
|
||||
package com.intellij.vcs.log.ui;
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.vcs.log.VcsCommitStyleFactory;
|
||||
import com.intellij.vcs.log.VcsLogHighlighter;
|
||||
import com.intellij.vcs.log.VcsShortCommitDetails;
|
||||
import com.intellij.vcs.log.VcsUser;
|
||||
import com.intellij.vcs.log.*;
|
||||
import com.intellij.vcs.log.data.LoadingDetails;
|
||||
import com.intellij.vcs.log.data.VcsLogDataHolder;
|
||||
import com.intellij.vcs.log.data.VcsLogUiProperties;
|
||||
import com.intellij.vcs.log.impl.VcsUserImpl;
|
||||
import com.intellij.vcs.log.ui.filter.VcsLogUserFilterImpl;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class MyCommitsHighlighter implements VcsLogHighlighter {
|
||||
@NotNull private final VcsLogUiProperties myUiProperties;
|
||||
@NotNull private final VcsLogDataHolder myDataHolder;
|
||||
@NotNull private final VcsLogFilterUi myFilterUi;
|
||||
|
||||
public MyCommitsHighlighter(@NotNull VcsLogDataHolder logDataHolder, @NotNull VcsLogUiProperties uiProperties) {
|
||||
public MyCommitsHighlighter(@NotNull VcsLogDataHolder logDataHolder,
|
||||
@NotNull VcsLogUiProperties uiProperties,
|
||||
@NotNull VcsLogFilterUi filterUi) {
|
||||
myDataHolder = logDataHolder;
|
||||
myUiProperties = uiProperties;
|
||||
myFilterUi = filterUi;
|
||||
// migration to map storage
|
||||
if (!myUiProperties.isHighlightMyCommits()) {
|
||||
// by default, my commits highlighter was enabled
|
||||
@@ -50,8 +54,7 @@ public class MyCommitsHighlighter implements VcsLogHighlighter {
|
||||
public VcsCommitStyle getStyle(int commitIndex, boolean isSelected) {
|
||||
if (!myUiProperties.isHighlighterEnabled(Factory.ID)) return VcsCommitStyle.DEFAULT;
|
||||
Map<VirtualFile, VcsUser> currentUsers = myDataHolder.getCurrentUser();
|
||||
Set<VcsUser> allUsers = myDataHolder.getUserRegistry().getUsers();
|
||||
if (allUsers.size() != currentUsers.values().size() || !currentUsers.values().containsAll(allUsers)) {
|
||||
if (!areTheOnlyUsers(currentUsers) && !isFilteredByCurrentUser()) {
|
||||
VcsShortCommitDetails details = myDataHolder.getMiniDetailsGetter().getCommitDataIfAvailable(commitIndex);
|
||||
if (details != null && !(details instanceof LoadingDetails)) {
|
||||
VcsUser currentUser = currentUsers.get(details.getRoot());
|
||||
@@ -63,14 +66,29 @@ public class MyCommitsHighlighter implements VcsLogHighlighter {
|
||||
return VcsCommitStyle.DEFAULT;
|
||||
}
|
||||
|
||||
private boolean areTheOnlyUsers(@NotNull Map<VirtualFile, VcsUser> currentUsers) {
|
||||
Set<VcsUser> allUsers = myDataHolder.getAllUsers();
|
||||
return allUsers.size() == currentUsers.values().size() && currentUsers.values().containsAll(allUsers);
|
||||
}
|
||||
|
||||
private boolean isFilteredByCurrentUser() {
|
||||
VcsLogUserFilter userFilter = myFilterUi.getFilters().getUserFilter();
|
||||
if (userFilter == null) return false;
|
||||
Collection<String> filterByName = ((VcsLogUserFilterImpl)userFilter).getUserNamesForPresentation();
|
||||
if (Collections.singleton(VcsLogUserFilterImpl.ME).containsAll(filterByName)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static class Factory implements VcsLogHighlighterFactory {
|
||||
@NotNull
|
||||
private static final String ID = "MY_COMMITS";
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public VcsLogHighlighter createHighlighter(@NotNull VcsLogDataHolder logDataHolder, @NotNull VcsLogUiProperties uiProperties) {
|
||||
return new MyCommitsHighlighter(logDataHolder, uiProperties);
|
||||
public VcsLogHighlighter createHighlighter(@NotNull VcsLogDataHolder logDataHolder,
|
||||
@NotNull VcsLogUiProperties uiProperties,
|
||||
@NotNull VcsLogFilterUi filterUi) {
|
||||
return new MyCommitsHighlighter(logDataHolder, uiProperties, filterUi);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.vcs.log.ui;
|
||||
|
||||
import com.intellij.vcs.log.VcsLogFilterUi;
|
||||
import com.intellij.vcs.log.VcsLogHighlighter;
|
||||
import com.intellij.vcs.log.data.VcsLogDataHolder;
|
||||
import com.intellij.vcs.log.data.VcsLogUiProperties;
|
||||
@@ -22,7 +23,9 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public interface VcsLogHighlighterFactory {
|
||||
@NotNull
|
||||
VcsLogHighlighter createHighlighter(@NotNull VcsLogDataHolder logDataHolder, @NotNull VcsLogUiProperties uiProperties);
|
||||
VcsLogHighlighter createHighlighter(@NotNull VcsLogDataHolder logDataHolder,
|
||||
@NotNull VcsLogUiProperties uiProperties,
|
||||
@NotNull VcsLogFilterUi filterUi);
|
||||
|
||||
@NotNull
|
||||
String getId();
|
||||
|
||||
@@ -75,7 +75,7 @@ public class VcsLogUiImpl implements VcsLogUi, Disposable {
|
||||
myMainFrame = new MainFrame(logDataHolder, this, project, settings, uiProperties, myLog, myVisiblePack);
|
||||
|
||||
for (VcsLogHighlighterFactory factory : Extensions.getExtensions(LOG_HIGHLIGHTER_FACTORY_EP, myProject)) {
|
||||
addHighlighter(factory.createHighlighter(myLogDataHolder, myUiProperties));
|
||||
addHighlighter(factory.createHighlighter(myLogDataHolder, myUiProperties, myMainFrame.getFilterUi()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.util.Set;
|
||||
|
||||
public class VcsLogUserFilterImpl implements VcsLogUserFilter {
|
||||
|
||||
@NotNull static final String ME = "me";
|
||||
public @NotNull static final String ME = "me";
|
||||
|
||||
@NotNull private final Collection<String> myUsers;
|
||||
@NotNull private final Map<VirtualFile, VcsUser> myData;
|
||||
|
||||
Reference in New Issue
Block a user