Mercurial > hg > mercurial
changeset 593:ad112e314be5
Report subrepo revision in each commit
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Thu, 25 Apr 2013 20:54:42 +0400 |
parents | e97a636cc9b7 |
children | 9cbf9205208e |
files | mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ModificationDataMatcher.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java |
diffstat | 3 files changed, 90 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java Wed Apr 24 15:54:12 2013 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java Thu Apr 25 20:54:42 2013 +0400 @@ -362,6 +362,17 @@ 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())); + } + } + attributes.putAll(attrBuilder.buildAttributes()); } catch (Exception e) { Loggers.VCS.warn("Error while reporting subrepo config changes", e); if (e instanceof VcsExtension)
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ModificationDataMatcher.java Wed Apr 24 15:54:12 2013 +0400 +++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ModificationDataMatcher.java Thu Apr 25 20:54:42 2013 +0400 @@ -8,12 +8,11 @@ import java.util.HashMap; import java.util.Map; -import static jetbrains.buildServer.util.Util.map; - public class ModificationDataMatcher extends TypeSafeMatcher<ModificationData> { private String myVersion; private Map<String, String> myVcsRootProperties = new HashMap<String, String>(); + private Map<String, String> myAttributes = new HashMap<String, String>(); @Override public boolean matchesSafely(ModificationData m) { @@ -21,6 +20,8 @@ return false; if (!myVcsRootProperties.isEmpty() && !myVcsRootProperties.equals(m.getVcsRootObject().getProperties())) return false; + if (!myAttributes.isEmpty() && !containsAllAttributes(m.getAttributes())) + return false; return true; } @@ -30,6 +31,8 @@ description.appendText(" with version ").appendValue(myVersion); if (!myVcsRootProperties.isEmpty()) description.appendText(" with vcs root properties ").appendValue(myVcsRootProperties); + if (!myAttributes.isEmpty()) + description.appendText(" with attributes ").appendValue(myAttributes); } public static ModificationDataMatcher modificationData() { @@ -41,8 +44,24 @@ return this; } - public ModificationDataMatcher withVcsRootProperties(Map<String, String> properties) { + public ModificationDataMatcher withVcsRootProperties(@NotNull Map<String, String> properties) { myVcsRootProperties.putAll(properties); return this; } + + public ModificationDataMatcher withAttributes(@NotNull Map<String, String> attributes) { + myAttributes.putAll(attributes); + return this; + } + + private boolean containsAllAttributes(@NotNull Map<String, String> attributes) { + for (Map.Entry<String, String> e : myAttributes.entrySet()) { + String expectedValue = e.getValue(); + String actualValue = attributes.get(e.getKey()); + if (expectedValue == null && actualValue != null || + expectedValue != null && !e.getValue().equals(actualValue)) + return false; + } + return true; + } }
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java Wed Apr 24 15:54:12 2013 +0400 +++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java Thu Apr 25 20:54:42 2013 +0400 @@ -165,4 +165,61 @@ assertThat(changes, hasItem(modificationData().withVersion("514c3e09cddf").withVcsRootProperties(subrepoRootProperties))); assertThat(changes, hasItem(modificationData().withVersion("1f9eb39a3921").withVcsRootProperties(subrepoRootProperties))); } + + + public void report_subrepo_revision_in_each_main_root_commit(@NotNull HgVersion _) throws Exception { + ServerPluginConfig pluginConfig = new ServerPluginConfigBuilder() + .cachesDir(myTempFiles.createTempDir()) + .detectSubrepoChanges(true) + .dontUseRevsets() + .build(); + myVcs = mercurialSupport().withConfig(pluginConfig).build(); + VcsRoot root = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).withSubrepoChanges(true).build(); + List<ModificationData> changes = myVcs.getCollectChangesPolicy().collectChanges(root, "e4eced2b7381", "d64d9799c143", CheckoutRules.DEFAULT); + + assertThat(changes.size(), is(11)); + + SubrepoRevisionAttributesBuilder builder = new SubrepoRevisionAttributesBuilder(); + builder.addSubrepo(new SubrepoConfig(root) + .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, myRemoteRepo2.getCanonicalPath()) + .setSubrepoPath("r2") + .setSubrepoRevision("916933c1dd8e")); + assertThat(changes, hasItem(modificationData().withVersion("34017377d9c3").withAttributes(builder.buildAttributes()))); + + builder = new SubrepoRevisionAttributesBuilder(); + builder.addSubrepo(new SubrepoConfig(root) + .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, myRemoteRepo3.getCanonicalPath()) + .setSubrepoPath("r2") + .setSubrepoRevision("9e4a2fef1a1c")); + assertThat(changes, hasItem(modificationData().withVersion("d350e7209906").withAttributes(builder.buildAttributes()))); + + builder = new SubrepoRevisionAttributesBuilder(); + builder.addSubrepo(new SubrepoConfig(root) + .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, myRemoteRepo3.getCanonicalPath()) + .setSubrepoPath("r2") + .setSubrepoRevision("ebb884b1b691")); + assertThat(changes, hasItem(modificationData().withVersion("09c256b6163e").withAttributes(builder.buildAttributes()))); + + builder = new SubrepoRevisionAttributesBuilder(); + builder.addSubrepo(new SubrepoConfig(root) + .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, myRemoteRepo3.getCanonicalPath()) + .setSubrepoPath("r2") + .setSubrepoRevision("514c3e09cddf")); + assertThat(changes, hasItem(modificationData().withVersion("d64d9799c143").withAttributes(builder.buildAttributes()))); + + + builder = new SubrepoRevisionAttributesBuilder(); + builder.addSubrepo(new SubrepoConfig(root) + .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, myRemoteRepo2.getCanonicalPath()) + .setSubrepoPath("r2/r2") + .setSubrepoRevision("916933c1dd8e")); + assertThat(changes, hasItem(modificationData().withVersion("1f9eb39a3921").withAttributes(builder.buildAttributes()))); + + builder = new SubrepoRevisionAttributesBuilder(); + builder.addSubrepo(new SubrepoConfig(root) + .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, myRemoteRepo2.getCanonicalPath()) + .setSubrepoPath("r2/r2") + .setSubrepoRevision("ac0003deae69")); + assertThat(changes, hasItem(modificationData().withVersion("514c3e09cddf").withAttributes(builder.buildAttributes()))); + } }