From 65f55eee1c41a9cdfec96dc4310efcc6e57df97f Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 01 Aug 2012 09:48:06 -0400
Subject: [PATCH] Add recursion depth control for repository search (issue 103)

---
 src/com/gitblit/utils/JGitUtils.java |   18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java
index 62d27da..ff701b3 100644
--- a/src/com/gitblit/utils/JGitUtils.java
+++ b/src/com/gitblit/utils/JGitUtils.java
@@ -275,16 +275,18 @@
 	 *            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<String> getRepositoryList(File repositoriesFolder, boolean onlyBare,
-			boolean searchSubfolders) {
+			boolean searchSubfolders, int depth) {
 		List<String> list = new ArrayList<String>();
 		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 @@
 	 *            repositories are included.
 	 * @param searchSubfolders
 	 *            recurse into subfolders to find grouped repositories
+	 * @param depth
+	 *            recursion depth, -1 = infinite recursion
 	 * @return
 	 */
 	private static List<String> getRepositoryList(String basePath, File searchFolder,
-			boolean onlyBare, boolean searchSubfolders) {
+			boolean onlyBare, boolean searchSubfolders, int depth) {
 		File baseFile = new File(basePath);
 		List<String> list = new ArrayList<String>();
+		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 @@
 						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));
 				}
 			}
 		}

--
Gitblit v1.9.1