changeset 684:7fb8ecf0d35a

update CommitsInfoBuilder service API
author eugene.petrenko@gmail.com
date Tue, 10 Dec 2013 18:41:39 +0100
parents 54d319ca0237
children 5a0fc80839a8
files mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCommitsInfoBuilderSupport.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/CommitsInfoBuilderSupportTest.java
diffstat 2 files changed, 35 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCommitsInfoBuilderSupport.java	Thu Nov 21 11:30:48 2013 +0100
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCommitsInfoBuilderSupport.java	Tue Dec 10 18:41:39 2013 +0100
@@ -3,12 +3,10 @@
 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.ArrayList;
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.command.LogCommand.ZERO_PARENT_ID;
@@ -30,49 +28,39 @@
     myHgVcsRootFactory = vcsRootFactory;
   }
 
+  public void collectCommits(@NotNull final VcsRoot root,
+                             @NotNull final CheckoutRules rules,
+                             @NotNull final CommitsConsumer consumer) throws VcsException {
 
-  @NotNull
-  public List<CommitDataBean> collectCommits(@NotNull VcsRoot root,
-                                             @NotNull CheckoutRules rules) throws VcsException {
     final HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root);
     final ServerHgRepo repo = mySupport.createRepo(hgRoot);
     mySupport.syncRepository(hgRoot);
 
-    final Map<String, CommitDataBean> commitToBean = processChanges(repo);
-
-    //collect tags info
-    Map<String, String> tags = repo.tags().call();
-    for (Map.Entry<String, String> e : tags.entrySet()) {
-      CommitDataBean bean = commitToBean.get(e.getValue());
-      if (bean != null) bean.addTag(e.getKey());
+    MultiMap<String, String> commitToTag = new MultiMap<String, String>();
+    for (Map.Entry<String, String> e : repo.tags().call().entrySet()) {
+      commitToTag.putValue(e.getValue(), e.getKey());
     }
 
-    return new ArrayList<CommitDataBean>(commitToBean.values());
-  }
-
-  @NotNull
-  private Map<String, CommitDataBean> processChanges(@NotNull ServerHgRepo repo) throws VcsException {
-    final List<ChangeSet> tip = repo.logNoFiles()
-            .showCommitsFromAllBranches()
-            .call();
-
-    final Map<String, CommitDataBean> result = new HashMap<String, CommitDataBean>();
-    for (ChangeSet set : tip) {
-      final CommitDataBean bean = new CommitDataBean(set.getId(), set.getFullVersion(), set.getTimestamp());
+    //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;
-        bean.addParentRevision(commitId);
+        change.addParentRevision(commitId);
 
-        bean.setCommitMessage(set.getDescription());
-        bean.setCommitAuthor(set.getUser());
+        change.setCommitMessage(set.getDescription());
+        change.setCommitAuthor(set.getUser());
       }
-      bean.addBranch(set.getBranch());
-      result.put(bean.getVersion(), bean);
+      change.addBranch(set.getBranch());
+
+      for (String tag : commitToTag.get(set.getId())) {
+        change.addTag(tag);
+      }
+
+      consumer.consumeCommit(change);
     }
-
-    return result;
   }
 }
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/CommitsInfoBuilderSupportTest.java	Thu Nov 21 11:30:48 2013 +0100
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/CommitsInfoBuilderSupportTest.java	Tue Dec 10 18:41:39 2013 +0100
@@ -1,21 +1,16 @@
 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
 
 import jetbrains.buildServer.TestLogger;
-import jetbrains.buildServer.vcs.CheckoutRules;
-import jetbrains.buildServer.vcs.CommitDataBean;
-import jetbrains.buildServer.vcs.VcsException;
-import jetbrains.buildServer.vcs.VcsRoot;
+import jetbrains.buildServer.vcs.*;
 import jetbrains.vcs.api.CommitInfo;
+import org.jetbrains.annotations.NotNull;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.*;
 
 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialSupportBuilder.mercurialSupport;
 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.Util.copyRepository;
@@ -53,7 +48,12 @@
     VcsRoot root = vcsRoot().withUrl(myRemoteRepo).build();
 
 
-    final List<CommitDataBean> commitInfos = mySupport.collectCommits(root, CheckoutRules.DEFAULT);
+    final List<CommitInfo> commitInfos = new ArrayList<CommitInfo>();
+    mySupport.collectCommits(root, CheckoutRules.DEFAULT, new CommitsInfoBuilder.CommitsConsumer() {
+      public void consumeCommit(@NotNull CommitInfo commit) {
+        commitInfos.add(commit);
+      }
+    });
     Assert.assertFalse(commitInfos.isEmpty());
 
     for (CommitInfo commitInfo : commitInfos) {
@@ -89,7 +89,12 @@
 
     VcsRoot root = vcsRoot().withUrl(myRemoteRepo).build();
 
-    final List<CommitDataBean> commitInfos = mySupport.collectCommits(root, CheckoutRules.DEFAULT);
+    final List<CommitInfo> commitInfos = new ArrayList<CommitInfo>();
+    mySupport.collectCommits(root, CheckoutRules.DEFAULT, new CommitsInfoBuilder.CommitsConsumer() {
+      public void consumeCommit(@NotNull CommitInfo commit) {
+        commitInfos.add(commit);
+      }
+    });
     Assert.assertFalse(commitInfos.isEmpty());
 
     for (CommitInfo commitInfo : commitInfos) {