From 13417cf9c6eec555b51da49742e47939d2f5715b Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 19 Oct 2012 22:47:33 -0400
Subject: [PATCH] Exclude submodules from zip downloads (issue 151)

---
 src/com/gitblit/models/RepositoryModel.java |  122 +++++++++++++++++++++++++++-------------
 1 files changed, 82 insertions(+), 40 deletions(-)

diff --git a/src/com/gitblit/models/RepositoryModel.java b/src/com/gitblit/models/RepositoryModel.java
index fd35f36..502f886 100644
--- a/src/com/gitblit/models/RepositoryModel.java
+++ b/src/com/gitblit/models/RepositoryModel.java
@@ -19,17 +19,14 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-
-import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.lib.StoredConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 
 import com.gitblit.Constants.AccessRestrictionType;
+import com.gitblit.Constants.AuthorizationControl;
 import com.gitblit.Constants.FederationStrategy;
-import com.gitblit.GitBlit;
 import com.gitblit.utils.ArrayUtils;
-import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.StringUtils;
 
 /**
@@ -42,11 +39,6 @@
 public class RepositoryModel implements Serializable, Comparable<RepositoryModel> {
 
 	private static final long serialVersionUID = 1L;
-	
-	public static String CUSTOM_DEFINED_PROP_SECTION = "gitblit";
-	public static String CUSTOM_DEFINED_PROP_SUBSECTION = "customDefinedProperties";
-	
-	private final Logger logger = LoggerFactory.getLogger(RepositoryModel.class);
 
 	// field names are reflectively mapped in EditRepository page
 	public String name;
@@ -58,6 +50,8 @@
 	public boolean useTickets;
 	public boolean useDocs;
 	public AccessRestrictionType accessRestriction;
+	public AuthorizationControl authorizationControl;
+	public boolean allowAuthenticated;
 	public boolean isFrozen;
 	public boolean showReadme;
 	public FederationStrategy federationStrategy;
@@ -75,7 +69,13 @@
 	public List<String> preReceiveScripts;
 	public List<String> postReceiveScripts;
 	public List<String> mailingLists;
+	public Map<String, String> customFields;
+	public String projectPath;
 	private String displayName;
+	public boolean allowForks;
+	public Set<String> forks;
+	public String originRepository;
+	public boolean verifyCommitter;
 	
 	public RepositoryModel() {
 		this("", "", "", new Date(0));
@@ -87,8 +87,10 @@
 		this.owner = owner;
 		this.lastChange = lastchange;
 		this.accessRestriction = AccessRestrictionType.NONE;
+		this.authorizationControl = AuthorizationControl.NAMED;
 		this.federationSets = new ArrayList<String>();
-		this.federationStrategy = FederationStrategy.FEDERATE_THIS;		
+		this.federationStrategy = FederationStrategy.FEDERATE_THIS;	
+		this.projectPath = StringUtils.getFirstPathElement(name);
 	}
 	
 	public List<String> getLocalBranches() {
@@ -104,35 +106,35 @@
 		return localBranches;
 	}
 	
-	public String getCustomProperty(String propertyKey) {
-		try {
-			Repository r = GitBlit.self().getRepository(name);
-			StoredConfig config = JGitUtils.readConfig(r);
-			
-			return config.getString(CUSTOM_DEFINED_PROP_SECTION, CUSTOM_DEFINED_PROP_SUBSECTION, propertyKey);
-		} catch (Exception e) {
-			logger.error("Error getting Custom Property", e);
-			
-			return null;
-		}		
+	public void addFork(String repository) {
+		if (forks == null) {
+			forks = new TreeSet<String>();
+		}
+		forks.add(repository);
 	}
 	
-	public String setCustomProperty(String propertyKey, String propertyValue) {
-		try {
-			Repository r = GitBlit.self().getRepository(name);
-			StoredConfig config = JGitUtils.readConfig(r);
-			
-			String oldValue = config.getString(CUSTOM_DEFINED_PROP_SECTION, CUSTOM_DEFINED_PROP_SUBSECTION, propertyKey);
-			
-			config.setString(CUSTOM_DEFINED_PROP_SECTION, CUSTOM_DEFINED_PROP_SUBSECTION, propertyKey, propertyValue);
-			config.save();
-			
-			return oldValue;
-		} catch (Exception e) {
-			logger.error("Error getting Custom Property", e);
-			
-			return null;
-		}		
+	public void removeFork(String repository) {
+		if (forks == null) {
+			return;
+		}
+		forks.remove(repository);
+	}
+	
+	public void resetDisplayName() {
+		displayName = null;
+	}
+	
+	@Override
+	public int hashCode() {
+		return name.hashCode();
+	}
+	
+	@Override
+	public boolean equals(Object o) {
+		if (o instanceof RepositoryModel) {
+			return name.equals(((RepositoryModel) o).name);
+		}
+		return false;
 	}
 
 	@Override
@@ -147,4 +149,44 @@
 	public int compareTo(RepositoryModel o) {
 		return StringUtils.compareRepositoryNames(name, o.name);
 	}
+	
+	public boolean isFork() {
+		return !StringUtils.isEmpty(originRepository);
+	}
+	
+	public boolean isOwner(String username) {
+		return owner != null && username != null && owner.equalsIgnoreCase(username);
+	}
+	
+	public boolean isPersonalRepository() {
+		return !StringUtils.isEmpty(projectPath) && projectPath.charAt(0) == '~';
+	}
+	
+	public boolean isUsersPersonalRepository(String username) {
+		return !StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username);
+	}
+	
+	public boolean allowAnonymousView() {
+		return !accessRestriction.atLeast(AccessRestrictionType.VIEW);
+	}
+	
+	public RepositoryModel cloneAs(String cloneName) {
+		RepositoryModel clone = new RepositoryModel();
+		clone.originRepository = name;
+		clone.name = cloneName;
+		clone.projectPath = StringUtils.getFirstPathElement(cloneName);
+		clone.isBare = true;
+		clone.description = description;
+		clone.accessRestriction = AccessRestrictionType.PUSH;
+		clone.authorizationControl = AuthorizationControl.NAMED;
+		clone.federationStrategy = federationStrategy;
+		clone.showReadme = showReadme;
+		clone.showRemoteBranches = false;
+		clone.allowForks = false;
+		clone.useDocs = useDocs;
+		clone.useTickets = useTickets;
+		clone.skipSizeCalculation = skipSizeCalculation;
+		clone.skipSummaryMetrics = skipSummaryMetrics;
+		return clone;
+	}
 }
\ No newline at end of file

--
Gitblit v1.9.1