# HG changeset patch # User Dmitry Neverov # Date 1361795600 -14400 # Node ID 2fbe8c7fa71012e8c18e0159d093033c5a86b14e # Parent 80a45e45918cca1f5ef47193069792aebc29226a Don't collect same subrepo changes twice diff -r 80a45e45918c -r 2fbe8c7fa710 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java --- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Mon Feb 25 12:22:27 2013 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Mon Feb 25 16:33:20 2013 +0400 @@ -663,7 +663,10 @@ if (configChange.getPreviousSubrepoRevisions().isEmpty()) continue; VcsRootImpl subrepo = new VcsRootImpl(m.getVcsRootObject().getId(), configChange.getSubrepoRootParams()); + if (ctx.isProcessedSubrepoChanges(subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision())) + continue; subrepoChanges.addAll(collectChanges(ctx, subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision(), CheckoutRules.DEFAULT)); + ctx.markProcessedSubrepoChanges(subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision()); } return subrepoChanges; } diff -r 80a45e45918c -r 2fbe8c7fa710 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java --- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java Mon Feb 25 12:22:27 2013 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java Mon Feb 25 16:33:20 2013 +0400 @@ -1,20 +1,20 @@ package jetbrains.buildServer.buildTriggers.vcs.mercurial; +import com.intellij.openapi.util.Pair; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot; import jetbrains.buildServer.vcs.VcsException; +import jetbrains.buildServer.vcs.VcsRoot; import org.jetbrains.annotations.NotNull; import java.io.File; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; public class OperationContext { private final MercurialVcsSupport myVcs; private Set mySyncedDirs = new HashSet(); private Map myHgVersions = new HashMap(); + private Map> myProcessedSubrepoChanges = new HashMap>(); public OperationContext(@NotNull MercurialVcsSupport vcs) { myVcs = vcs; @@ -39,4 +39,28 @@ myHgVersions.put(hgPath, version); return version; } + + public void markProcessedSubrepoChanges(@NotNull VcsRoot subrepo, @NotNull List previousSubrepoRevisions, @NotNull String currentSubrepoRevision) { + String subrepoUrl = subrepo.getProperty(Constants.REPOSITORY_PROP); + Set processedSubrepoChanges = myProcessedSubrepoChanges.get(subrepoUrl); + if (processedSubrepoChanges == null) { + processedSubrepoChanges = new HashSet(); + myProcessedSubrepoChanges.put(subrepoUrl, processedSubrepoChanges); + } + processedSubrepoChanges.add(new SubrepoChangesInterval(previousSubrepoRevisions, currentSubrepoRevision)); + } + + public boolean isProcessedSubrepoChanges(@NotNull VcsRoot subrepo, @NotNull List previousSubrepoRevisions, @NotNull String currentSubrepoRevision) { + String subrepoUrl = subrepo.getProperty(Constants.REPOSITORY_PROP); + Set processedSubrepoChanges = myProcessedSubrepoChanges.get(subrepoUrl); + if (processedSubrepoChanges == null) + return false; + return processedSubrepoChanges.contains(new SubrepoChangesInterval(previousSubrepoRevisions, currentSubrepoRevision)); + } + + private final static class SubrepoChangesInterval extends Pair, String> { + private SubrepoChangesInterval(@NotNull List prevRevisions, @NotNull String currentRevision) { + super(prevRevisions, currentRevision); + } + } }