Mercurial > hg > mercurial
changeset 550:2fbe8c7fa710
Don't collect same subrepo changes twice
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Mon, 25 Feb 2013 16:33:20 +0400 |
parents | 80a45e45918c |
children | 4a18bdd61aa6 |
files | mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java |
diffstat | 2 files changed, 31 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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; }
--- 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<File> mySyncedDirs = new HashSet<File>(); private Map<String, HgVersion> myHgVersions = new HashMap<String, HgVersion>(); + private Map<String, Set<SubrepoChangesInterval>> myProcessedSubrepoChanges = new HashMap<String, Set<SubrepoChangesInterval>>(); 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<String> previousSubrepoRevisions, @NotNull String currentSubrepoRevision) { + String subrepoUrl = subrepo.getProperty(Constants.REPOSITORY_PROP); + Set<SubrepoChangesInterval> processedSubrepoChanges = myProcessedSubrepoChanges.get(subrepoUrl); + if (processedSubrepoChanges == null) { + processedSubrepoChanges = new HashSet<SubrepoChangesInterval>(); + myProcessedSubrepoChanges.put(subrepoUrl, processedSubrepoChanges); + } + processedSubrepoChanges.add(new SubrepoChangesInterval(previousSubrepoRevisions, currentSubrepoRevision)); + } + + public boolean isProcessedSubrepoChanges(@NotNull VcsRoot subrepo, @NotNull List<String> previousSubrepoRevisions, @NotNull String currentSubrepoRevision) { + String subrepoUrl = subrepo.getProperty(Constants.REPOSITORY_PROP); + Set<SubrepoChangesInterval> processedSubrepoChanges = myProcessedSubrepoChanges.get(subrepoUrl); + if (processedSubrepoChanges == null) + return false; + return processedSubrepoChanges.contains(new SubrepoChangesInterval(previousSubrepoRevisions, currentSubrepoRevision)); + } + + private final static class SubrepoChangesInterval extends Pair<List<String>, String> { + private SubrepoChangesInterval(@NotNull List<String> prevRevisions, @NotNull String currentRevision) { + super(prevRevisions, currentRevision); + } + } }