From bb55f5aec092b22ee4b86152c0e0111df48eb34e Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 02 Aug 2012 15:53:51 -0400 Subject: [PATCH] Compile regex patterns once and use matches instead of find (issue 103) --- src/com/gitblit/utils/JGitUtils.java | 26 +++++++++++++------------- 1 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java index 9d2e471..4415982 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/src/com/gitblit/utils/JGitUtils.java @@ -288,8 +288,14 @@ if (repositoriesFolder == null || !repositoriesFolder.exists()) { return list; } + List<Pattern> patterns = new ArrayList<Pattern>(); + if (!ArrayUtils.isEmpty(exclusions)) { + for (String regex : exclusions) { + patterns.add(Pattern.compile(regex)); + } + } list.addAll(getRepositoryList(repositoriesFolder.getAbsolutePath(), repositoriesFolder, - onlyBare, searchSubfolders, depth, exclusions)); + onlyBare, searchSubfolders, depth, patterns)); StringUtils.sortRepositorynames(list); return list; } @@ -308,22 +314,16 @@ * recurse into subfolders to find grouped repositories * @param depth * recursion depth, -1 = infinite recursion - * @param exclusions - * list of regex exclusions for matching to folder names + * @param patterns + * list of regex patterns for matching to folder names * @return */ private static List<String> getRepositoryList(String basePath, File searchFolder, - boolean onlyBare, boolean searchSubfolders, int depth, List<String> exclusions) { + boolean onlyBare, boolean searchSubfolders, int depth, List<Pattern> patterns) { File baseFile = new File(basePath); List<String> list = new ArrayList<String>(); if (depth == 0) { return list; - } - List<Pattern> patterns = new ArrayList<Pattern>(); - if (!ArrayUtils.isEmpty(exclusions)) { - for (String regex : exclusions) { - patterns.add(Pattern.compile(regex)); - } } int nextDepth = (depth == -1) ? -1 : depth - 1; @@ -332,7 +332,7 @@ boolean exclude = false; for (Pattern pattern : patterns) { String path = FileUtils.getRelativePath(baseFile, file).replace('\\', '/'); - if (pattern.matcher(path).find()) { + if (pattern.matcher(path).matches()) { LOGGER.debug(MessageFormat.format("excluding {0} because of rule {1}", path, pattern.pattern())); exclude = true; break; @@ -355,12 +355,12 @@ } else if (searchSubfolders && file.canRead()) { // look for repositories in subfolders list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders, - nextDepth, exclusions)); + nextDepth, patterns)); } } else if (searchSubfolders && file.canRead()) { // look for repositories in subfolders list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders, - nextDepth, exclusions)); + nextDepth, patterns)); } } } -- Gitblit v1.9.1