From abd3cc2d610981493b5e9333108d271ae37f7726 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Sat, 12 Jan 2013 19:51:42 -0500
Subject: [PATCH] Refresh authenticated user model for each page request (issue-186)

---
 src/com/gitblit/utils/JGitUtils.java |   99 +++++++++++++++----------------------------------
 1 files changed, 30 insertions(+), 69 deletions(-)

diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java
index bc44f00..e112770 100644
--- a/src/com/gitblit/utils/JGitUtils.java
+++ b/src/com/gitblit/utils/JGitUtils.java
@@ -19,7 +19,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -30,8 +29,6 @@
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.regex.Pattern;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
 
 import org.eclipse.jgit.api.CloneCommand;
 import org.eclipse.jgit.api.FetchCommand;
@@ -540,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)));
@@ -575,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();
@@ -594,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;
 		}
@@ -1460,6 +1459,20 @@
 			int maxCount) {
 		return getRefs(repository, Constants.R_NOTES, fullName, maxCount);
 	}
+	
+	/**
+	 * Returns the list of refs in the specified base ref. If repository does 
+	 * not exist or is empty, an empty list is returned.
+	 * 
+	 * @param repository
+	 * @param fullName
+	 *            if true, /refs/yadayadayada is returned. If false,
+	 *            yadayadayada is returned.
+	 * @return list of refs
+	 */
+	public static List<RefModel> getRefs(Repository repository, String baseRef) {
+		return getRefs(repository, baseRef, true, -1);
+	}
 
 	/**
 	 * Returns a list of references in the repository matching "refs". If the
@@ -1531,7 +1544,7 @@
 		try {
 			// search for the branch in local heads
 			for (RefModel ref : JGitUtils.getLocalBranches(repository, false, -1)) {
-				if (ref.displayName.endsWith(name)) {
+				if (ref.reference.getName().endsWith(name)) {
 					branch = ref;
 					break;
 				}
@@ -1540,7 +1553,7 @@
 			// search for the branch in remote heads
 			if (branch == null) {
 				for (RefModel ref : JGitUtils.getRemoteBranches(repository, false, -1)) {
-					if (ref.displayName.endsWith(name)) {
+					if (ref.reference.getName().endsWith(name)) {
 						branch = ref;
 						break;
 					}
@@ -1573,7 +1586,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;
 		}
@@ -1723,70 +1736,18 @@
 		}
 		return success;
 	}
-
+	
 	/**
-	 * Zips the contents of the tree at the (optionally) specified revision and
-	 * the (optionally) specified basepath to the supplied outputstream.
+	 * Reads the sparkleshare id, if present, from the repository.
 	 * 
 	 * @param repository
-	 * @param basePath
-	 *            if unspecified, entire repository is assumed.
-	 * @param objectId
-	 *            if unspecified, HEAD is assumed.
-	 * @param os
-	 * @return true if repository was successfully zipped to supplied output
-	 *         stream
+	 * @return an id or null
 	 */
-	public static boolean zip(Repository repository, String basePath, String objectId,
-			OutputStream os) {
-		RevCommit commit = getCommit(repository, objectId);
-		if (commit == null) {
-			return false;
+	public static String getSparkleshareId(Repository repository) {
+		byte[] content = getByteContent(repository, null, ".sparkleshare", false);
+		if (content == null) {
+			return null;
 		}
-		boolean success = false;
-		RevWalk rw = new RevWalk(repository);
-		TreeWalk tw = new TreeWalk(repository);
-		try {
-			tw.addTree(commit.getTree());
-			ZipOutputStream zos = new ZipOutputStream(os);
-			zos.setComment("Generated by Gitblit");
-			if (!StringUtils.isEmpty(basePath)) {
-				PathFilter f = PathFilter.create(basePath);
-				tw.setFilter(f);
-			}
-			tw.setRecursive(true);
-			while (tw.next()) {
-				if (tw.getFileMode(0) == FileMode.GITLINK) {
-					continue;
-				}
-				ZipEntry entry = new ZipEntry(tw.getPathString());
-				entry.setSize(tw.getObjectReader().getObjectSize(tw.getObjectId(0),
-						Constants.OBJ_BLOB));
-				entry.setComment(commit.getName());
-				zos.putNextEntry(entry);
-
-				ObjectId entid = tw.getObjectId(0);
-				FileMode entmode = tw.getFileMode(0);
-				RevBlob blob = (RevBlob) rw.lookupAny(entid, entmode.getObjectType());
-				rw.parseBody(blob);
-
-				ObjectLoader ldr = repository.open(blob.getId(), Constants.OBJ_BLOB);
-				byte[] tmp = new byte[4096];
-				InputStream in = ldr.openStream();
-				int n;
-				while ((n = in.read(tmp)) > 0) {
-					zos.write(tmp, 0, n);
-				}
-				in.close();
-			}
-			zos.finish();
-			success = true;
-		} catch (IOException e) {
-			error(e, repository, "{0} failed to zip files from commit {1}", commit.getName());
-		} finally {
-			tw.release();
-			rw.dispose();
-		}
-		return success;
+		return StringUtils.decodeString(content);
 	}
 }

--
Gitblit v1.9.1