diff --git a/platform/editor-ui-api/src/com/intellij/openapi/editor/colors/EditorColorsUtil.java b/platform/editor-ui-api/src/com/intellij/openapi/editor/colors/EditorColorsUtil.java
index af1db57ed68b..dac4e5599ff1 100644
--- a/platform/editor-ui-api/src/com/intellij/openapi/editor/colors/EditorColorsUtil.java
+++ b/platform/editor-ui-api/src/com/intellij/openapi/editor/colors/EditorColorsUtil.java
@@ -41,7 +41,8 @@ public class EditorColorsUtil {
@Nullable
public static Color getGlobalOrDefaultColor(@NotNull ColorKey colorKey) {
- return getColorSchemeForBackground(null).getColor(colorKey);
+ Color color = getColorSchemeForBackground(null).getColor(colorKey);
+ return color != null? color : colorKey.getDefaultColor();
}
/**
diff --git a/platform/platform-resources-en/src/messages/OptionsBundle.properties b/platform/platform-resources-en/src/messages/OptionsBundle.properties
index 902f1ecc8911..714aa9f02ebe 100644
--- a/platform/platform-resources-en/src/messages/OptionsBundle.properties
+++ b/platform/platform-resources-en/src/messages/OptionsBundle.properties
@@ -135,6 +135,12 @@ options.general.color.descriptor.indent.guide.selected=Code//Selected vertical i
options.general.color.descriptor.line.number=Code//Line number
options.general.color.descriptor.vcs.annotations=VCS Annotations//Foreground
options.general.color.descriptor.vcs.annotations.color.n=VCS Annotations//Background color #{0}
+options.general.color.descriptor.vcs.log.merged.commit=VCS Log//Common//Merged commit
+options.general.color.descriptor.vcs.log.refs.head=VCS Log//Common//Current
+options.general.color.descriptor.vcs.log.refs.leaf=VCS Log//Common//Leaf
+options.general.color.descriptor.vcs.log.refs.branch=VCS Log//Common//Branch
+options.general.color.descriptor.vcs.log.refs.branch.tag=VCS Log//Common//Branch tag
+options.general.color.descriptor.vcs.log.refs.tag=VCS Log//Common//Tag
options.general.color.descriptor.tearline=Editor//Tear line
options.general.color.descriptor.tearline.selected=Editor//Tear line selection
options.general.color.descriptor.separator.above=Editor//Separator line above
diff --git a/platform/platform-resources/src/META-INF/VcsExtensionPoints.xml b/platform/platform-resources/src/META-INF/VcsExtensionPoints.xml
index 48a34a79ae3f..b5df6f11d022 100644
--- a/platform/platform-resources/src/META-INF/VcsExtensionPoints.xml
+++ b/platform/platform-resources/src/META-INF/VcsExtensionPoints.xml
@@ -63,7 +63,9 @@
interface="com.intellij.openapi.vcs.actions.VcsQuickListContentProvider"/>
-
+
+
diff --git a/platform/vcs-api/src/com/intellij/vcs/VcsColorsProvider.java b/platform/vcs-api/src/com/intellij/vcs/VcsColorsProvider.java
new file mode 100644
index 000000000000..41d1dc7ff45c
--- /dev/null
+++ b/platform/vcs-api/src/com/intellij/vcs/VcsColorsProvider.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.vcs;
+
+import com.intellij.openapi.extensions.ExtensionPointName;
+import com.intellij.openapi.options.colors.AttributesDescriptor;
+import com.intellij.openapi.options.colors.ColorDescriptor;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author gregsh
+ */
+public abstract class VcsColorsProvider {
+
+ public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.vcsColorsProvider");
+
+ @NotNull
+ public List getAttributeDescriptors() {
+ return Collections.emptyList();
+ }
+
+ @NotNull
+ public List getColorDescriptors() {
+ return Collections.emptyList();
+ }
+}
diff --git a/platform/vcs-api/vcs-api.iml b/platform/vcs-api/vcs-api.iml
index da82a1193bd1..6d66050a0e94 100644
--- a/platform/vcs-api/vcs-api.iml
+++ b/platform/vcs-api/vcs-api.iml
@@ -8,6 +8,7 @@
+
diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsColorsPageFactory.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsColorsPageFactory.java
index f0e1d9d3e235..ecc9e6609898 100644
--- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsColorsPageFactory.java
+++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsColorsPageFactory.java
@@ -19,6 +19,7 @@ import com.intellij.application.options.colors.*;
import com.intellij.openapi.application.ApplicationBundle;
import com.intellij.openapi.editor.colors.ColorKey;
import com.intellij.openapi.editor.colors.EditorColors;
+import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.options.OptionsBundle;
import com.intellij.openapi.options.colors.AttributesDescriptor;
import com.intellij.openapi.options.colors.ColorAndFontDescriptorsProvider;
@@ -26,6 +27,8 @@ import com.intellij.openapi.options.colors.ColorDescriptor;
import com.intellij.psi.codeStyle.DisplayPriority;
import com.intellij.psi.codeStyle.DisplayPrioritySortable;
import com.intellij.util.ArrayUtil;
+import com.intellij.vcs.VcsColorsProvider;
+import com.intellij.vcs.log.VcsLogColors;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@@ -55,7 +58,11 @@ public class VcsColorsPageFactory implements ColorAndFontPanelFactory, ColorAndF
@Override
@NotNull
public AttributesDescriptor[] getAttributeDescriptors() {
- return new AttributesDescriptor[0];
+ List descriptors = new ArrayList<>();
+ for (VcsColorsProvider provider : Extensions.getExtensions(VcsColorsProvider.EP_NAME)) {
+ descriptors.addAll(provider.getAttributeDescriptors());
+ }
+ return ArrayUtil.toObjectArray(descriptors, AttributesDescriptor.class);
}
@Override
@@ -76,6 +83,17 @@ public class VcsColorsPageFactory implements ColorAndFontPanelFactory, ColorAndF
descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.annotations.color.n", i + 1), colorKeys.get(i), ColorDescriptor.Kind.BACKGROUND));
}
+ descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.merged.commit"), VcsLogColors.MERGED_COMMIT, ColorDescriptor.Kind.FOREGROUND));
+ descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.refs.head"), VcsLogColors.REFS_HEAD, ColorDescriptor.Kind.FOREGROUND));
+ descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.refs.leaf"), VcsLogColors.REFS_LEAF, ColorDescriptor.Kind.FOREGROUND));
+ descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.refs.branch"), VcsLogColors.REFS_BRANCH, ColorDescriptor.Kind.FOREGROUND));
+ descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.refs.branch.tag"), VcsLogColors.REFS_BRANCH_REF, ColorDescriptor.Kind.FOREGROUND));
+ descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.refs.tag"), VcsLogColors.REFS_TAG, ColorDescriptor.Kind.FOREGROUND));
+
+ for (VcsColorsProvider provider : Extensions.getExtensions(VcsColorsProvider.EP_NAME)) {
+ descriptors.addAll(provider.getColorDescriptors());
+ }
+
return ArrayUtil.toObjectArray(descriptors, ColorDescriptor.class);
}
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogColors.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogColors.java
new file mode 100644
index 000000000000..c0eb2474ec90
--- /dev/null
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogColors.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.vcs.log;
+
+import com.intellij.openapi.editor.colors.ColorKey;
+import com.intellij.ui.Gray;
+import com.intellij.ui.JBColor;
+
+import java.awt.*;
+
+public interface VcsLogColors {
+
+ ColorKey MERGED_COMMIT = ColorKey.createColorKey("VCS_MERGED_COMMIT", new JBColor(Gray._128, Gray._96));
+
+ ColorKey REFS_HEAD = ColorKey.createColorKey("VCS_REFS_HEAD", new JBColor(new Color(0xffd100), new Color(0xe1c731)));
+ ColorKey REFS_LEAF = ColorKey.createColorKey("VCS_REFS_LEAF", new JBColor(new Color(0x8a2d6b), new Color(0xc31e8c)));
+ ColorKey REFS_BRANCH = ColorKey.createColorKey("VCS_REFS_BRANCH", new JBColor(new Color(0x3cb45c), new Color(0x3cb45c)));
+ ColorKey REFS_BRANCH_REF = ColorKey.createColorKey("VCS_REFS_BRANCH_REF", new JBColor(new Color(0x9f79b5), new Color(0x9f79b5)));
+ ColorKey REFS_TAG = ColorKey.createColorKey("VCS_REFS_TAG", new JBColor(new Color(0x7a7a7a), new Color(0x999999)));
+
+}
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java
index a8acae6592da..97fc32051923 100644
--- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java
@@ -1,9 +1,8 @@
package com.intellij.vcs.log;
+import com.intellij.openapi.editor.colors.ColorKey;
import org.jetbrains.annotations.NotNull;
-import java.awt.*;
-
/**
* @author Kirill Likhodedov
*/
@@ -31,5 +30,5 @@ public interface VcsRefType {
* TODO maybe this is not the right place for color
*/
@NotNull
- Color getBackgroundColor();
+ ColorKey getBgColorKey();
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogStandardColors.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogStandardColors.java
deleted file mode 100644
index 55f823989132..000000000000
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogStandardColors.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2000-2015 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.intellij.vcs.log;
-
-import com.intellij.ui.JBColor;
-
-import java.awt.*;
-
-public class VcsLogStandardColors {
- public static class Refs {
- public static final Color TIP = new JBColor(new Color(0xffd100), new Color(0xe1c731));
- public static final Color LEAF = new JBColor(new Color(0x8a2d6b), new Color(0xc31e8c));
- public static final Color BRANCH = new JBColor(new Color(0x3cb45c), new Color(0x3cb45c));
- public static final Color BRANCH_REF = new JBColor(new Color(0x9f79b5), new Color(0x9f79b5));
- public static final Color TAG = new JBColor(new Color(0x7a7a7a), new Color(0x999999));
- }
-}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SimpleRefGroup.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SimpleRefGroup.java
index 7881a485162a..2e7677ab2941 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SimpleRefGroup.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SimpleRefGroup.java
@@ -15,6 +15,7 @@
*/
package com.intellij.vcs.log.impl;
+import com.intellij.openapi.editor.colors.EditorColorsUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
@@ -66,16 +67,17 @@ public class SimpleRefGroup implements RefGroup {
Map.Entry> firstItem =
ObjectUtils.assertNotNull(ContainerUtil.getFirstItem(referencesByType.entrySet()));
boolean multiple = firstItem.getValue().size() > 1;
- Color color = firstItem.getKey().getBackgroundColor();
+ Color color = EditorColorsUtil.getGlobalOrDefaultColor(firstItem.getKey().getBgColorKey());
return multiple ? Arrays.asList(color, color) : Collections.singletonList(color);
}
else {
List colorsList = ContainerUtil.newArrayList();
for (VcsRefType type : referencesByType.keySet()) {
+ Color color = EditorColorsUtil.getGlobalOrDefaultColor(type.getBgColorKey());
if (referencesByType.get(type).size() > 1) {
- colorsList.add(type.getBackgroundColor());
+ colorsList.add(color);
}
- colorsList.add(type.getBackgroundColor());
+ colorsList.add(color);
}
return colorsList;
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SingletonRefGroup.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SingletonRefGroup.java
index 5fa6e35c09b5..af6f174813ca 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SingletonRefGroup.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SingletonRefGroup.java
@@ -15,6 +15,7 @@
*/
package com.intellij.vcs.log.impl;
+import com.intellij.openapi.editor.colors.EditorColorsUtil;
import com.intellij.vcs.log.RefGroup;
import com.intellij.vcs.log.VcsRef;
import org.jetbrains.annotations.NotNull;
@@ -53,6 +54,7 @@ public class SingletonRefGroup implements RefGroup {
@NotNull
@Override
public List getColors() {
- return Collections.singletonList(myRef.getType().getBackgroundColor());
+ Color color = EditorColorsUtil.getGlobalOrDefaultColor(myRef.getType().getBgColorKey());
+ return Collections.singletonList(color);
}
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencesPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencesPanel.java
index eecbe7131228..d609066dd19c 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencesPanel.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencesPanel.java
@@ -15,6 +15,7 @@
*/
package com.intellij.vcs.log.ui.frame;
+import com.intellij.openapi.editor.colors.EditorColorsUtil;
import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.panels.Wrapper;
import com.intellij.util.ObjectUtils;
@@ -118,7 +119,7 @@ public class ReferencesPanel extends JPanel {
@NotNull Collection refs,
int refIndex, int height) {
if (refIndex == 0) {
- Color color = type.getBackgroundColor();
+ Color color = EditorColorsUtil.getGlobalOrDefaultColor(type.getBgColorKey());
return new LabelIcon(height, getBackground(),
refs.size() > 1 ? new Color[]{color, color} : new Color[]{color});
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/highlighters/MergeCommitsHighlighter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/highlighters/MergeCommitsHighlighter.java
index ee97b73725f8..c20c45c6401c 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/highlighters/MergeCommitsHighlighter.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/highlighters/MergeCommitsHighlighter.java
@@ -15,14 +15,15 @@
*/
package com.intellij.vcs.log.ui.highlighters;
-import com.intellij.ui.Gray;
-import com.intellij.ui.JBColor;
+import com.intellij.openapi.editor.colors.EditorColorsUtil;
import com.intellij.vcs.log.*;
import com.intellij.vcs.log.data.VcsLogData;
import org.jetbrains.annotations.NotNull;
+import java.awt.*;
+
public class MergeCommitsHighlighter implements VcsLogHighlighter {
- public static final JBColor MERGE_COMMIT_FOREGROUND = new JBColor(Gray._128, Gray._96);
+
@NotNull private final VcsLogUi myLogUi;
public MergeCommitsHighlighter(@NotNull VcsLogUi logUi) {
@@ -33,7 +34,10 @@ public class MergeCommitsHighlighter implements VcsLogHighlighter {
@Override
public VcsCommitStyle getStyle(@NotNull VcsShortCommitDetails details, boolean isSelected) {
if (isSelected || !myLogUi.isHighlighterEnabled(Factory.ID)) return VcsCommitStyle.DEFAULT;
- if (details.getParents().size() >= 2) return VcsCommitStyleFactory.foreground(MERGE_COMMIT_FOREGROUND);
+ if (details.getParents().size() >= 2) {
+ Color color = EditorColorsUtil.getGlobalOrDefaultColor(VcsLogColors.MERGED_COMMIT);
+ return VcsCommitStyleFactory.foreground(color);
+ }
return VcsCommitStyle.DEFAULT;
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TooltipReferencesPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TooltipReferencesPanel.java
index 08ff19f8221c..9233d8aff00e 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TooltipReferencesPanel.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TooltipReferencesPanel.java
@@ -15,6 +15,7 @@
*/
package com.intellij.vcs.log.ui.render;
+import com.intellij.openapi.editor.colors.EditorColorsUtil;
import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.ColorUtil;
@@ -71,7 +72,7 @@ class TooltipReferencesPanel extends ReferencesPanel {
@Override
protected Icon createIcon(@NotNull VcsRefType type, @NotNull Collection refs, int refIndex, int height) {
if (refIndex == 0) {
- Color color = type.getBackgroundColor();
+ Color color = EditorColorsUtil.getGlobalOrDefaultColor(type.getBgColorKey());
return new LabelIcon(height, getBackground(),
refs.size() > 1 ? new Color[]{color, color} : new Color[]{color}) {
@Override
diff --git a/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java b/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java
index 4b45a6cced30..6ecd817b09ea 100644
--- a/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java
+++ b/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java
@@ -17,10 +17,10 @@ package com.intellij.vcs.log.impl;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.editor.colors.ColorKey;
import com.intellij.openapi.vcs.VcsKey;
import com.intellij.openapi.vcs.changes.committed.MockAbstractVcs;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.ui.JBColor;
import com.intellij.util.Consumer;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
@@ -28,11 +28,9 @@ import com.intellij.vcs.log.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.awt.*;
import java.io.DataInput;
import java.io.DataOutput;
import java.util.*;
-import java.util.List;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicInteger;
@@ -50,8 +48,8 @@ public class TestVcsLogProvider implements VcsLogProvider {
@NotNull
@Override
- public Color getBackgroundColor() {
- return JBColor.WHITE;
+ public ColorKey getBgColorKey() {
+ return VcsLogColors.REFS_BRANCH;
}
};
private static final String SAMPLE_SUBJECT = "Sample subject";
diff --git a/plugins/git4idea/src/META-INF/plugin.xml b/plugins/git4idea/src/META-INF/plugin.xml
index 384b1bc97edc..7a4d775d2942 100644
--- a/plugins/git4idea/src/META-INF/plugin.xml
+++ b/plugins/git4idea/src/META-INF/plugin.xml
@@ -159,6 +159,7 @@
+
diff --git a/plugins/git4idea/src/git4idea/GitColors.java b/plugins/git4idea/src/git4idea/GitColors.java
new file mode 100644
index 000000000000..7c2ee5979498
--- /dev/null
+++ b/plugins/git4idea/src/git4idea/GitColors.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package git4idea;
+
+import com.intellij.openapi.editor.colors.ColorKey;
+import com.intellij.openapi.options.colors.ColorDescriptor;
+import com.intellij.vcs.VcsColorsProvider;
+import com.intellij.vcs.log.VcsLogColors;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author gregsh
+ */
+public class GitColors extends VcsColorsProvider {
+
+ public static final ColorKey REFS_HEAD = ColorKey.createColorKey("GIT_REFS_HEAD", VcsLogColors.REFS_HEAD);
+ public static final ColorKey REFS_LOCAL_BRANCH = ColorKey.createColorKey("GIT_REFS_BRANCH", VcsLogColors.REFS_BRANCH);
+ public static final ColorKey REFS_REMOTE_BRANCH = ColorKey.createColorKey("GIT_REFS_BRANCH_REF", VcsLogColors.REFS_BRANCH_REF);
+ public static final ColorKey REFS_TAG = ColorKey.createColorKey("GIT_REFS_TAG", VcsLogColors.REFS_TAG);
+ public static final ColorKey REFS_OTHER = ColorKey.createColorKey("GIT_REFS_OTHER", VcsLogColors.REFS_TAG);
+
+ @NotNull
+ @Override
+ public List getColorDescriptors() {
+ return Arrays.asList(
+ new ColorDescriptor("VCS Log//Git//Head", REFS_HEAD, ColorDescriptor.Kind.FOREGROUND),
+ new ColorDescriptor("VCS Log//Git//Local branch", REFS_LOCAL_BRANCH, ColorDescriptor.Kind.FOREGROUND),
+ new ColorDescriptor("VCS Log//Git//Remote branch", REFS_REMOTE_BRANCH, ColorDescriptor.Kind.FOREGROUND),
+ new ColorDescriptor("VCS Log//Git//Tag", REFS_TAG, ColorDescriptor.Kind.FOREGROUND),
+ new ColorDescriptor("VCS Log//Git//Other", REFS_OTHER, ColorDescriptor.Kind.FOREGROUND)
+ );
+ }
+}
diff --git a/plugins/git4idea/src/git4idea/branch/DeepComparator.java b/plugins/git4idea/src/git4idea/branch/DeepComparator.java
index 97282bff2c44..d8f2c451e945 100644
--- a/plugins/git4idea/src/git4idea/branch/DeepComparator.java
+++ b/plugins/git4idea/src/git4idea/branch/DeepComparator.java
@@ -19,20 +19,18 @@ import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.editor.colors.EditorColorsUtil;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Key;
-import com.intellij.openapi.vcs.VcsException;
-import com.intellij.openapi.vcs.VcsNotifier;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.*;
import com.intellij.vcs.log.data.VcsLogData;
import com.intellij.vcs.log.impl.HashImpl;
import com.intellij.vcs.log.impl.VcsLogUtil;
-import com.intellij.vcs.log.ui.highlighters.MergeCommitsHighlighter;
import com.intellij.vcs.log.ui.highlighters.VcsLogHighlighterFactory;
import git4idea.GitBranch;
import git4idea.commands.GitCommand;
@@ -128,9 +126,8 @@ public class DeepComparator implements VcsLogHighlighter, Disposable {
@Override
public VcsLogHighlighter.VcsCommitStyle getStyle(@NotNull VcsShortCommitDetails commitDetails, boolean isSelected) {
if (myNonPickedCommits == null) return VcsCommitStyle.DEFAULT;
- return VcsCommitStyleFactory.foreground(!myNonPickedCommits.contains(new CommitId(commitDetails.getId(), commitDetails.getRoot()))
- ? MergeCommitsHighlighter.MERGE_COMMIT_FOREGROUND
- : null);
+ boolean inNonPicked = myNonPickedCommits.contains(new CommitId(commitDetails.getId(), commitDetails.getRoot()));
+ return VcsCommitStyleFactory.foreground(inNonPicked ? null : EditorColorsUtil.getGlobalOrDefaultColor(VcsLogColors.MERGED_COMMIT));
}
@Override
@@ -199,7 +196,6 @@ public class DeepComparator implements VcsLogHighlighter, Disposable {
@NotNull private final String myComparedBranch;
@NotNull private final Set myCollectedNonPickedCommits = ContainerUtil.newHashSet();
- @Nullable private VcsException myException;
private boolean myCancelled;
public MyTask(@NotNull Project project,
@@ -215,17 +211,11 @@ public class DeepComparator implements VcsLogHighlighter, Disposable {
@Override
public void run(@NotNull ProgressIndicator indicator) {
- try {
- for (Map.Entry entry : myRepositoriesWithCurrentBranches.entrySet()) {
- GitRepository repo = entry.getKey();
- GitBranch currentBranch = entry.getValue();
- myCollectedNonPickedCommits
- .addAll(getNonPickedCommitsFromGit(myProject, repo.getRoot(), currentBranch.getName(), myComparedBranch));
- }
- }
- catch (VcsException e) {
- LOG.warn(e);
- myException = e;
+ for (Map.Entry entry : myRepositoriesWithCurrentBranches.entrySet()) {
+ GitRepository repo = entry.getKey();
+ GitBranch currentBranch = entry.getValue();
+ myCollectedNonPickedCommits
+ .addAll(getNonPickedCommitsFromGit(myProject, repo.getRoot(), currentBranch.getName(), myComparedBranch));
}
}
@@ -237,10 +227,6 @@ public class DeepComparator implements VcsLogHighlighter, Disposable {
removeHighlighting();
- if (myException != null) {
- VcsNotifier.getInstance(myProject).notifyError("Couldn't compare with branch " + myComparedBranch, myException.getMessage());
- return;
- }
myNonPickedCommits = myCollectedNonPickedCommits;
}
@@ -250,9 +236,9 @@ public class DeepComparator implements VcsLogHighlighter, Disposable {
@NotNull
private Set getNonPickedCommitsFromGit(@NotNull Project project,
- @NotNull final VirtualFile root,
+ @NotNull VirtualFile root,
@NotNull String currentBranch,
- @NotNull String comparedBranch) throws VcsException {
+ @NotNull String comparedBranch) {
GitLineHandler handler = new GitLineHandler(project, root, GitCommand.CHERRY);
handler.addParameters(currentBranch, comparedBranch); // upstream - current branch; head - compared branch
diff --git a/plugins/git4idea/src/git4idea/log/GitRefManager.java b/plugins/git4idea/src/git4idea/log/GitRefManager.java
index 43a185828ffb..9fe6640336df 100644
--- a/plugins/git4idea/src/git4idea/log/GitRefManager.java
+++ b/plugins/git4idea/src/git4idea/log/GitRefManager.java
@@ -2,17 +2,23 @@ package git4idea.log;
import com.intellij.dvcs.repo.RepositoryManager;
import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.editor.colors.ColorKey;
+import com.intellij.openapi.editor.colors.EditorColorsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Function;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
-import com.intellij.vcs.log.*;
+import com.intellij.vcs.log.RefGroup;
+import com.intellij.vcs.log.VcsLogRefManager;
+import com.intellij.vcs.log.VcsRef;
+import com.intellij.vcs.log.VcsRefType;
import com.intellij.vcs.log.impl.SimpleRefGroup;
import com.intellij.vcs.log.impl.SingletonRefGroup;
import com.intellij.vcs.log.impl.VcsLogUtil;
import git4idea.GitBranch;
+import git4idea.GitColors;
import git4idea.GitRemoteBranch;
import git4idea.GitTag;
import git4idea.repo.GitBranchTrackInfo;
@@ -32,11 +38,11 @@ import java.util.List;
* @author Kirill Likhodedov
*/
public class GitRefManager implements VcsLogRefManager {
- public static final VcsRefType HEAD = new SimpleRefType(true, VcsLogStandardColors.Refs.TIP, "HEAD");
- public static final VcsRefType LOCAL_BRANCH = new SimpleRefType(true, VcsLogStandardColors.Refs.BRANCH, "LOCAL_BRANCH");
- public static final VcsRefType REMOTE_BRANCH = new SimpleRefType(true, VcsLogStandardColors.Refs.BRANCH_REF, "REMOTE_BRANCH");
- public static final VcsRefType TAG = new SimpleRefType(false, VcsLogStandardColors.Refs.TAG, "TAG");
- public static final VcsRefType OTHER = new SimpleRefType(false, VcsLogStandardColors.Refs.TAG, "OTHER");
+ public static final VcsRefType HEAD = new SimpleRefType(true, GitColors.REFS_HEAD);
+ public static final VcsRefType LOCAL_BRANCH = new SimpleRefType(true, GitColors.REFS_LOCAL_BRANCH);
+ public static final VcsRefType REMOTE_BRANCH = new SimpleRefType(true, GitColors.REFS_REMOTE_BRANCH);
+ public static final VcsRefType TAG = new SimpleRefType(false, GitColors.REFS_TAG);
+ public static final VcsRefType OTHER = new SimpleRefType(false, GitColors.REFS_OTHER);
private static final List REF_TYPE_INDEX = Arrays.asList(HEAD, LOCAL_BRANCH, REMOTE_BRANCH, TAG, OTHER);
@@ -313,13 +319,11 @@ public class GitRefManager implements VcsLogRefManager {
private static class SimpleRefType implements VcsRefType {
private final boolean myIsBranch;
- @NotNull private final Color myColor;
- @NotNull private final String myName;
+ private final ColorKey myColorKey;
- public SimpleRefType(boolean isBranch, @NotNull Color color, @NotNull String typeName) {
+ public SimpleRefType(boolean isBranch, @NotNull ColorKey colorKey) {
myIsBranch = isBranch;
- myColor = color;
- myName = typeName;
+ myColorKey = colorKey;
}
@Override
@@ -329,13 +333,13 @@ public class GitRefManager implements VcsLogRefManager {
@NotNull
@Override
- public Color getBackgroundColor() {
- return myColor;
+ public ColorKey getBgColorKey() {
+ return myColorKey;
}
@Override
public String toString() {
- return myName;
+ return myColorKey.getExternalName();
}
@Override
@@ -343,12 +347,12 @@ public class GitRefManager implements VcsLogRefManager {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SimpleRefType type = (SimpleRefType)o;
- return myIsBranch == type.myIsBranch && Objects.equals(myName, type.myName);
+ return myIsBranch == type.myIsBranch && myColorKey == type.myColorKey;
}
@Override
public int hashCode() {
- return Objects.hash(myIsBranch, myName);
+ return Objects.hash(myIsBranch, myColorKey);
}
}
@@ -381,7 +385,8 @@ public class GitRefManager implements VcsLogRefManager {
@NotNull
@Override
public List getColors() {
- return Collections.singletonList(VcsLogStandardColors.Refs.TIP);
+ Color color = EditorColorsUtil.getGlobalOrDefaultColor(GitColors.REFS_HEAD);
+ return Collections.singletonList(color);
}
}
@@ -414,7 +419,8 @@ public class GitRefManager implements VcsLogRefManager {
@NotNull
@Override
public List getColors() {
- return Collections.singletonList(VcsLogStandardColors.Refs.BRANCH_REF);
+ Color color = EditorColorsUtil.getGlobalOrDefaultColor(GitColors.REFS_REMOTE_BRANCH);
+ return Collections.singletonList(color);
}
}
diff --git a/plugins/hg4idea/src/META-INF/plugin.xml b/plugins/hg4idea/src/META-INF/plugin.xml
index 8ef76262ce1f..f2e203c8003c 100644
--- a/plugins/hg4idea/src/META-INF/plugin.xml
+++ b/plugins/hg4idea/src/META-INF/plugin.xml
@@ -32,6 +32,7 @@
+
diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/HgColors.java b/plugins/hg4idea/src/org/zmlx/hg4idea/HgColors.java
new file mode 100644
index 000000000000..bfb45adc98fa
--- /dev/null
+++ b/plugins/hg4idea/src/org/zmlx/hg4idea/HgColors.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.zmlx.hg4idea;
+
+import com.intellij.openapi.editor.colors.ColorKey;
+import com.intellij.openapi.options.colors.ColorDescriptor;
+import com.intellij.ui.JBColor;
+import com.intellij.vcs.VcsColorsProvider;
+import com.intellij.vcs.log.VcsLogColors;
+import org.jetbrains.annotations.NotNull;
+
+import java.awt.*;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author gregsh
+ */
+public class HgColors extends VcsColorsProvider {
+ public static final ColorKey REFS_TIP = ColorKey.createColorKey("HG_REFS_TIP", VcsLogColors.REFS_HEAD);
+ public static final ColorKey REFS_HEAD = ColorKey.createColorKey("HG_REFS_HEAD", VcsLogColors.REFS_LEAF);
+ public static final ColorKey REFS_BRANCH = ColorKey.createColorKey("HG_REFS_BRANCH", VcsLogColors.REFS_BRANCH);
+ public static final ColorKey REFS_BOOKMARK = ColorKey.createColorKey("HG_REFS_BOOKMARK", VcsLogColors.REFS_BRANCH_REF);
+ public static final ColorKey REFS_TAG = ColorKey.createColorKey("HG_REFS_TAG", VcsLogColors.REFS_TAG);
+
+ public static final ColorKey CLOSED_BRANCH = ColorKey.createColorKey("HG_CLOSED_BRANCH", new JBColor(new Color(0x823139), new Color(0xff5f6f)));
+ public static final ColorKey LOCAL_TAG = ColorKey.createColorKey("HG_LOCAL_TAG", new JBColor(new Color(0x009090), new Color(0x00f3f3)));
+ public static final ColorKey MQ_TAG = ColorKey.createColorKey("HG_MQ_TAG", new JBColor(new Color(0x002f90), new Color(0x0055ff)));
+
+ @NotNull
+ @Override
+ public List getColorDescriptors() {
+ return Arrays.asList(
+ new ColorDescriptor("VCS Log//Mercurial//Tip", REFS_TIP, ColorDescriptor.Kind.FOREGROUND),
+ new ColorDescriptor("VCS Log//Mercurial//Head", REFS_HEAD, ColorDescriptor.Kind.FOREGROUND),
+ new ColorDescriptor("VCS Log//Mercurial//Branch", REFS_BRANCH, ColorDescriptor.Kind.FOREGROUND),
+ new ColorDescriptor("VCS Log//Mercurial//Bookmark", REFS_BOOKMARK, ColorDescriptor.Kind.FOREGROUND),
+ new ColorDescriptor("VCS Log//Mercurial//Tag", REFS_TAG, ColorDescriptor.Kind.FOREGROUND),
+
+ new ColorDescriptor("VCS Log//Mercurial//Closed branch", CLOSED_BRANCH, ColorDescriptor.Kind.FOREGROUND),
+ new ColorDescriptor("VCS Log//Mercurial//Local tag", LOCAL_TAG, ColorDescriptor.Kind.FOREGROUND),
+ new ColorDescriptor("VCS Log//Mercurial//MQ tag", MQ_TAG, ColorDescriptor.Kind.FOREGROUND)
+ );
+ }
+}
diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java
index 3b6f50812c61..d44b33f33065 100644
--- a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java
+++ b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java
@@ -15,35 +15,34 @@
*/
package org.zmlx.hg4idea.log;
-import com.intellij.ui.JBColor;
+import com.intellij.openapi.editor.colors.ColorKey;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
-import com.intellij.vcs.log.*;
+import com.intellij.vcs.log.RefGroup;
+import com.intellij.vcs.log.VcsLogRefManager;
+import com.intellij.vcs.log.VcsRef;
+import com.intellij.vcs.log.VcsRefType;
import com.intellij.vcs.log.impl.SimpleRefGroup;
import com.intellij.vcs.log.impl.SingletonRefGroup;
import com.intellij.vcs.log.impl.VcsLogUtil;
import org.jetbrains.annotations.NotNull;
+import org.zmlx.hg4idea.HgColors;
-import java.awt.*;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.*;
-import java.util.List;
public class HgRefManager implements VcsLogRefManager {
- private static final Color CLOSED_BRANCH_COLOR = new JBColor(new Color(0x823139), new Color(0xff5f6f));
- private static final Color LOCAL_TAG_COLOR = new JBColor(new Color(0x009090), new Color(0x00f3f3));
- private static final Color MQ_TAG_COLOR = new JBColor(new Color(0x002f90), new Color(0x0055ff));
- public static final VcsRefType TIP = new SimpleRefType("TIP", true, VcsLogStandardColors.Refs.TIP);
- public static final VcsRefType HEAD = new SimpleRefType("HEAD", true, VcsLogStandardColors.Refs.LEAF);
- public static final VcsRefType BRANCH = new SimpleRefType("BRANCH", true, VcsLogStandardColors.Refs.BRANCH);
- public static final VcsRefType CLOSED_BRANCH = new SimpleRefType("CLOSED_BRANCH", false, CLOSED_BRANCH_COLOR);
- public static final VcsRefType BOOKMARK = new SimpleRefType("BOOKMARK", true, VcsLogStandardColors.Refs.BRANCH_REF);
- public static final VcsRefType TAG = new SimpleRefType("TAG", false, VcsLogStandardColors.Refs.TAG);
- public static final VcsRefType LOCAL_TAG = new SimpleRefType("LOCAL_TAG", false, LOCAL_TAG_COLOR);
- public static final VcsRefType MQ_APPLIED_TAG = new SimpleRefType("MQ_TAG", false, MQ_TAG_COLOR);
+ public static final VcsRefType TIP = new SimpleRefType("TIP", true, HgColors.REFS_TIP);
+ public static final VcsRefType HEAD = new SimpleRefType("HEAD", true, HgColors.REFS_HEAD);
+ public static final VcsRefType BRANCH = new SimpleRefType("BRANCH", true, HgColors.REFS_BRANCH);
+ public static final VcsRefType CLOSED_BRANCH = new SimpleRefType("CLOSED_BRANCH", false, HgColors.CLOSED_BRANCH);
+ public static final VcsRefType BOOKMARK = new SimpleRefType("BOOKMARK", true, HgColors.REFS_BOOKMARK);
+ public static final VcsRefType TAG = new SimpleRefType("TAG", false, HgColors.REFS_TAG);
+ public static final VcsRefType LOCAL_TAG = new SimpleRefType("LOCAL_TAG", false, HgColors.LOCAL_TAG);
+ public static final VcsRefType MQ_APPLIED_TAG = new SimpleRefType("MQ_TAG", false, HgColors.MQ_TAG);
// first has the highest priority
private static final List REF_TYPE_PRIORITIES = Arrays.asList(TIP, HEAD, BRANCH, BOOKMARK, TAG);
@@ -155,9 +154,9 @@ public class HgRefManager implements VcsLogRefManager {
private static class SimpleRefType implements VcsRefType {
@NotNull private final String myName;
private final boolean myIsBranch;
- @NotNull private final Color myColor;
+ @NotNull private final ColorKey myColor;
- public SimpleRefType(@NotNull String name, boolean isBranch, @NotNull Color color) {
+ public SimpleRefType(@NotNull String name, boolean isBranch, @NotNull ColorKey color) {
myName = name;
myIsBranch = isBranch;
myColor = color;
@@ -170,7 +169,7 @@ public class HgRefManager implements VcsLogRefManager {
@NotNull
@Override
- public Color getBackgroundColor() {
+ public ColorKey getBgColorKey() {
return myColor;
}