From 66f031224c96183f5435bc25a61b3fc088c460ff Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Fri, 3 Jul 2015 21:41:23 +0300 Subject: [PATCH] [vcs-log] take user filter into account when highlighting current user --- .../vcs/log/ui/CurrentBranchHighlighter.java | 2 +- .../vcs/log/ui/MergeCommitsHighlighter.java | 6 ++-- .../vcs/log/ui/MyCommitsHighlighter.java | 36 ++++++++++++++----- .../vcs/log/ui/VcsLogHighlighterFactory.java | 5 ++- .../com/intellij/vcs/log/ui/VcsLogUiImpl.java | 2 +- .../log/ui/filter/VcsLogUserFilterImpl.java | 2 +- 6 files changed, 38 insertions(+), 15 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/CurrentBranchHighlighter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/CurrentBranchHighlighter.java index f743c330b498..1b1d4788666e 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/CurrentBranchHighlighter.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/CurrentBranchHighlighter.java @@ -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); } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/MergeCommitsHighlighter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/MergeCommitsHighlighter.java index 72516d3753b3..b6f09723f2d7 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/MergeCommitsHighlighter.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/MergeCommitsHighlighter.java @@ -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); } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/MyCommitsHighlighter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/MyCommitsHighlighter.java index 30a69486dd53..91565728fd3e 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/MyCommitsHighlighter.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/MyCommitsHighlighter.java @@ -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 currentUsers = myDataHolder.getCurrentUser(); - Set 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 currentUsers) { + Set 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 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 diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogHighlighterFactory.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogHighlighterFactory.java index fee426745bea..def532abcebb 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogHighlighterFactory.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogHighlighterFactory.java @@ -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(); diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java index aa7636a8d611..b96f8a52af2b 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java @@ -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())); } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogUserFilterImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogUserFilterImpl.java index cc0c1328bc28..f3f0a3c5678d 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogUserFilterImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogUserFilterImpl.java @@ -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 myUsers; @NotNull private final Map myData;