diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/UserNameRegex.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/UserNameRegex.java index 347760df66c3..c64e5b1b6920 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/UserNameRegex.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/UserNameRegex.java @@ -15,16 +15,23 @@ */ package com.intellij.vcs.log; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Function; +import org.jetbrains.annotations.NotNull; public class UserNameRegex implements Function { - public static final UserNameRegex INSTANCE = new UserNameRegex(); + @NotNull public static final UserNameRegex BASIC_INSTANCE = new UserNameRegex(false); + @NotNull public static final UserNameRegex EXTENDED_INSTANCE = new UserNameRegex(true); + @NotNull private static final char[] BASIC_REGEX_CHARS = new char[]{'.', '^', '$', '*', '[', ']'}; + @NotNull public static final char[] EXTENDED_REGEX_CHARS = new char[]{'.', '^', '$', '*', '+', '-', '?', '(', ')', '[', ']', '{', '}', '|'}; + private final boolean myExtended; - private UserNameRegex() { + private UserNameRegex(boolean extended) { + myExtended = extended; } @Override public String fun(String s) { - return "^" + s + "$"; + return "^" + StringUtil.escapeChars(StringUtil.escapeBackSlashes(s), myExtended ? EXTENDED_REGEX_CHARS : BASIC_REGEX_CHARS) + "$"; } } diff --git a/plugins/git4idea/src/git4idea/log/GitLogProvider.java b/plugins/git4idea/src/git4idea/log/GitLogProvider.java index 0cb80b47f01b..119e72de33bf 100644 --- a/plugins/git4idea/src/git4idea/log/GitLogProvider.java +++ b/plugins/git4idea/src/git4idea/log/GitLogProvider.java @@ -463,12 +463,7 @@ public class GitLogProvider implements VcsLogProvider { if (filterCollection.getUserFilter() != null) { String authorFilter = - StringUtil.join(ContainerUtil.map(filterCollection.getUserFilter().getUserNames(root), new Function() { - @Override - public String fun(String s) { - return UserNameRegex.INSTANCE.fun(StringUtil.escapeBackSlashes(s)); - } - }), "\\|"); + StringUtil.join(ContainerUtil.map(filterCollection.getUserFilter().getUserNames(root), UserNameRegex.BASIC_INSTANCE), "\\|"); filterParameters.add(prepareParameter("author", authorFilter)); } diff --git a/plugins/git4idea/tests/git4idea/log/GitUserFilterTest.java b/plugins/git4idea/tests/git4idea/log/GitUserFilterTest.java index 6bf7cb4dc00b..5a05a7c51fe9 100644 --- a/plugins/git4idea/tests/git4idea/log/GitUserFilterTest.java +++ b/plugins/git4idea/tests/git4idea/log/GitUserFilterTest.java @@ -21,10 +21,7 @@ import com.intellij.util.ArrayUtil; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; -import com.intellij.vcs.log.TimedVcsCommit; -import com.intellij.vcs.log.VcsLogObjectsFactory; -import com.intellij.vcs.log.VcsLogUserFilter; -import com.intellij.vcs.log.VcsUser; +import com.intellij.vcs.log.*; import com.intellij.vcs.log.impl.VcsLogFilterCollectionImpl; import com.intellij.vcs.log.ui.filter.VcsLogUserFilterImpl; import git4idea.test.GitSingleRepoTest; @@ -73,7 +70,7 @@ public class GitUserFilterTest extends GitSingleRepoTest { public void testWeirdCharacters() throws Exception { List names = ContainerUtil.newArrayList(); - for (Character c : new char[]{'.', '^', '$', '*', '+', '-', '?', '(', ')', '[', ']', '{', '}', '|'}) { + for (Character c : UserNameRegex.EXTENDED_REGEX_CHARS) { String name = "user" + Character.toString(c) + "userovich"; names.add(name); names.add(name + "@company.com"); diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java index 5374d73b2ad5..8dfd7bfcc291 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java @@ -222,7 +222,7 @@ public class HgLogProvider implements VcsLogProvider { if (filterCollection.getUserFilter() != null) { filterParameters.add("-r"); String authorFilter = - StringUtil.join(ContainerUtil.map(filterCollection.getUserFilter().getUserNames(root), UserNameRegex.INSTANCE), "|"); + StringUtil.join(ContainerUtil.map(filterCollection.getUserFilter().getUserNames(root), UserNameRegex.EXTENDED_INSTANCE), "|"); filterParameters.add("user('re:" + authorFilter + "')"); }