From 65f55eee1c41a9cdfec96dc4310efcc6e57df97f Mon Sep 17 00:00:00 2001 From: James Moger Date: Wed, 1 Aug 2012 09:48:06 -0400 Subject: Add recursion depth control for repository search (issue 103) --- src/com/gitblit/AddIndexedBranch.java | 2 +- src/com/gitblit/GitBlit.java | 3 ++- src/com/gitblit/utils/JGitUtils.java | 18 +++++++++++++----- 3 files changed, 16 insertions(+), 7 deletions(-) (limited to 'src/com') diff --git a/src/com/gitblit/AddIndexedBranch.java b/src/com/gitblit/AddIndexedBranch.java index 1eb93891..8ead17e0 100644 --- a/src/com/gitblit/AddIndexedBranch.java +++ b/src/com/gitblit/AddIndexedBranch.java @@ -63,7 +63,7 @@ public class AddIndexedBranch { // determine available repositories File folder = new File(params.folder); - List repoList = JGitUtils.getRepositoryList(folder, false, true); + List repoList = JGitUtils.getRepositoryList(folder, false, true, -1); int modCount = 0; int skipCount = 0; diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index 10b12534..d4a59d5a 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -742,7 +742,8 @@ public class GitBlit implements ServletContextListener { public List getRepositoryList() { return JGitUtils.getRepositoryList(repositoriesFolder, settings.getBoolean(Keys.git.onlyAccessBareRepositories, false), - settings.getBoolean(Keys.git.searchRepositoriesSubfolders, true)); + settings.getBoolean(Keys.git.searchRepositoriesSubfolders, true), + settings.getInteger(Keys.git.searchRecursionDepth, -1)); } /** diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java index 62d27da8..ff701b39 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/src/com/gitblit/utils/JGitUtils.java @@ -275,16 +275,18 @@ public class JGitUtils { * false all repositories are included. * @param searchSubfolders * recurse into subfolders to find grouped repositories + * @param depth + * optional recursion depth, -1 = infinite recursion * @return list of repository names */ public static List getRepositoryList(File repositoriesFolder, boolean onlyBare, - boolean searchSubfolders) { + boolean searchSubfolders, int depth) { List list = new ArrayList(); if (repositoriesFolder == null || !repositoriesFolder.exists()) { return list; } list.addAll(getRepositoryList(repositoriesFolder.getAbsolutePath(), repositoriesFolder, - onlyBare, searchSubfolders)); + onlyBare, searchSubfolders, depth)); StringUtils.sortRepositorynames(list); return list; } @@ -301,12 +303,18 @@ public class JGitUtils { * repositories are included. * @param searchSubfolders * recurse into subfolders to find grouped repositories + * @param depth + * recursion depth, -1 = infinite recursion * @return */ private static List getRepositoryList(String basePath, File searchFolder, - boolean onlyBare, boolean searchSubfolders) { + boolean onlyBare, boolean searchSubfolders, int depth) { File baseFile = new File(basePath); List list = new ArrayList(); + if (depth == 0) { + return list; + } + int nextDepth = (depth == -1) ? -1 : depth - 1; for (File file : searchFolder.listFiles()) { if (file.isDirectory()) { File gitDir = FileKey.resolve(new File(searchFolder, file.getName()), FS.DETECTED); @@ -320,11 +328,11 @@ public class JGitUtils { list.add(repository); } else if (searchSubfolders && file.canRead()) { // look for repositories in subfolders - list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders)); + list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders, nextDepth)); } } else if (searchSubfolders && file.canRead()) { // look for repositories in subfolders - list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders)); + list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders, nextDepth)); } } } -- cgit v1.2.3