diff mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java @ 594:9cbf9205208e

Do not report subrepo config changes
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Fri, 26 Apr 2013 14:35:50 +0400
parents ad112e314be5
children f2a2bf159f4c
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java	Thu Apr 25 20:54:42 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java	Fri Apr 26 14:35:50 2013 +0400
@@ -12,7 +12,6 @@
 import java.util.*;
 
 import static java.util.Arrays.asList;
-import static java.util.Collections.EMPTY_LIST;
 import static java.util.Collections.emptyList;
 import static java.util.Collections.emptyMap;
 
@@ -300,7 +299,7 @@
     if (!detectSubrepoChanges(hgRoot))
       return emptyList();
 
-    List<SubrepoConfigChange> subrepoConfigChanges = getSubrepoConfigChanges(changes);
+    List<SubrepoConfigChange> subrepoConfigChanges = getSubrepoConfigChanges(ctx, changes);
     List<ModificationData> subrepoChanges = new ArrayList<ModificationData>();
 
     for (SubrepoConfigChange configChange : subrepoConfigChanges) {
@@ -328,23 +327,44 @@
   }
 
 
-  private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull List<ModificationData> mainRootChanges) {
+  private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull List<ModificationData> mainRootChanges) throws VcsException {
     List<SubrepoConfigChange> subrepoConfigChanges = new ArrayList<SubrepoConfigChange>();
     for (ModificationData m : mainRootChanges) {
-      subrepoConfigChanges.addAll(getSubrepoConfigChanges(m));
+      subrepoConfigChanges.addAll(getSubrepoConfigChanges(ctx, m));
     }
     return subrepoConfigChanges;
   }
 
 
-  private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull ModificationData m) {
+  @NotNull
+  private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull ModificationData m) throws VcsException {
     List<SubrepoConfigChange> configChanges = new ArrayList<SubrepoConfigChange>();
-    for (SubrepoConfigChange configChange : SubrepoConfigChangesAttributes.readSubrepoConfigChanges(m.getAttributes())) {
-      if (configChange.getSubrepoRootParams().isEmpty())
-        continue;
-      if (configChange.getPreviousSubrepoRevisions().isEmpty())
-        continue;
-      configChanges.add(configChange);
+
+    HgVcsRoot mainRoot = myHgVcsRootFactory.createHgRoot(m.getVcsRoot());
+    ServerHgRepo repo = myVcs.createRepo(ctx, mainRoot);
+    try {
+      for (HgSubrepoConfigChange c : repo.getSubrepoConfigChanges(m.getVersion(), m.getParentRevisions())) {
+        if (!(c.subrepoUrlChanged() || c.subrepoAdded() || c.subrepoRemoved())) {
+          SubRepo currentSubrepo = c.getCurrent();
+          assert currentSubrepo != null;
+          String subrepoUrl = ctx.getStringFromPool(currentSubrepo.resolveUrl(mainRoot.getRepository()));
+          String curRevision = ctx.getStringFromPool(currentSubrepo.revision());
+          List<String> prevRevisions = new ArrayList<String>(0);
+          for (SubRepo prevSubrepo : c.getPrevious()) {
+            prevRevisions.add(ctx.getStringFromPool(prevSubrepo.revision()));
+          }
+          String path = ctx.getStringFromPool(mainRoot.expandSubrepoPath(c.getPath()));
+          configChanges.add(new SubrepoConfigChange(mainRoot)
+                  .setSubrepoPath(ctx.getStringFromPool(path))
+                  .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, subrepoUrl)
+                  .setSubrepoRootParamDiff("teamcity.internal.subrepo", "true")
+                  .setSubrepoRootParamDiff("teamcity.internal.subrepo.path", path)
+                  .setCurrentSubrepoRevision(curRevision)
+                  .setPreviousSubrepoRevisions(prevRevisions));
+        }
+      }
+    } catch (URISyntaxException e) {
+      throw new VcsException(e);
     }
     return configChanges;
   }
@@ -357,20 +377,14 @@
     if (detectSubrepoChanges(root)) {
       try {
         ServerHgRepo repo = myVcs.createRepo(ctx, root);
-        SubrepoConfigChangesAttributes builder = new SubrepoConfigChangesAttributes();
-        for (HgSubrepoConfigChange c : repo.getSubrepoConfigChanges(cset)) {
-          fillSubrepoConfigChanges(ctx, builder, root, c);
-        }
-        attributes.putAll(builder.buildAttributes());
-
         SubrepoRevisionAttributesBuilder attrBuilder = new SubrepoRevisionAttributesBuilder();
-        for (HgSubrepoConfigChange c : repo.getSubrepoConfigChanges(cset)) {
-          if (!c.subrepoRemoved()) {
-            attrBuilder.addSubrepo(new SubrepoConfig(root)
-                    .setSubrepoPath(root.expandSubrepoPath(c.getPath()))
-                    .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, ctx.getStringFromPool(c.getCurrent().resolveUrl(root.getRepository())))
-                    .setSubrepoRevision(c.getCurrent().revision()));
-          }
+        for (SubRepo s : repo.getSubrepositories(cset).values()) {
+          attrBuilder.addSubrepo(new SubrepoConfig(root)
+                  .setSubrepoPath(ctx.getStringFromPool(root.expandSubrepoPath(s.path())))
+                  .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, ctx.getStringFromPool(s.resolveUrl(root.getRepository())))
+                  .setSubrepoRootParamDiff("teamcity.internal.subrepo", "true")
+                  .setSubrepoRootParamDiff("teamcity.internal.subrepo.path", ctx.getStringFromPool(root.expandSubrepoPath(s.path())))
+                  .setSubrepoRevision(ctx.getStringFromPool(s.revision())));
         }
         attributes.putAll(attrBuilder.buildAttributes());
       } catch (Exception e) {
@@ -384,24 +398,4 @@
       return emptyMap();
     return attributes;
   }
-
-
-  private void fillSubrepoConfigChanges(@NotNull OperationContext ctx,
-                                        @NotNull SubrepoConfigChangesAttributes builder,
-                                        @NotNull HgVcsRoot mainRoot,
-                                        @NotNull HgSubrepoConfigChange c) throws URISyntaxException, VcsException {
-    List<String> prevRevisions = new ArrayList<String>();
-    if (!(c.subrepoUrlChanged() || c.subrepoAdded() || c.subrepoRemoved())) {
-      String subrepoUrl = c.getCurrent().resolveUrl(mainRoot.getRepository());
-      String curRevision = c.getCurrent().revision();
-      for (SubRepo prevSubrepo : c.getPrevious()) {
-        prevRevisions.add(ctx.getStringFromPool(prevSubrepo.revision()));
-      }
-      builder.addSubrepoConfigChange(new SubrepoConfigChange(mainRoot)
-              .setSubrepoPath(ctx.getStringFromPool(mainRoot.expandSubrepoPath(c.getPath())))
-              .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, ctx.getStringFromPool(subrepoUrl))
-              .setCurrentSubrepoRevision(ctx.getStringFromPool(curRevision))
-              .setPreviousSubrepoRevisions(prevRevisions));
-    }
-  }
 }