changeset 568:333a1ddcbf94

Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Thu, 07 Mar 2013 13:45:05 +0400
parents 27cd2503cea3
children 57b85306c377
files mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesCommand.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesWithRevsets.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java
diffstat 5 files changed, 41 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java	Wed Mar 06 21:26:28 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java	Thu Mar 07 13:45:05 2013 +0400
@@ -201,12 +201,15 @@
       List<ChangeSet> csets = repo.collectChanges(root)
               .fromRevision(fromCommits)
               .toRevision(toCommit)
+              .includeFromRevision(ctx.includeFromRevisions())
               .call();
-      Iterator<ChangeSet> iter = csets.iterator();
-      while (iter.hasNext()) {
-        ChangeSet cset = iter.next();
-        if (fromVersions.contains(cset.getId()))
-          iter.remove();
+      if (!ctx.includeFromRevisions()) {
+        Iterator<ChangeSet> iter = csets.iterator();
+        while (iter.hasNext()) {
+          ChangeSet cset = iter.next();
+          if (fromVersions.contains(cset.getId()))
+            iter.remove();
+        }
       }
       return csets;
     } catch (UnknownRevisionException e) {
@@ -287,6 +290,8 @@
     if (changes.isEmpty())
       return emptyList();
 
+    ctx.setIncludeFromRevisions(true);
+
     HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root);
     if (!detectSubrepoChanges(hgRoot))
       return emptyList();
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java	Wed Mar 06 21:26:28 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java	Thu Mar 07 13:45:05 2013 +0400
@@ -29,6 +29,7 @@
   private Map<String, Set<SubrepoChangesInterval>> myProcessedSubrepoChanges = new HashMap<String, Set<SubrepoChangesInterval>>();//subrepo url -> processed changes intervals
   private Map<VcsRootKey, Set<String>> myRevisionsPerRoot = new HashMap<VcsRootKey, Set<String>>();
   private Map<File, ServerHgRepo> myRepos = new HashMap<File, ServerHgRepo>();
+  private boolean myIncludeFromRevisions = false;//by default don't include them, they should be included only for subrepos
 
   public OperationContext(@NotNull MercurialVcsSupport vcs,
                           @NotNull RepoFactory repoFactory,
@@ -120,6 +121,16 @@
   }
 
 
+  public boolean includeFromRevisions() {
+    return myIncludeFromRevisions;
+  }
+
+
+  public void setIncludeFromRevisions(boolean doInclude) {
+    myIncludeFromRevisions = doInclude;
+  }
+
+
   /**
    * Collecting changes is per branch, but we should take revisions of other branches
    * into account otherwise plugin can report redundant changes. Consider the following graph:
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesCommand.java	Wed Mar 06 21:26:28 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesCommand.java	Thu Mar 07 13:45:05 2013 +0400
@@ -12,6 +12,7 @@
 
   protected List<String> myFromRevisions;
   protected String myToRevision;
+  protected boolean myIncludeFromRevision;
 
   @NotNull
   public abstract List<ChangeSet> call(@NotNull List<String> fromCommits, @NotNull String toCommit) throws VcsException;
@@ -28,5 +29,8 @@
     return this;
   }
 
-
+  public CollectChangesCommand includeFromRevision(boolean doInclude) {
+    myIncludeFromRevision = doInclude;
+    return this;
+  }
 }
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesWithRevsets.java	Wed Mar 06 21:26:28 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesWithRevsets.java	Thu Mar 07 13:45:05 2013 +0400
@@ -29,7 +29,11 @@
     for (String from : fromCommits) {
       revsets.append(" - ancestors(").append(from).append(")");
     }
-
+    if (myIncludeFromRevision) {
+      for (String from : fromCommits) {
+        revsets.append(" + ").append(from);
+      }
+    }
     return myRepo.log()
             .showCommitsFromAllBranches()
             .withRevsets(revsets.toString())
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java	Wed Mar 06 21:26:28 2013 +0400
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java	Thu Mar 07 13:45:05 2013 +0400
@@ -64,7 +64,15 @@
   public void should_report_changes_from_subrepos(@NotNull HgVersion _) throws Exception {
     VcsRoot root = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).withSubrepoChanges(true).build();
     List<ModificationData> changes = myVcs.getCollectChangesPolicy().collectChanges(root, "d350e7209906", "09c256b6163e", CheckoutRules.DEFAULT);
-    assertEquals(3, changes.size());
+    assertEquals(4, changes.size());
+  }
+
+
+  public void should_include_from_revisions_into_changes_from_subrepos(@NotNull HgVersion _) throws Exception {
+    //otherwise TeamCity won't show changes from subrepos in UI
+    VcsRoot root = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).withSubrepoChanges(true).build();
+    List<ModificationData> changes = myVcs.getCollectChangesPolicy().collectChanges(root, "d350e7209906", "09c256b6163e", CheckoutRules.DEFAULT);
+    assertThat(changes, hasItem(modificationData().withVersion("9e4a2fef1a1c")));
   }
 
 
@@ -85,7 +93,7 @@
   public void should_report_subrepo_changes_recursevly(@NotNull HgVersion _) throws Exception {
     VcsRoot root = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).withSubrepoChanges(true).build();
     List<ModificationData> changes = myVcs.getCollectChangesPolicy().collectChanges(root, "09c256b6163e", "d64d9799c143", CheckoutRules.DEFAULT);
-    assertEquals(5, changes.size());
+    assertEquals(7, changes.size());
 
     assertThat(changes, hasItem(modificationData().withVersion("d64d9799c143").withVcsRootProperties(root.getProperties())));