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);
-            String prevRevision = subrepo.id().revision(c.getPrevious().revision()).inLocalRepository().call();
-            String curRevision = subrepo.id().revision(c.getCurrent().revision()).inLocalRepository().call();
-
+            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);
+            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"));
+  }
 }