changeset 569:7ca3303cfc9e Faradi-7.1.x

Fix NPE during mirrors cleanup
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Mon, 18 Mar 2013 12:05:23 +0400
parents 844fc8f99c29
children 57b85306c377
files mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentMirrorCleaner.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentMirrorCleanerTest.java
diffstat 2 files changed, 28 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentMirrorCleaner.java	Wed Mar 06 16:56:57 2013 +0400
+++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentMirrorCleaner.java	Mon Mar 18 12:05:23 2013 +0400
@@ -50,6 +50,8 @@
     Set<String> repositories = new HashSet<String>();
     for (VcsRootEntry entry : context.getRunningBuild().getVcsRootEntries()) {
       VcsRoot root = entry.getVcsRoot();
+      if (!isHgRoot(root))
+        continue;
       HgVcsRoot hgRoot = new HgVcsRoot(root);
       AuthSettings auth = hgRoot.getAuthSettings();
       ourLog.debug("Repository " + auth.getRepositoryUrlWithHiddenPassword(hgRoot.getRepository()) +
@@ -58,4 +60,8 @@
     }
     return repositories;
   }
+
+  private boolean isHgRoot(@NotNull VcsRoot root) {
+    return Constants.VCS_NAME.equals(root.getVcsName());
+  }
 }
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentMirrorCleanerTest.java	Wed Mar 06 16:56:57 2013 +0400
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentMirrorCleanerTest.java	Mon Mar 18 12:05:23 2013 +0400
@@ -3,10 +3,10 @@
 import com.intellij.openapi.diagnostic.Logger;
 import jetbrains.buildServer.TempFiles;
 import jetbrains.buildServer.agent.*;
-import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.CommandSettings;
 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.TestCommandSettingsFactory;
 import jetbrains.buildServer.log.Log4jFactory;
 import jetbrains.buildServer.vcs.*;
+import jetbrains.buildServer.vcs.impl.VcsRootImpl;
 import org.jetbrains.annotations.NotNull;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
@@ -109,6 +109,27 @@
   }
 
 
+  public void no_errors_for_non_mercurial_roots() throws Exception {
+    final File repo1 = myTempFiles.createTempDir();
+    copyRepository(new File("mercurial-tests/testData/rep1"), repo1);
+    final VcsRoot root1 = vcsRoot().withUrl(repo1.getAbsolutePath()).build();
+
+    final VcsRoot nonHgRoot = new VcsRootImpl(20, "some.vcs");
+
+    final DirectoryCleanersProviderContext ctx = myContext.mock(DirectoryCleanersProviderContext.class);
+    myContext.checking(new Expectations(){{
+      AgentRunningBuild build = myContext.mock(AgentRunningBuild.class, "build" + myBuildCounter++);
+      allowing(build).getVcsRootEntries(); will(returnValue(asList(new VcsRootEntry(root1, CheckoutRules.DEFAULT),
+              new VcsRootEntry(nonHgRoot, CheckoutRules.DEFAULT))));
+      allowing(ctx).getRunningBuild(); will(returnValue(build));
+    }});
+
+    final DirectoryCleanersRegistry registry = myContext.mock(DirectoryCleanersRegistry.class);
+    myCleaner.registerDirectoryCleaners(ctx, registry);
+    myContext.assertIsSatisfied();
+  }
+
+
   private void doUpdate(@NotNull VcsRoot vcsRoot, @NotNull String toVersion, @NotNull File workDir) throws VcsException {
     final AgentRunningBuild build = myContext.mock(AgentRunningBuild.class, "build" + myBuildCounter++);
     myContext.checking(new Expectations() {{