# HG changeset patch # User Dmitry Neverov # Date 1362649505 -14400 # Node ID 333a1ddcbf944e3c761fec7252f6737edcd309fc # Parent 27cd2503cea3a616bc14967bea892fc8213d9ab2 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI diff -r 27cd2503cea3 -r 333a1ddcbf94 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java --- 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 csets = repo.collectChanges(root) .fromRevision(fromCommits) .toRevision(toCommit) + .includeFromRevision(ctx.includeFromRevisions()) .call(); - Iterator iter = csets.iterator(); - while (iter.hasNext()) { - ChangeSet cset = iter.next(); - if (fromVersions.contains(cset.getId())) - iter.remove(); + if (!ctx.includeFromRevisions()) { + Iterator 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(); diff -r 27cd2503cea3 -r 333a1ddcbf94 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/OperationContext.java --- 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> myProcessedSubrepoChanges = new HashMap>();//subrepo url -> processed changes intervals private Map> myRevisionsPerRoot = new HashMap>(); private Map myRepos = new HashMap(); + 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: diff -r 27cd2503cea3 -r 333a1ddcbf94 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesCommand.java --- 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 myFromRevisions; protected String myToRevision; + protected boolean myIncludeFromRevision; @NotNull public abstract List call(@NotNull List fromCommits, @NotNull String toCommit) throws VcsException; @@ -28,5 +29,8 @@ return this; } - + public CollectChangesCommand includeFromRevision(boolean doInclude) { + myIncludeFromRevision = doInclude; + return this; + } } diff -r 27cd2503cea3 -r 333a1ddcbf94 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesWithRevsets.java --- 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()) diff -r 27cd2503cea3 -r 333a1ddcbf94 mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java --- 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 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 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 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())));