mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] extract VcsLogMultiplePatternsTextFilter class to filter by multiple strings
Use VcsLogMultiplePatternsTextFilter for finding commits whith specified hashes in commit messages. IDEA-130970
This commit is contained in:
@@ -36,7 +36,7 @@ class VcsLogTextFilterImpl internal constructor(private val text: String,
|
||||
override fun matchesCase(): Boolean = isMatchCase
|
||||
|
||||
override fun toString(): String {
|
||||
return "containing $text (case ${if (isMatchCase) "sensitive" else "insensitive"})"
|
||||
return "containing $text ${caseSensitiveText()}"
|
||||
}
|
||||
|
||||
companion object {
|
||||
@@ -51,6 +51,13 @@ class VcsLogTextFilterImpl internal constructor(private val text: String,
|
||||
}
|
||||
return VcsLogTextFilterImpl(text, isMatchCase)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun createTextFilter(patterns: List<String>, isMatchCase: Boolean = false): VcsLogTextFilter {
|
||||
if (patterns.isEmpty()) return createTextFilter("", false, isMatchCase)
|
||||
if (patterns.size == 1) return createTextFilter(patterns.single(), false, isMatchCase)
|
||||
return VcsLogMultiplePatternsTextFilter(patterns, isMatchCase)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +71,24 @@ class VcsLogRegexTextFilter internal constructor(private val pattern: Pattern) :
|
||||
override fun matchesCase(): Boolean = (pattern.flags() and Pattern.CASE_INSENSITIVE) == 0
|
||||
|
||||
override fun toString(): String {
|
||||
return "matching $text (case ${if (matchesCase()) "sensitive" else "insensitive"})"
|
||||
return "matching $text ${caseSensitiveText()}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class VcsLogMultiplePatternsTextFilter internal constructor(private val patterns: List<String>,
|
||||
private val isMatchCase: Boolean) : VcsLogDetailsFilter, VcsLogTextFilter {
|
||||
override fun getText(): String = if (patterns.size == 1) patterns.single() else patterns.joinToString("|") { Pattern.quote(it) }
|
||||
|
||||
override fun isRegex(): Boolean = patterns.size > 1
|
||||
|
||||
override fun matchesCase(): Boolean = isMatchCase
|
||||
|
||||
override fun matches(message: String): Boolean = patterns.any { message.contains(it, !isMatchCase) }
|
||||
|
||||
override fun toString(): String {
|
||||
return "containing at least one of the ${patterns.joinToString(", ")} ${caseSensitiveText()}"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun VcsLogTextFilter.caseSensitiveText() = "(case ${if (matchesCase()) "sensitive" else "insensitive"})"
|
||||
@@ -18,7 +18,6 @@ package com.intellij.vcs.log.visible;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vcs.FilePath;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -202,7 +201,7 @@ public class VcsLogFiltererImpl implements VcsLogFilterer {
|
||||
if (commitId != null) hashFilterResult.add(myStorage.getCommitIndex(commitId.getHash(), commitId.getRoot()));
|
||||
}
|
||||
}
|
||||
VcsLogTextFilter textFilter = VcsLogTextFilterImpl.createTextFilter(StringUtil.join(hashes, "|"), true, false);
|
||||
VcsLogTextFilter textFilter = VcsLogTextFilterImpl.createTextFilter(ContainerUtil.newArrayList(hashes), false);
|
||||
FilterByDetailsResult textFilterResult = filterByDetails(dataPack, new VcsLogFilterCollectionBuilder(textFilter).build(),
|
||||
commitCount, dataPack.getLogProviders().keySet(), null);
|
||||
if (hashFilterResult.isEmpty() && matchesNothing(textFilterResult.matchingCommits)) return null;
|
||||
|
||||
Reference in New Issue
Block a user