From 6e6f9fe4d0c42a40ba7981606fb526391be23f6d Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 16 Nov 2011 22:43:37 -0500 Subject: [PATCH] Working draft of the aggregate activity page --- src/com/gitblit/utils/JGitUtils.java | 89 +++++++++++++++++++++++++++++--------------- 1 files changed, 59 insertions(+), 30 deletions(-) diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java index e61fea2..99c2d0a 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/src/com/gitblit/utils/JGitUtils.java @@ -37,8 +37,6 @@ import org.eclipse.jgit.api.CloneCommand; import org.eclipse.jgit.api.FetchCommand; import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.PullCommand; -import org.eclipse.jgit.api.PullResult; import org.eclipse.jgit.api.ResetCommand; import org.eclipse.jgit.api.ResetCommand.ResetType; import org.eclipse.jgit.diff.DiffEntry; @@ -64,6 +62,7 @@ import org.eclipse.jgit.revwalk.RevSort; import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.revwalk.filter.CommitTimeRevFilter; import org.eclipse.jgit.revwalk.filter.RevFilter; import org.eclipse.jgit.storage.file.FileRepository; import org.eclipse.jgit.transport.CredentialsProvider; @@ -142,6 +141,7 @@ * Encapsulates the result of cloning or pulling from a repository. */ public static class CloneResult { + public String name; public FetchResult fetchResult; public boolean createdRepository; } @@ -159,7 +159,7 @@ */ public static CloneResult cloneRepository(File repositoriesFolder, String name, String fromUrl) throws Exception { - return cloneRepository(repositoriesFolder, name, fromUrl, null); + return cloneRepository(repositoriesFolder, name, fromUrl, true, null); } /** @@ -170,16 +170,27 @@ * @param repositoriesFolder * @param name * @param fromUrl + * @param bare * @param credentialsProvider * @return CloneResult * @throws Exception */ public static CloneResult cloneRepository(File repositoriesFolder, String name, String fromUrl, - CredentialsProvider credentialsProvider) throws Exception { + boolean bare, CredentialsProvider credentialsProvider) throws Exception { CloneResult result = new CloneResult(); - if (!name.toLowerCase().endsWith(Constants.DOT_GIT_EXT)) { - name += Constants.DOT_GIT_EXT; + if (bare) { + // bare repository, ensure .git suffix + if (!name.toLowerCase().endsWith(Constants.DOT_GIT_EXT)) { + name += Constants.DOT_GIT_EXT; + } + } else { + // normal repository, strip .git suffix + if (name.toLowerCase().endsWith(Constants.DOT_GIT_EXT)) { + name = name.substring(0, name.indexOf(Constants.DOT_GIT_EXT)); + } } + result.name = name; + File folder = new File(repositoriesFolder, name); if (folder.exists()) { File gitDir = FileKey.resolve(new File(repositoriesFolder, name), FS.DETECTED); @@ -188,7 +199,7 @@ repository.close(); } else { CloneCommand clone = new CloneCommand(); - clone.setBare(true); + clone.setBare(bare); clone.setCloneAllBranches(true); clone.setURI(fromUrl); clone.setDirectory(folder); @@ -289,7 +300,7 @@ } list.addAll(getRepositoryList(repositoriesFolder.getAbsolutePath(), repositoriesFolder, exportAll, searchSubfolders)); - Collections.sort(list); + StringUtils.sortRepositorynames(list); return list; } @@ -814,6 +825,45 @@ } /** + * Returns a list of commits since the minimum date starting from the + * specified object id. + * + * @param repository + * @param objectId + * if unspecified, HEAD is assumed. + * @param minimumDate + * @return list of commits + */ + public static List<RevCommit> getRevLog(Repository repository, String objectId, Date minimumDate) { + List<RevCommit> list = new ArrayList<RevCommit>(); + if (!hasCommits(repository)) { + return list; + } + try { + // resolve branch + ObjectId branchObject; + if (StringUtils.isEmpty(objectId)) { + branchObject = getDefaultBranch(repository); + } else { + branchObject = repository.resolve(objectId); + } + + RevWalk rw = new RevWalk(repository); + rw.markStart(rw.parseCommit(branchObject)); + rw.setRevFilter(CommitTimeRevFilter.after(minimumDate)); + Iterable<RevCommit> revlog = rw; + for (RevCommit rev : revlog) { + list.add(rev); + } + rw.dispose(); + } catch (Throwable t) { + error(t, repository, "{0} failed to get {1} revlog for minimum date {2}", objectId, + minimumDate); + } + return list; + } + + /** * Returns a list of commits starting from HEAD and working backwards. * * @param repository @@ -915,27 +965,6 @@ } /** - * Enumeration of the search types. - */ - public static enum SearchType { - AUTHOR, COMMITTER, COMMIT; - - public static SearchType forName(String name) { - for (SearchType type : values()) { - if (type.name().equalsIgnoreCase(name)) { - return type; - } - } - return COMMIT; - } - - @Override - public String toString() { - return name().toLowerCase(); - } - } - - /** * Search the commit history for a case-insensitive match to the value. * Search results require a specified SearchType of AUTHOR, COMMITTER, or * COMMIT. Results may be paginated using offset and maxCount. If the @@ -953,7 +982,7 @@ * @return matching list of commits */ public static List<RevCommit> searchRevlogs(Repository repository, String objectId, - String value, final SearchType type, int offset, int maxCount) { + String value, final com.gitblit.Constants.SearchType type, int offset, int maxCount) { final String lcValue = value.toLowerCase(); List<RevCommit> list = new ArrayList<RevCommit>(); if (maxCount == 0) { -- Gitblit v1.9.1