From 06883d5f14305d7c69315d589f499e6b50252540 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 19 Jan 2012 15:56:34 +0100 Subject: [PATCH] fix wrong modification list in git getChangeset --- .../scm/repository/GitChangesetConverter.java | 49 ++++++++++++++++++- .../scm/repository/GitChangesetViewer.java | 3 +- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java index 5f042daa09..110890ec79 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java @@ -41,9 +41,13 @@ import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevTree; +import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.EmptyTreeIterator; import org.eclipse.jgit.treewalk.TreeWalk; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ @@ -63,6 +67,14 @@ import java.util.Map; public class GitChangesetConverter implements Closeable { + /** + * the logger for GitChangesetConverter + */ + private static final Logger logger = + LoggerFactory.getLogger(GitChangesetConverter.class); + + //~--- constructors --------------------------------------------------------- + /** * Constructs ... * @@ -72,8 +84,23 @@ public class GitChangesetConverter implements Closeable */ public GitChangesetConverter(org.eclipse.jgit.lib.Repository repository, int idLength) + { + this(repository, null, idLength); + } + + /** + * Constructs ... + * + * + * @param repository + * @param revWalk + * @param idLength + */ + public GitChangesetConverter(org.eclipse.jgit.lib.Repository repository, + RevWalk revWalk, int idLength) { this.idLength = idLength; + this.revWalk = revWalk; createTagMap(repository); treeWalk = new TreeWalk(repository); } @@ -195,7 +222,14 @@ public class GitChangesetConverter implements Closeable if (commit.getParentCount() > 0) { - RevTree tree = commit.getParent(0).getTree(); + RevCommit parent = commit.getParent(0); + RevTree tree = parent.getTree(); + + if ((tree == null) && (revWalk != null)) + { + revWalk.parseHeaders(parent); + tree = parent.getTree(); + } if (tree != null) { @@ -203,11 +237,21 @@ public class GitChangesetConverter implements Closeable } else { + if (logger.isWarnEnabled()) + { + logger.warn("no parent at position 0 for commit {}", commit); + } + treeWalk.addTree(new EmptyTreeIterator()); } } else { + if (logger.isWarnEnabled()) + { + logger.warn("no parent available for commit {}", commit); + } + treeWalk.addTree(new EmptyTreeIterator()); } @@ -258,6 +302,9 @@ public class GitChangesetConverter implements Closeable /** Field description */ private int idLength; + /** Field description */ + private RevWalk revWalk; + /** Field description */ private Map tags; 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 19d62b4850..d2b7504b72 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 @@ -40,6 +40,7 @@ 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.eclipse.jgit.treewalk.TreeWalk; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -115,7 +116,7 @@ public class GitChangesetViewer implements ChangesetViewer if (commit != null) { - converter = new GitChangesetConverter(gr, GitUtil.ID_LENGTH); + converter = new GitChangesetConverter(gr, revWalk, GitUtil.ID_LENGTH); changeset = converter.createChangeset(commit); } else if (logger.isWarnEnabled())