Mercurial > hg > mercurial
changeset 541:bf0b43e4da97
report subrepo added/removed
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Wed, 30 Jan 2013 11:21:56 +0400 |
parents | f9c0725f5c0a |
children | 0f06e0e10540 |
files | mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java |
diffstat | 2 files changed, 68 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Wed Jan 30 10:50:52 2013 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Wed Jan 30 11:21:56 2013 +0400 @@ -608,21 +608,37 @@ List<SubRepoConfigChange> subrepoConfigChanges = repo.getSubrepoConfigChanges(change.getVersion()); int i = 1; for (SubRepoConfigChange c : subrepoConfigChanges) { - if (c.getCurrent() != null && c.getPrevious() != null && c.getCurrent().url().equals(c.getPrevious().url())) { - String subrepoUrl = c.getCurrent().resolveUrl(root.getRepository()); - + String subrepoUrl = null; + String curRevision = null; + String prevRevision = null; + if (c.getCurrent() == null && c.getPrevious() != null) { + subrepoUrl = c.getPrevious().resolveUrl(root.getRepository()); + HgVcsRoot subrepoRoot = root.withUrl(subrepoUrl); + syncRepository(subrepoRoot); + ServerHgRepo subrepo = createRepo(subrepoRoot); + prevRevision = subrepo.id().revision(c.getPrevious().revision()).inLocalRepository().call(); + } else if (c.getPrevious() == null) { + subrepoUrl = c.getCurrent().resolveUrl(root.getRepository()); HgVcsRoot subrepoRoot = root.withUrl(subrepoUrl); syncRepository(subrepoRoot); ServerHgRepo subrepo = createRepo(subrepoRoot); - String prevRevision = subrepo.id().revision(c.getPrevious().revision()).inLocalRepository().call(); - String curRevision = subrepo.id().revision(c.getCurrent().revision()).inLocalRepository().call(); - + curRevision = subrepo.id().revision(c.getCurrent().revision()).inLocalRepository().call(); + } else if (c.getCurrent().url().equals(c.getPrevious().url())) { + subrepoUrl = c.getCurrent().resolveUrl(root.getRepository()); + HgVcsRoot subrepoRoot = root.withUrl(subrepoUrl); + syncRepository(subrepoRoot); + ServerHgRepo subrepo = createRepo(subrepoRoot); + prevRevision = subrepo.id().revision(c.getPrevious().revision()).inLocalRepository().call(); + curRevision = subrepo.id().revision(c.getCurrent().revision()).inLocalRepository().call(); + } + change.setAttribute("subrepo." + i + ".path", c.getPath()); + if (subrepoUrl != null) change.setAttribute("subrepo." + i + ".rootDiff." + Constants.REPOSITORY_PROP, subrepoUrl); - change.setAttribute("subrepo." + i + ".path", c.getPath()); + if (prevRevision != null) change.setAttribute("subrepo." + i + ".oldRevision", prevRevision); + if (curRevision != null) change.setAttribute("subrepo." + i + ".newRevision", curRevision); - i++; - } + i++; } } } catch (Exception e) {
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java Wed Jan 30 10:50:52 2013 +0400 +++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SubrepoChangesTest.java Wed Jan 30 11:21:56 2013 +0400 @@ -6,6 +6,7 @@ import jetbrains.buildServer.vcs.CheckoutRules; import jetbrains.buildServer.vcs.ModificationData; import jetbrains.buildServer.vcs.VcsRoot; +import org.hamcrest.Matchers; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -18,6 +19,9 @@ import static jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialSupportBuilder.mercurialSupport; import static jetbrains.buildServer.buildTriggers.vcs.mercurial.Util.copyRepository; import static jetbrains.buildServer.buildTriggers.vcs.mercurial.VcsRootBuilder.vcsRoot; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; import static org.testng.AssertJUnit.assertEquals; @Test @@ -97,7 +101,7 @@ } - public void report_subrepo_config_updates_in_attributes() throws Exception { + public void report_subrepo_revision_changed() throws Exception { ServerPluginConfig pluginConfig = new ServerPluginConfigBuilder() .cachesDir(myTempFiles.createTempDir()) .reportSubrepoConfigUpdates(true) @@ -114,4 +118,42 @@ assertEquals("514c3e09cddf", attrs.get("subrepo.1.newRevision")); assertEquals("ebb884b1b691", attrs.get("subrepo.1.oldRevision")); } + + + public void report_subrepo_added() throws Exception { + ServerPluginConfig pluginConfig = new ServerPluginConfigBuilder() + .cachesDir(myTempFiles.createTempDir()) + .reportSubrepoConfigUpdates(true) + .dontUseRevsets() + .build(); + myVcs = mercurialSupport().withConfig(pluginConfig).build(); + VcsRoot root = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).build(); + List<ModificationData> changes = myVcs.collectChanges(root, "e4eced2b7381", "34017377d9c3", CheckoutRules.DEFAULT); + assertEquals(1, changes.size()); + ModificationData m = changes.get(0); + Map<String, String> attrs = m.getAttributes(); + assertEquals(new File(myRemoteRepo1.getParentFile(), "r2").getCanonicalPath(), new File(attrs.get("subrepo.1.rootDiff." + Constants.REPOSITORY_PROP)).getCanonicalPath()); + assertEquals("r2", attrs.get("subrepo.1.path")); + assertEquals("916933c1dd8e", attrs.get("subrepo.1.newRevision")); + assertThat(attrs, not(Matchers.<String, String>hasKey(startsWith("subrepo.1.oldRevision")))); + } + + + public void report_subrepo_removed() throws Exception { + ServerPluginConfig pluginConfig = new ServerPluginConfigBuilder() + .cachesDir(myTempFiles.createTempDir()) + .reportSubrepoConfigUpdates(true) + .dontUseRevsets() + .build(); + myVcs = mercurialSupport().withConfig(pluginConfig).build(); + VcsRoot root = vcsRoot().withUrl(myRemoteRepo1.getAbsolutePath()).build(); + List<ModificationData> changes = myVcs.collectChanges(root, "34017377d9c3", "4d7b3db8779f", CheckoutRules.DEFAULT); + assertEquals(1, changes.size()); + ModificationData m = changes.get(0); + Map<String, String> attrs = m.getAttributes(); + assertEquals(new File(myRemoteRepo1.getParentFile(), "r2").getCanonicalPath(), new File(attrs.get("subrepo.1.rootDiff." + Constants.REPOSITORY_PROP)).getCanonicalPath()); + assertEquals("r2", attrs.get("subrepo.1.path")); + assertThat(attrs, not(Matchers.<String, String>hasKey(startsWith("subrepo.1.newRevision")))); + assertEquals("916933c1dd8e", attrs.get("subrepo.1.oldRevision")); + } }