From 1e1b85270f93b3bca624c99b478f3a9a23be2395 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Sat, 29 Sep 2012 23:40:46 -0400
Subject: [PATCH] Preliminary implementation of server-side forking (issue 137)

---
 src/com/gitblit/models/RepositoryModel.java |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/src/com/gitblit/models/RepositoryModel.java b/src/com/gitblit/models/RepositoryModel.java
index 2719663..44aba1d 100644
--- a/src/com/gitblit/models/RepositoryModel.java
+++ b/src/com/gitblit/models/RepositoryModel.java
@@ -20,6 +20,8 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 
 import com.gitblit.Constants.AccessRestrictionType;
 import com.gitblit.Constants.AuthorizationControl;
@@ -68,7 +70,11 @@
 	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 RepositoryModel() {
 		this("", "", "", new Date(0));
@@ -97,6 +103,24 @@
 		}
 		return localBranches;
 	}
+	
+	public void addFork(String repository) {
+		if (forks == null) {
+			forks = new TreeSet<String>();
+		}
+		forks.add(repository);
+	}
+	
+	public void removeFork(String repository) {
+		if (forks == null) {
+			return;
+		}
+		forks.remove(repository);
+	}
+	
+	public void resetDisplayName() {
+		displayName = null;
+	}
 
 	@Override
 	public String toString() {
@@ -110,4 +134,29 @@
 	public int compareTo(RepositoryModel o) {
 		return StringUtils.compareRepositoryNames(name, o.name);
 	}
+	
+	public boolean isPersonalRepository() {
+		return !StringUtils.isEmpty(projectPath) && projectPath.charAt(0) == '~';
+	}
+	
+	public boolean isUsersPersonalRepository(String username) {
+		return !StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username);
+	}
+	
+	public RepositoryModel cloneAs(String cloneName) {
+		RepositoryModel clone = new RepositoryModel();
+		clone.name = cloneName;
+		clone.description = description;
+		clone.accessRestriction = accessRestriction;
+		clone.authorizationControl = authorizationControl;
+		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