From f22a0633d08e38ac4bf92b5165a708e11b4d6598 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 03 Oct 2012 17:31:37 -0400
Subject: [PATCH] Implemented support for toggling User.canFork in Manager

---
 src/com/gitblit/models/PathModel.java |   45 +++++++++++++++++++++++++++++++--------------
 1 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/src/com/gitblit/models/PathModel.java b/src/com/gitblit/models/PathModel.java
index 17a7971..8692359 100644
--- a/src/com/gitblit/models/PathModel.java
+++ b/src/com/gitblit/models/PathModel.java
@@ -20,6 +20,13 @@
 import org.eclipse.jgit.diff.DiffEntry.ChangeType;
 import org.eclipse.jgit.lib.FileMode;
 
+/**
+ * PathModel is a serializable model class that represents a file or a folder,
+ * including all its metadata and associated commit id.
+ * 
+ * @author James Moger
+ * 
+ */
 public class PathModel implements Serializable, Comparable<PathModel> {
 
 	private static final long serialVersionUID = 1L;
@@ -28,29 +35,25 @@
 	public final String path;
 	public final long size;
 	public final int mode;
+	public final String objectId;
 	public final String commitId;
 	public boolean isParentPath;
 
-	public PathModel(String name, String path, long size, int mode, String commitId) {
+	public PathModel(String name, String path, long size, int mode, String objectId, String commitId) {
 		this.name = name;
 		this.path = path;
 		this.size = size;
 		this.mode = mode;
+		this.objectId = objectId;
 		this.commitId = commitId;
 	}
 
+	public boolean isSubmodule() {
+		return FileMode.GITLINK.equals(mode);
+	}
+	
 	public boolean isTree() {
 		return FileMode.TREE.equals(mode);
-	}
-
-	public static PathModel getParentPath(String basePath, String commitId) {
-		String parentPath = null;
-		if (basePath.lastIndexOf('/') > -1) {
-			parentPath = basePath.substring(0, basePath.lastIndexOf('/'));
-		}
-		PathModel model = new PathModel("..", parentPath, 0, 40000, commitId);
-		model.isParentPath = true;
-		return model;
 	}
 
 	@Override
@@ -74,6 +77,13 @@
 		if (isTree && otherTree) {
 			return path.compareTo(o.path);
 		} else if (!isTree && !otherTree) {
+			if (isSubmodule() && o.isSubmodule()) {
+				return path.compareTo(o.path);
+			} else if (isSubmodule()) {
+				return -1;
+			} else if (o.isSubmodule()) {
+				return 1;
+			}
 			return path.compareTo(o.path);
 		} else if (isTree && !otherTree) {
 			return -1;
@@ -81,15 +91,22 @@
 		return 1;
 	}
 
+	/**
+	 * PathChangeModel is a serializable class that represents a file changed in
+	 * a commit.
+	 * 
+	 * @author James Moger
+	 * 
+	 */
 	public static class PathChangeModel extends PathModel {
 
 		private static final long serialVersionUID = 1L;
 
 		public final ChangeType changeType;
 
-		public PathChangeModel(String name, String path, long size, int mode, String commitId,
-				ChangeType type) {
-			super(name, path, size, mode, commitId);
+		public PathChangeModel(String name, String path, long size, int mode, String objectId,
+				String commitId, ChangeType type) {
+			super(name, path, size, mode, objectId, commitId);
 			this.changeType = type;
 		}
 

--
Gitblit v1.9.1