From 9b72a2e674f7cbc320b0b72fc71ad813d296ab12 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 22 Sep 2011 12:04:43 -0400
Subject: [PATCH] Updated to JGit 1.1.0 and reverse-sort library dependencies.
---
src/com/gitblit/utils/JGitUtils.java | 48 +++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 41 insertions(+), 7 deletions(-)
diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java
index e62795b..b6b13ab 100644
--- a/src/com/gitblit/utils/JGitUtils.java
+++ b/src/com/gitblit/utils/JGitUtils.java
@@ -62,6 +62,7 @@
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.revwalk.filter.RevFilter;
import org.eclipse.jgit.storage.file.FileRepository;
+import org.eclipse.jgit.transport.CredentialsProvider;
import org.eclipse.jgit.transport.FetchResult;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.treewalk.TreeWalk;
@@ -134,6 +135,14 @@
}
/**
+ * Encapsulates the result of cloning or pulling from a repository.
+ */
+ public static class CloneResult {
+ public FetchResult fetchResult;
+ public boolean createdRepository;
+ }
+
+ /**
* Clone or Fetch a repository. If the local repository does not exist,
* clone is called. If the repository does exist, fetch is called. By
* default the clone/fetch retrieves the remote heads, tags, and notes.
@@ -141,12 +150,29 @@
* @param repositoriesFolder
* @param name
* @param fromUrl
- * @return FetchResult
+ * @return CloneResult
* @throws Exception
*/
- public static FetchResult cloneRepository(File repositoriesFolder, String name, String fromUrl)
+ public static CloneResult cloneRepository(File repositoriesFolder, String name, String fromUrl)
throws Exception {
- FetchResult result = null;
+ return cloneRepository(repositoriesFolder, name, fromUrl, null);
+ }
+
+ /**
+ * Clone or Fetch a repository. If the local repository does not exist,
+ * clone is called. If the repository does exist, fetch is called. By
+ * default the clone/fetch retrieves the remote heads, tags, and notes.
+ *
+ * @param repositoriesFolder
+ * @param name
+ * @param fromUrl
+ * @param credentialsProvider
+ * @return CloneResult
+ * @throws Exception
+ */
+ public static CloneResult cloneRepository(File repositoriesFolder, String name, String fromUrl,
+ CredentialsProvider credentialsProvider) throws Exception {
+ CloneResult result = new CloneResult();
if (!name.toLowerCase().endsWith(Constants.DOT_GIT_EXT)) {
name += Constants.DOT_GIT_EXT;
}
@@ -154,7 +180,7 @@
if (folder.exists()) {
File gitDir = FileKey.resolve(new File(repositoriesFolder, name), FS.DETECTED);
FileRepository repository = new FileRepository(gitDir);
- result = fetchRepository(repository);
+ result.fetchResult = fetchRepository(credentialsProvider, repository);
repository.close();
} else {
CloneCommand clone = new CloneCommand();
@@ -162,12 +188,16 @@
clone.setCloneAllBranches(true);
clone.setURI(fromUrl);
clone.setDirectory(folder);
+ if (credentialsProvider != null) {
+ clone.setCredentialsProvider(credentialsProvider);
+ }
clone.call();
// Now we have to fetch because CloneCommand doesn't fetch
// refs/notes nor does it allow manual RefSpec.
File gitDir = FileKey.resolve(new File(repositoriesFolder, name), FS.DETECTED);
FileRepository repository = new FileRepository(gitDir);
- result = fetchRepository(repository);
+ result.createdRepository = true;
+ result.fetchResult = fetchRepository(credentialsProvider, repository);
repository.close();
}
return result;
@@ -177,13 +207,14 @@
* Fetch updates from the remote repository. If refSpecs is unspecifed,
* remote heads, tags, and notes are retrieved.
*
+ * @param credentialsProvider
* @param repository
* @param refSpecs
* @return FetchResult
* @throws Exception
*/
- public static FetchResult fetchRepository(Repository repository, RefSpec... refSpecs)
- throws Exception {
+ public static FetchResult fetchRepository(CredentialsProvider credentialsProvider,
+ Repository repository, RefSpec... refSpecs) throws Exception {
Git git = new Git(repository);
FetchCommand fetch = git.fetch();
List<RefSpec> specs = new ArrayList<RefSpec>();
@@ -194,6 +225,9 @@
} else {
specs.addAll(Arrays.asList(refSpecs));
}
+ if (credentialsProvider != null) {
+ fetch.setCredentialsProvider(credentialsProvider);
+ }
fetch.setRefSpecs(specs);
FetchResult result = fetch.call();
return result;
--
Gitblit v1.9.1