From a31cf95ac0787eb559cb78f48c52bc6b79e970d8 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 11 Jul 2012 17:10:42 -0400
Subject: [PATCH] Forgot to commit UserModel with cookie field

---
 src/com/gitblit/utils/JGitUtils.java |  136 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 102 insertions(+), 34 deletions(-)

diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java
index 5f193d0..ab5b655 100644
--- a/src/com/gitblit/utils/JGitUtils.java
+++ b/src/com/gitblit/utils/JGitUtils.java
@@ -20,7 +20,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.nio.charset.Charset;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -36,8 +35,6 @@
 import org.eclipse.jgit.api.CloneCommand;
 import org.eclipse.jgit.api.FetchCommand;
 import org.eclipse.jgit.api.Git;
-import org.eclipse.jgit.api.ResetCommand;
-import org.eclipse.jgit.api.ResetCommand.ResetType;
 import org.eclipse.jgit.diff.DiffEntry;
 import org.eclipse.jgit.diff.DiffEntry.ChangeType;
 import org.eclipse.jgit.diff.DiffFormatter;
@@ -253,27 +250,6 @@
 	}
 
 	/**
-	 * Reset HEAD to the latest remote tracking commit.
-	 * 
-	 * @param repository
-	 * @param remoteRef
-	 *            the remote tracking reference (e.g. origin/master)
-	 * @return Ref
-	 * @throws Exception
-	 */
-	public static Ref resetHEAD(Repository repository, String remoteRef) throws Exception {
-		if (!remoteRef.startsWith(Constants.R_REMOTES)) {
-			remoteRef = Constants.R_REMOTES + remoteRef;
-		}
-		Git git = new Git(repository);
-		ResetCommand reset = git.reset();
-		reset.setMode(ResetType.SOFT);
-		reset.setRef(remoteRef);
-		Ref result = reset.call();
-		return result;
-	}
-
-	/**
 	 * Creates a bare repository.
 	 * 
 	 * @param repositoriesFolder
@@ -324,6 +300,7 @@
 	 */
 	private static List<String> getRepositoryList(String basePath, File searchFolder,
 			boolean onlyBare, boolean searchSubfolders) {
+		File baseFile = new File(basePath);
 		List<String> list = new ArrayList<String>();
 		for (File file : searchFolder.listFiles()) {
 			if (file.isDirectory()) {
@@ -332,10 +309,14 @@
 					if (onlyBare && gitDir.getName().equals(".git")) {
 						continue;
 					}
-					// determine repository name relative to base path
-					String repository = StringUtils.getRelativePath(basePath,
-							file.getAbsolutePath());
-					list.add(repository);
+					if (gitDir.equals(file) || gitDir.getParentFile().equals(file)) {
+						// determine repository name relative to base path
+						String repository = FileUtils.getRelativePath(baseFile, file);
+						list.add(repository);
+					} else if (searchSubfolders && file.canRead()) {
+						// look for repositories in subfolders
+						list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders));
+					}
 				} else if (searchSubfolders && file.canRead()) {
 					// look for repositories in subfolders
 					list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders));
@@ -566,14 +547,15 @@
 	 * @param tree
 	 *            if null, the RevTree from HEAD is assumed.
 	 * @param blobPath
+	 * @param charsets optional
 	 * @return UTF-8 string content
 	 */
