Mercurial > hg > mercurial
view mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCommitsInfoBuilderSupport.java @ 690:e6d203e5c6e3
fix commit message and author for commits with no parents
author | eugene.petrenko@gmail.com |
---|---|
date | Wed, 18 Dec 2013 13:45:08 +0100 |
parents | 7fb8ecf0d35a |
children | 785ab04c78da |
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.ChangeSet; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.ChangeSetRevision; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot; import jetbrains.buildServer.util.MultiMap; import jetbrains.buildServer.vcs.*; import org.jetbrains.annotations.NotNull; import java.util.Map; import static jetbrains.buildServer.buildTriggers.vcs.mercurial.command.LogCommand.ZERO_PARENT_ID; import static jetbrains.buildServer.buildTriggers.vcs.mercurial.command.LogCommand.ZERO_PARENT_SHORT_ID; /** * Created 30.09.13 13:05 * * @author Eugene Petrenko (eugene.petrenko@jetbrains.com) */ public class MercurialCommitsInfoBuilderSupport implements CommitsInfoBuilder, MercurialServerExtension { private final MercurialVcsSupport mySupport; private final HgVcsRootFactory myHgVcsRootFactory; public MercurialCommitsInfoBuilderSupport(@NotNull MercurialVcsSupport vcs, @NotNull HgVcsRootFactory vcsRootFactory) { vcs.addExtension(this); mySupport = vcs; myHgVcsRootFactory = vcsRootFactory; } public void collectCommits(@NotNull final VcsRoot root, @NotNull final CheckoutRules rules, @NotNull final CommitsConsumer consumer) throws VcsException { final HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); final ServerHgRepo repo = mySupport.createRepo(hgRoot); mySupport.syncRepository(hgRoot); MultiMap<String, String> commitToTag = new MultiMap<String, String>(); for (Map.Entry<String, String> e : repo.tags().call().entrySet()) { commitToTag.putValue(e.getValue(), e.getKey()); } //TODO: make stream parsing of commits instead of parsing of collected string output for (ChangeSet set : repo.logNoFiles().showCommitsFromAllBranches().call()) { final CommitDataBean change = new CommitDataBean(set.getId(), set.getFullVersion(), set.getTimestamp()); for (ChangeSetRevision p : set.getParents()) { final String commitId = p.getId(); if (ZERO_PARENT_ID.equals(commitId)) continue; if (ZERO_PARENT_SHORT_ID.equals(commitId)) continue; change.addParentRevision(commitId); } change.setCommitMessage(set.getDescription()); change.setCommitAuthor(set.getUser()); change.addBranch(set.getBranch()); for (String tag : commitToTag.get(set.getId())) { change.addTag(tag); } consumer.consumeCommit(change); } } }