changeset 595:f2a2bf159f4c

Eliminate SubrepoConfigChange usages
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Mon, 29 Apr 2013 13:44:45 +0400
parents 9cbf9205208e
children a37960e1f0a0
files mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java
diffstat 1 files changed, 37 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java	Fri Apr 26 14:35:50 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java	Mon Apr 29 13:44:45 2013 +0400
@@ -299,21 +299,37 @@
     if (!detectSubrepoChanges(hgRoot))
       return emptyList();
 
-    List<SubrepoConfigChange> subrepoConfigChanges = getSubrepoConfigChanges(ctx, changes);
+    List<HgSubrepoConfigChange> subrepoConfigChanges = getSubrepoConfigChanges(ctx, changes);
     List<ModificationData> subrepoChanges = new ArrayList<ModificationData>();
 
-    for (SubrepoConfigChange configChange : subrepoConfigChanges) {
-      VcsRootImpl subrepo = new VcsRootImpl(root.getId(), configChange.getSubrepoRootParams());
-      if (ctx.isProcessedSubrepoChanges(subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision()))
+    for (HgSubrepoConfigChange configChange : subrepoConfigChanges) {
+      SubRepo current = configChange.getCurrent();
+      assert current != null;
+
+      String subrepoUrl = current.url();
+      String curRevision = current.revision();
+      List<String> prevRevisions = new ArrayList<String>(0);
+      for (SubRepo prevSubrepo : configChange.getPrevious()) {
+        prevRevisions.add(prevSubrepo.revision());
+      }
+      String path = configChange.getPath();
+
+      Map<String, String> subrepoParams = new HashMap<String, String>(hgRoot.getProperties());
+      subrepoParams.put(Constants.REPOSITORY_PROP, subrepoUrl);
+      subrepoParams.put("teamcity.internal.subrepo", "true");
+      subrepoParams.put("teamcity.internal.subrepo.path", path);
+
+      VcsRootImpl subrepo = new VcsRootImpl(root.getId(), subrepoParams);
+      if (ctx.isProcessedSubrepoChanges(subrepo, prevRevisions, curRevision))
         continue;
-      List<ModificationData> subChanges = collectChanges(ctx, subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision(), CheckoutRules.DEFAULT);
+      List<ModificationData> subChanges = collectChanges(ctx, subrepo, prevRevisions, curRevision, CheckoutRules.DEFAULT);
       for (ModificationData m : subChanges) {
         if (!ctx.isReportedModification(m)) {
           subrepoChanges.add(m);
           ctx.markAsReported(m);
         }
       }
-      ctx.markProcessedSubrepoChanges(subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision());
+      ctx.markProcessedSubrepoChanges(subrepo, prevRevisions, curRevision);
     }
 
     List<ModificationData> subSubrepoChanges = getSubrepoChanges(ctx, root, subrepoChanges);
@@ -327,8 +343,8 @@
   }
 
 
-  private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull List<ModificationData> mainRootChanges) throws VcsException {
-    List<SubrepoConfigChange> subrepoConfigChanges = new ArrayList<SubrepoConfigChange>();
+  private List<HgSubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull List<ModificationData> mainRootChanges) throws VcsException {
+    List<HgSubrepoConfigChange> subrepoConfigChanges = new ArrayList<HgSubrepoConfigChange>();
     for (ModificationData m : mainRootChanges) {
       subrepoConfigChanges.addAll(getSubrepoConfigChanges(ctx, m));
     }
@@ -337,34 +353,29 @@
 
 
   @NotNull
-  private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull ModificationData m) throws VcsException {
-    List<SubrepoConfigChange> configChanges = new ArrayList<SubrepoConfigChange>();
+  private List<HgSubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull ModificationData m) throws VcsException {
+    List<HgSubrepoConfigChange> configChanges = new ArrayList<HgSubrepoConfigChange>();
 
     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())) {
+    for (HgSubrepoConfigChange c : repo.getSubrepoConfigChanges(m.getVersion(), m.getParentRevisions())) {
+      if (!(c.subrepoUrlChanged() || c.subrepoAdded() || c.subrepoRemoved())) {//report only changes in revisions, because we collect changes only for such changes
+        //map url and path, relative to the main repository
+        try {
           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()));
-          }
+          List<SubRepo> prevSubrepos = new ArrayList<SubRepo>(0);
           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));
+          for (SubRepo prevSubrepo : c.getPrevious()) {
+            prevSubrepos.add(new SubRepo(path, subrepoUrl, ctx.getStringFromPool(prevSubrepo.revision())));
+          }
+          configChanges.add(new HgSubrepoConfigChange(path, prevSubrepos, new SubRepo(path, subrepoUrl, curRevision)));
+        } catch (URISyntaxException e) {
+          throw new VcsException(e);
         }
       }
-    } catch (URISyntaxException e) {
-      throw new VcsException(e);
     }
     return configChanges;
   }