-	public static String getStringContent(Repository repository, RevTree tree, String blobPath) {
+	public static String getStringContent(Repository repository, RevTree tree, String blobPath, String... charsets) {
 		byte[] content = getByteContent(repository, tree, blobPath);
 		if (content == null) {
 			return null;
 		}
-		return new String(content, Charset.forName(Constants.CHARACTER_ENCODING));
+		return StringUtils.decodeString(content, charsets);
 	}
 
 	/**
@@ -612,14 +594,15 @@
 	 * 
 	 * @param repository
 	 * @param objectId
+	 * @param charsets optional
 	 * @return UTF-8 string content
 	 */
-	public static String getStringContent(Repository repository, String objectId) {
+	public static String getStringContent(Repository repository, String objectId, String... charsets) {
 		byte[] content = getByteContent(repository, objectId);
 		if (content == null) {
 			return null;
 		}
-		return new String(content, Charset.forName(Constants.CHARACTER_ENCODING));
+		return StringUtils.decodeString(content, charsets);
 	}
 
 	/**
@@ -719,6 +702,10 @@
 				for (DiffEntry diff : diffs) {
 					if (diff.getChangeType().equals(ChangeType.DELETE)) {
 						list.add(new PathChangeModel(diff.getOldPath(), diff.getOldPath(), 0, diff
+								.getNewMode().getBits(), commit.getId().getName(), diff
+								.getChangeType()));
+					} else if (diff.getChangeType().equals(ChangeType.RENAME)) {
+						list.add(new PathChangeModel(diff.getOldPath(), diff.getNewPath(), 0, diff
 								.getNewMode().getBits(), commit.getId().getName(), diff
 								.getChangeType()));
 					} else {
@@ -1242,6 +1229,74 @@
 	}
 	
 	/**
+	 * Sets the local branch ref to point to the specified commit id.
+	 *
+	 * @param repository
+	 * @param branch
+	 * @param commitId
+	 * @return true if successful
+	 */
+	public static boolean setBranchRef(Repository repository, String branch, String commitId) {
+		String branchName = branch;
+		if (!branchName.startsWith(Constants.R_HEADS)) {
+			branchName = Constants.R_HEADS + branch;
+		}
+
+		try {
+			RefUpdate refUpdate = repository.updateRef(branchName, false);
+			refUpdate.setNewObjectId(ObjectId.fromString(commitId));
+			RefUpdate.Result result = refUpdate.forceUpdate();
+
+			switch (result) {
+			case NEW:
+			case FORCED:
+			case NO_CHANGE:
+			case FAST_FORWARD:
+				return true;				
+			default:
+				LOGGER.error(MessageFormat.format("{0} {1} update to {2} returned result {3}",
+						repository.getDirectory().getAbsolutePath(), branchName, commitId, result));
+			}
+		} catch (Throwable t) {
+			error(t, repository, "{0} failed to set {1} to {2}", branchName, commitId);
+		}
+		return false;
+	}
+	
+	/**
+	 * Deletes the specified branch ref.
+	 *  
+	 * @param repository
+	 * @param branch
+	 * @return true if successful
+	 */
+	public static boolean deleteBranchRef(Repository repository, String branch) {
+		String branchName = branch;
+		if (!branchName.startsWith(Constants.R_HEADS)) {
+			branchName = Constants.R_HEADS + branch;
+		}
+
+		try {
+			RefUpdate refUpdate = repository.updateRef(branchName, false);
+			refUpdate.setForceUpdate(true);
+			RefUpdate.Result result = refUpdate.delete();
+			switch (result) {
+			case NEW:
+			case FORCED:
+			case NO_CHANGE:
+			case FAST_FORWARD:
+				return true;				
+			default:
+				LOGGER.error(MessageFormat.format("{0} failed to delete to {1} returned result {2}",
+						repository.getDirectory().getAbsolutePath(), branchName, result));
+			}
+		} catch (Throwable t) {
+			error(t, repository, "{0} failed to delete {1}", branchName);
+		}
+		return false;
+	}
+	
+	/**
 	 * Get the full branch and tag ref names for any potential HEAD targets.
 	 *
 	 * @param repository
@@ -1453,10 +1508,23 @@
 		List<RefModel> noteBranches = getNoteBranches(repository, true, -1);
 		for (RefModel notesRef : noteBranches) {
 			RevTree notesTree = JGitUtils.getCommit(repository, notesRef.getName()).getTree();
+			// flat notes list
+			String notePath = commit.getName();
+			String text = getStringContent(repository, notesTree, notePath);
+			if (!StringUtils.isEmpty(text)) {
+				List<RevCommit> history = getRevLog(repository, notesRef.getName(), notePath, 0, -1);
+				RefModel noteRef = new RefModel(notesRef.displayName, null, history.get(history
+						.size() - 1));
+				GitNote gitNote = new GitNote(noteRef, text);
+				list.add(gitNote);
+				continue;
+			}
+			
+			// folder structure
 			StringBuilder sb = new StringBuilder(commit.getName());
 			sb.insert(2, '/');
-			String notePath = sb.toString();
-			String text = getStringContent(repository, notesTree, notePath);
+			notePath = sb.toString();
+			text = getStringContent(repository, notesTree, notePath);
 			if (!StringUtils.isEmpty(text)) {
 				List<RevCommit> history = getRevLog(repository, notesRef.getName(), notePath, 0, -1);
 				RefModel noteRef = new RefModel(notesRef.displayName, null, history.get(history

--
Gitblit v1.9.1