view mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCommitsInfoBuilderSupport.java @ 719:59a3b5ef91a9

drop legacy
author eugene.petrenko@jetbrains.com
date Mon, 13 Jan 2014 19:42:22 +0100
parents e6d203e5c6e3
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);
    }
  }
}