From b86562942b1d4a498e337b28201e0db308fa51c8 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 03 Feb 2012 22:49:14 -0500
Subject: [PATCH] Setting to control display/serving non-bare repositories (issue 49)

---
 src/com/gitblit/GitBlit.java               |    7 +++----
 docs/04_releases.mkd                       |    2 ++
 tests/com/gitblit/tests/JGitUtilsTest.java |    2 +-
 distrib/gitblit.properties                 |   11 ++++++++++-
 src/com/gitblit/utils/JGitUtils.java       |   25 +++++++++++--------------
 5 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/distrib/gitblit.properties b/distrib/gitblit.properties
index f6a8650..0f7f728 100644
--- a/distrib/gitblit.properties
+++ b/distrib/gitblit.properties
@@ -2,7 +2,9 @@
 # Git Servlet Settings
 #
 
-# Base folder for repositories
+# Base folder for repositories.
+# This folder may contain bare and non-bare repositories but Gitblit will only
+# allow you to push to bare repositories.
 # Use forward slashes even on Windows!!
 # e.g. c:/gitrepos
 #
@@ -28,6 +30,13 @@
 # SINCE 0.5.0
 git.enableGitServlet = true
 
+# Only serve/display bare repositories.
+# If there are non-bare repositories in git.repositoriesFolder and this setting
+# is true, they will be excluded from the ui. 
+#
+# SINCE 0.9.0
+git.onlyAccessBareRepositories = false
+
 #
 # Groovy Integration
 #
diff --git a/docs/04_releases.mkd b/docs/04_releases.mkd
index e511319..1cd966e 100644
--- a/docs/04_releases.mkd
+++ b/docs/04_releases.mkd
@@ -11,6 +11,8 @@
 
 #### additions
 
+- New setting to prevent display/serving non-bare repositories  
+    **New:** *git.onlyAccessBareRepositories = false*
 - Allow relinking HEAD to a branch or a tag (Github/plm)
 
 #### fixes 
diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index 7a6411c..7cb813f 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -123,8 +123,6 @@
 
 	private File repositoriesFolder;
 
-	private boolean exportAll = true;
-
 	private IUserService userService;
 
 	private IStoredSettings settings;
@@ -642,7 +640,8 @@
 	 * @return list of all repositories
 	 */
 	public List<String> getRepositoryList() {
-		return JGitUtils.getRepositoryList(repositoriesFolder, exportAll,
+		return JGitUtils.getRepositoryList(repositoriesFolder, 
+				settings.getBoolean(Keys.git.onlyAccessBareRepositories, false),
 				settings.getBoolean(Keys.git.searchRepositoriesSubfolders, true));
 	}
 
@@ -1767,7 +1766,7 @@
 		this.settings = settings;
 		repositoriesFolder = getRepositoriesFolder();
 		logger.info("Git repositories folder " + repositoriesFolder.getAbsolutePath());
-		repositoryResolver = new FileResolver<Void>(repositoriesFolder, exportAll);
+		repositoryResolver = new FileResolver<Void>(repositoriesFolder, true);
 		serverStatus = new ServerStatus(isGO());
 		String realm = settings.getString(Keys.realm.userService, "users.properties");
 		IUserService loginService = null;
diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java
index c80fb8a..1c155ff 100644
--- a/src/com/gitblit/utils/JGitUtils.java
+++ b/src/com/gitblit/utils/JGitUtils.java
@@ -290,21 +290,21 @@
 	 * Returns a list of repository names in the specified folder.
 	 * 
 	 * @param repositoriesFolder
-	 * @param exportAll
-	 *            if true, all repositories are listed. If false only the
-	 *            repositories with a "git-daemon-export-ok" file are included
+	 * @param onlyBare
+	 *            if true, only bare repositories repositories are listed. If
+	 *            false all repositories are included.
 	 * @param searchSubfolders
 	 *            recurse into subfolders to find grouped repositories
 	 * @return list of repository names
 	 */
-	public static List<String> getRepositoryList(File repositoriesFolder, boolean exportAll,
+	public static List<String> getRepositoryList(File repositoriesFolder, boolean onlyBare,
 			boolean searchSubfolders) {
 		List<String> list = new ArrayList<String>();
 		if (repositoriesFolder == null || !repositoriesFolder.exists()) {
 			return list;
 		}
 		list.addAll(getRepositoryList(repositoriesFolder.getAbsolutePath(), repositoriesFolder,
-				exportAll, searchSubfolders));
+				onlyBare, searchSubfolders));
 		StringUtils.sortRepositorynames(list);
 		return list;
 	}
@@ -316,24 +316,21 @@
 	 *            basePath is stripped from the repository name as repositories
 	 *            are relative to this path
 	 * @param searchFolder
-	 * @param exportAll
-	 *            if true all repositories are listed. If false only the
-	 *            repositories with a "git-daemon-export-ok" file are included
+	 * @param onlyBare
+	 *            if true only bare repositories will be listed. if false all
+	 *            repositories are included.
 	 * @param searchSubfolders
 	 *            recurse into subfolders to find grouped repositories
 	 * @return
 	 */
 	private static List<String> getRepositoryList(String basePath, File searchFolder,
-			boolean exportAll, boolean searchSubfolders) {
+			boolean onlyBare, boolean searchSubfolders) {
 		List<String> list = new ArrayList<String>();
 		for (File file : searchFolder.listFiles()) {
 			if (file.isDirectory()) {
 				File gitDir = FileKey.resolve(new File(searchFolder, file.getName()), FS.DETECTED);
 				if (gitDir != null) {
-					boolean exportRepository = exportAll
-							|| new File(gitDir, "git-daemon-export-ok").exists();
-
-					if (!exportRepository) {
+					if (onlyBare && gitDir.getName().equals(".git")) {
 						continue;
 					}
 					// determine repository name relative to base path
@@ -342,7 +339,7 @@
 					list.add(repository);
 				} else if (searchSubfolders && file.canRead()) {
 					// look for repositories in subfolders
-					list.addAll(getRepositoryList(basePath, file, exportAll, searchSubfolders));
+					list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders));
 				}
 			}
 		}
diff --git a/tests/com/gitblit/tests/JGitUtilsTest.java b/tests/com/gitblit/tests/JGitUtilsTest.java
index 8d70d2f..d365bde 100644
--- a/tests/com/gitblit/tests/JGitUtilsTest.java
+++ b/tests/com/gitblit/tests/JGitUtilsTest.java
@@ -66,7 +66,7 @@
 
 	@Test
 	public void testFindRepositories() {
-		List<String> list = JGitUtils.getRepositoryList(null, true, true);
+		List<String> list = JGitUtils.getRepositoryList(null, false, true);
 		assertEquals(0, list.size());
 		list.addAll(JGitUtils.getRepositoryList(new File("DoesNotExist"), true, true));
 		assertEquals(0, list.size());

--
Gitblit v1.9.1