From dfc4ece4083bbbb98f55291d05e7d2b1513464b7 Mon Sep 17 00:00:00 2001
From: Thomas Pummer <dev@nullpointer.at>
Date: Fri, 22 Feb 2013 11:10:11 -0500
Subject: [PATCH] the display-name in web.xml now shows the actual version of Gitblit

---
 src/com/gitblit/utils/JGitUtils.java |   56 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 47 insertions(+), 9 deletions(-)

diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java
index 099036e..1f2ae94 100644
--- a/src/com/gitblit/utils/JGitUtils.java
+++ b/src/com/gitblit/utils/JGitUtils.java
@@ -537,7 +537,7 @@
 	 * @param path
 	 * @return content as a byte []
 	 */
-	public static byte[] getByteContent(Repository repository, RevTree tree, final String path) {
+	public static byte[] getByteContent(Repository repository, RevTree tree, final String path, boolean throwError) {
 		RevWalk rw = new RevWalk(repository);
 		TreeWalk tw = new TreeWalk(repository);
 		tw.setFilter(PathFilterGroup.createFromStrings(Collections.singleton(path)));
@@ -572,7 +572,9 @@
 				}
 			}
 		} catch (Throwable t) {
-			error(t, repository, "{0} can't find {1} in tree {2}", path, tree.name());
+			if (throwError) {
+				error(t, repository, "{0} can't find {1} in tree {2}", path, tree.name());
+			}
 		} finally {
 			rw.dispose();
 			tw.release();
@@ -591,7 +593,7 @@
 	 * @return UTF-8 string content
 	 */
 	public static String getStringContent(Repository repository, RevTree tree, String blobPath, String... charsets) {
-		byte[] content = getByteContent(repository, tree, blobPath);
+		byte[] content = getByteContent(repository, tree, blobPath, true);
 		if (content == null) {
 			return null;
 		}
@@ -741,11 +743,7 @@
 				df.setDetectRenames(true);
 				List<DiffEntry> diffs = df.scan(parent.getTree(), commit.getTree());
 				for (DiffEntry diff : diffs) {
-					String objectId = null;
-					if (FileMode.GITLINK.equals(diff.getNewMode())) {
-						objectId = diff.getNewId().name();
-					}
-
+					String objectId = diff.getNewId().name();
 					if (diff.getChangeType().equals(ChangeType.DELETE)) {
 						list.add(new PathChangeModel(diff.getOldPath(), diff.getOldPath(), 0, diff
 								.getNewMode().getBits(), objectId, commit.getId().getName(), diff
@@ -1584,7 +1582,7 @@
 	 */
 	public static List<SubmoduleModel> getSubmodules(Repository repository, RevTree tree) {
 		List<SubmoduleModel> list = new ArrayList<SubmoduleModel>();
-		byte [] blob = getByteContent(repository, tree, ".gitmodules");
+		byte [] blob = getByteContent(repository, tree, ".gitmodules", false);
 		if (blob == null) {
 			return list;
 		}
@@ -1617,6 +1615,32 @@
 			}
 		}
 		return null;
+	}
+	
+	public static String getSubmoduleCommitId(Repository repository, String path, RevCommit commit) {
+		String commitId = null;
+		RevWalk rw = new RevWalk(repository);
+		TreeWalk tw = new TreeWalk(repository);
+		tw.setFilter(PathFilterGroup.createFromStrings(Collections.singleton(path)));
+		try {
+			tw.reset(commit.getTree());
+			while (tw.next()) {
+				if (tw.isSubtree() && !path.equals(tw.getPathString())) {
+					tw.enterSubtree();
+					continue;
+				}
+				if (FileMode.GITLINK == tw.getFileMode(0)) {
+					commitId = tw.getObjectId(0).getName();
+					break;
+				}
+			}
+		} catch (Throwable t) {
+			error(t, repository, "{0} can't find {1} in commit {2}", path, commit.name());
+		} finally {
+			rw.dispose();
+			tw.release();
+		}
+		return commitId;
 	}
 
 	/**
@@ -1734,4 +1758,18 @@
 		}
 		return success;
 	}
+	
+	/**
+	 * Reads the sparkleshare id, if present, from the repository.
+	 * 
+	 * @param repository
+	 * @return an id or null
+	 */
+	public static String getSparkleshareId(Repository repository) {
+		byte[] content = getByteContent(repository, null, ".sparkleshare", false);
+		if (content == null) {
+			return null;
+		}
+		return StringUtils.decodeString(content);
+	}
 }

--
Gitblit v1.9.1