From b7403152813c7fee783e3c999c7f7ae9fbaacce0 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 3 Feb 2012 18:16:16 -0500
Subject: Block pushes to a repository with a working copy (issue 49)

---
 src/com/gitblit/GitFilter.java | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

(limited to 'src/com/gitblit/GitFilter.java')

diff --git a/src/com/gitblit/GitFilter.java b/src/com/gitblit/GitFilter.java
index a7f0fe74..e76fd767 100644
--- a/src/com/gitblit/GitFilter.java
+++ b/src/com/gitblit/GitFilter.java
@@ -81,6 +81,25 @@ public class GitFilter extends AccessRestrictionFilter {
 		}
 		return null;
 	}
+	
+	/**
+	 * Determine if the repository can receive pushes.
+	 * 
+	 * @param repository
+	 * @param action
+	 * @return true if the action may be performed
+	 */
+	@Override
+	protected boolean isActionAllowed(RepositoryModel repository, String action) {
+		if (action.equals(gitReceivePack)) {
+			// Push request
+			if (!repository.isBare) {
+				logger.warn("Gitblit does not allow pushes to repositories with a working copy");
+				return false;
+			}
+		}
+		return true;
+	}
 
 	/**
 	 * Determine if the repository requires authentication.
@@ -107,8 +126,8 @@ public class GitFilter extends AccessRestrictionFilter {
 		if (!GitBlit.getBoolean(Keys.git.enableGitServlet, true)) {
 			// Git Servlet disabled
 			return false;
-		}
-		boolean readOnly = repository.isFrozen;
+		}		
+		boolean readOnly = repository.isFrozen;	
 		if (readOnly || repository.accessRestriction.atLeast(AccessRestrictionType.PUSH)) {
 			boolean authorizedUser = user.canAccessRepository(repository);
 			if (action.equals(gitReceivePack)) {
-- 
cgit v1.2.3