From 758505694731b3cbf77a0e8a029b0cdc0d37d384 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 18 Jan 2012 19:31:00 +0100 Subject: [PATCH] implement getChangeset for git --- .../scm/repository/GitChangesetViewer.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java index 3aaf2b5439..19d62b4850 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java @@ -39,6 +39,7 @@ import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.NoHeadException; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevWalk; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -92,7 +93,48 @@ public class GitChangesetViewer implements ChangesetViewer @Override public Changeset getChangeset(String revision) { - throw new UnsupportedOperationException("Not supported yet."); + if (logger.isDebugEnabled()) + { + logger.debug("fetch changeset {}", revision); + } + + Changeset changeset = null; + File directory = handler.getDirectory(repository); + org.eclipse.jgit.lib.Repository gr = null; + GitChangesetConverter converter = null; + + try + { + gr = GitUtil.open(directory); + + if (!gr.getAllRefs().isEmpty()) + { + RevWalk revWalk = new RevWalk(gr); + ObjectId id = GitUtil.getRevisionId(gr, revision); + RevCommit commit = revWalk.parseCommit(id); + + if (commit != null) + { + converter = new GitChangesetConverter(gr, GitUtil.ID_LENGTH); + changeset = converter.createChangeset(commit); + } + else if (logger.isWarnEnabled()) + { + logger.warn("could not find revision {}", revision); + } + } + } + catch (IOException ex) + { + logger.error("could not open repository", ex); + } + finally + { + IOUtil.close(converter); + GitUtil.close(gr); + } + + return changeset; } /**