[vcs-log] take user filter into account when highlighting current user

This commit is contained in:
Julia Beliaeva
2015-07-16 19:39:15 +03:00
parent 6e8a17c5f6
commit 66f031224c
6 changed files with 38 additions and 15 deletions
@@ -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;