new command added
authorEugene.Petrenko <eugene.petrenko@gmail.com>
Sun, 10 Jul 2011 10:36:37 +0000 (14:36 +0400)
committerEugene.Petrenko <eugene.petrenko@gmail.com>
Sun, 10 Jul 2011 10:36:37 +0000 (14:36 +0400)
nuget-agent/src/jetbrains/buildServer/nuget/agent/install/NuGetActionFactory.java
nuget-agent/src/jetbrains/buildServer/nuget/agent/install/NuGetParameters.java [new file with mode: 0644]
nuget-agent/src/jetbrains/buildServer/nuget/agent/install/PackagesInstallParameters.java
nuget-agent/src/jetbrains/buildServer/nuget/agent/install/PackagesUpdateParameters.java
nuget-agent/src/jetbrains/buildServer/nuget/agent/install/impl/NuGetActionFactoryImpl.java
nuget-agent/src/jetbrains/buildServer/nuget/agent/install/impl/PackageInstallParametersFactoryImpl.java
nuget-tests/src/jetbrains/buildServer/nuget/tests/agent/NuGetUpdatePackageActionFactoryTest.java [new file with mode: 0644]

index 6a5fea6b43a86952f633af32a735768de369bcef..821ed46babd7f1edae2568fdeace8a9725674f27 100644 (file)
@@ -33,4 +33,10 @@ public interface NuGetActionFactory {
                              @NotNull PackagesInstallParameters params,\r
                              @NotNull File packagesConfig,\r
                              @NotNull File targetFolder) throws RunBuildException;\r
+\r
+  @NotNull\r
+  BuildProcess createUpdate(@NotNull BuildRunnerContext context,\r
+                            @NotNull PackagesUpdateParameters params,\r
+                            @NotNull File packagesConfig,\r
+                            @NotNull File targetFolder) throws RunBuildException;\r
 }\r
diff --git a/nuget-agent/src/jetbrains/buildServer/nuget/agent/install/NuGetParameters.java b/nuget-agent/src/jetbrains/buildServer/nuget/agent/install/NuGetParameters.java
new file mode 100644 (file)
index 0000000..1559cdb
--- /dev/null
@@ -0,0 +1,26 @@
+package jetbrains.buildServer.nuget.agent.install;\r
+\r
+import jetbrains.buildServer.RunBuildException;\r
+import org.jetbrains.annotations.NotNull;\r
+\r
+import java.io.File;\r
+import java.util.Collection;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 10.07.11 14:27\r
+ */\r
+public interface NuGetParameters {\r
+  /**\r
+   * @return path to nuget.exe file\r
+   * @throws jetbrains.buildServer.RunBuildException if nuget was not found\r
+   */\r
+  @NotNull\r
+  File getNuGetExeFile() throws RunBuildException;\r
+\r
+  /**\r
+   * @return collection of nuget sources to fetch packages\r
+   */\r
+  @NotNull\r
+  Collection<String> getNuGetPackageSources();\r
+}\r
index 89be2b9824261ea7c4b1204993c86bd3f0e71c77..5da49019716b5ccbe9ec0f945d6d4c9e9ba3ff02 100644 (file)
@@ -18,16 +18,14 @@ package jetbrains.buildServer.nuget.agent.install;
 \r
 import jetbrains.buildServer.RunBuildException;\r
 import org.jetbrains.annotations.NotNull;\r
-import org.jetbrains.annotations.Nullable;\r
 \r
 import java.io.File;\r
-import java.util.Collection;\r
 \r
 /**\r
  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
  * Date: 07.07.11 16:18\r
  */\r
-public interface PackagesInstallParameters {\r
+public interface PackagesInstallParameters extends NuGetParameters {\r
   /**\r
    * @return path to solution file.\r
    * @throws jetbrains.buildServer.RunBuildException\r
@@ -36,29 +34,10 @@ public interface PackagesInstallParameters {
   @NotNull\r
   File getSolutionFile() throws RunBuildException;\r
 \r
-  /**\r
-   * @return path to nuget.exe file\r
-   * @throws RunBuildException if nuget was not found\r
-   */\r
-  @NotNull\r
-  File getNuGetExeFile() throws RunBuildException;\r
-\r
-  /**\r
-   * @return collection of nuget sources to fetch packages\r
-   */\r
-  @NotNull\r
-  Collection<String> getNuGetPackageSources();\r
-\r
   /**\r
    * @return true if pacakges are expected to be installed\r
    *         without version\r
    *         numbers in directory names\r
    */\r
   boolean getExcludeVersion();\r
-\r
-  /**\r
-   * @return package update parameters or null if no update required\r
-   */\r
-  @Nullable\r
-  PackagesUpdateParameters getUpdatePackages();\r
 }\r
index 614d75a52fdac92fc2bce44103be181131f7f4c5..72c3a2868e474c5da29ab652f5ddc0c368efb387 100644 (file)
 \r
 package jetbrains.buildServer.nuget.agent.install;\r
 \r
+import org.jetbrains.annotations.NotNull;\r
+\r
+import java.util.Collection;\r
+\r
 /**\r
  * Contains settings for packages update parameters\r
  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
  * Date: 10.07.11 14:02\r
  */\r
-public interface PackagesUpdateParameters {\r
+public interface PackagesUpdateParameters extends NuGetParameters {\r
   /**\r
-   * @return true if update should be performed with -Safe argument\r
+   * @return true if update should be performed\r
+   *         with -Safe argument\r
    */\r
   boolean getUseSafeUpdate();\r
+\r
+  /**\r
+   * @return list of package Ids to update. Empty list\r
+   *         means update all packages\r
+   */\r
+  @NotNull\r
+  Collection<String> getPackagesToUpdate();\r
 }\r
index 2af526a2331865351c130be481abfeb36ccddf8b..dafc3dcf2c33d32e4b8c7f13ac3eceabd7f347f8 100644 (file)
@@ -21,6 +21,7 @@ import jetbrains.buildServer.agent.BuildProcess;
 import jetbrains.buildServer.agent.BuildRunnerContext;\r
 import jetbrains.buildServer.nuget.agent.install.NuGetActionFactory;\r
 import jetbrains.buildServer.nuget.agent.install.PackagesInstallParameters;\r
+import jetbrains.buildServer.nuget.agent.install.PackagesUpdateParameters;\r
 import jetbrains.buildServer.nuget.agent.util.CommandlineBuildProcessFactory;\r
 import jetbrains.buildServer.util.FileUtil;\r
 import org.jetbrains.annotations.NotNull;\r
@@ -66,4 +67,37 @@ public class NuGetActionFactoryImpl implements NuGetActionFactory {
             packagesConfig.getParentFile()\r
     );\r
   }\r
+\r
+\r
+  @NotNull\r
+  public BuildProcess createUpdate(@NotNull final BuildRunnerContext context,\r
+                                   @NotNull final PackagesUpdateParameters params,\r
+                                   @NotNull final File packagesConfig,\r
+                                   @NotNull final File targetFolder) throws RunBuildException {\r
+    final List<String> argz = new ArrayList<String>();\r
+    argz.add("update");\r
+    argz.add(FileUtil.getCanonicalFile(packagesConfig).getPath()); //path to package\r
+    if (params.getUseSafeUpdate()) {\r
+      argz.add("-Safe");\r
+    }\r
+    argz.add("-RepositoryPath");\r
+    argz.add(FileUtil.getCanonicalFile(targetFolder).getPath());\r
+\r
+    for (String id : params.getPackagesToUpdate()) {\r
+      argz.add("-Id");\r
+      argz.add(id);\r
+    }\r
+\r
+    for (String source : params.getNuGetPackageSources()) {\r
+      argz.add("-Source");\r
+      argz.add(source);\r
+    }\r
+\r
+    return myFactory.executeCommandLine(\r
+            context,\r
+            params.getNuGetExeFile(),\r
+            argz,\r
+            packagesConfig.getParentFile()\r
+    );\r
+  }\r
 }\r
index cfce0c77dbe6632744c8769705b5ca912457c413..e893fda04fbbbf81f658e39039f7da5da8cc3d29 100644 (file)
@@ -20,7 +20,6 @@ import jetbrains.buildServer.RunBuildException;
 import jetbrains.buildServer.agent.BuildRunnerContext;\r
 import jetbrains.buildServer.nuget.agent.install.PackageInstallParametersFactory;\r
 import jetbrains.buildServer.nuget.agent.install.PackagesInstallParameters;\r
-import jetbrains.buildServer.nuget.agent.install.PackagesUpdateParameters;\r
 import jetbrains.buildServer.util.FileUtil;\r
 import jetbrains.buildServer.util.StringUtil;\r
 import org.jetbrains.annotations.NotNull;\r
@@ -87,19 +86,6 @@ public class PackageInstallParametersFactoryImpl implements PackageInstallParame
         return getBoolean(NUGET_EXCLUDE_VERSION);\r
       }\r
 \r
-      @Nullable\r
-      public PackagesUpdateParameters getUpdatePackages() {\r
-        if (!getBoolean(NUGET_UPDATE_PACKAGES))\r
-          return null;\r
-\r
-        final boolean safe = getBoolean(NUGET_UPDATE_PACKAGES_SAFE);\r
-        return new PackagesUpdateParameters() {\r
-          public boolean getUseSafeUpdate() {\r
-            return safe;\r
-          }\r
-        };\r
-      }\r
-\r
       private boolean getBoolean(String key) {\r
         return !StringUtil.isEmptyOrSpaces(getParameter(key));\r
       }\r
diff --git a/nuget-tests/src/jetbrains/buildServer/nuget/tests/agent/NuGetUpdatePackageActionFactoryTest.java b/nuget-tests/src/jetbrains/buildServer/nuget/tests/agent/NuGetUpdatePackageActionFactoryTest.java
new file mode 100644 (file)
index 0000000..201ee52
--- /dev/null
@@ -0,0 +1,147 @@
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.tests.agent;\r
+\r
+import jetbrains.buildServer.BaseTestCase;\r
+import jetbrains.buildServer.RunBuildException;\r
+import jetbrains.buildServer.agent.BuildRunnerContext;\r
+import jetbrains.buildServer.nuget.agent.install.PackagesUpdateParameters;\r
+import jetbrains.buildServer.nuget.agent.install.impl.NuGetActionFactoryImpl;\r
+import jetbrains.buildServer.nuget.agent.util.CommandlineBuildProcessFactory;\r
+import org.jmock.Expectations;\r
+import org.jmock.Mockery;\r
+import org.testng.annotations.BeforeMethod;\r
+import org.testng.annotations.Test;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.util.Arrays;\r
+import java.util.Collections;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 10.07.11 14:29\r
+ */\r
+public class NuGetUpdatePackageActionFactoryTest extends BaseTestCase {\r
+  private Mockery m;\r
+  private CommandlineBuildProcessFactory myProcessFactory;\r
+  private NuGetActionFactoryImpl i;\r
+  private BuildRunnerContext ctx;\r
+  private PackagesUpdateParameters ps;\r
+  private File myTarget;\r
+  private File myConfig;\r
+\r
+  @BeforeMethod\r
+  @Override\r
+  protected void setUp() throws Exception {\r
+    super.setUp();\r
+    m = new Mockery();\r
+    myProcessFactory = m.mock(CommandlineBuildProcessFactory.class);\r
+    i = new NuGetActionFactoryImpl(myProcessFactory);\r
+    ctx = m.mock(BuildRunnerContext.class);\r
+    ps = m.mock(PackagesUpdateParameters.class);\r
+\r
+    myTarget = createTempDir();\r
+    myConfig = createTempFile();\r
+  }\r
+\r
+  @Test\r
+  public void test_no_sources() throws RunBuildException, IOException {\r
+    final File nuget = createTempFile();\r
+    m.checking(new Expectations(){{\r
+      allowing(ps).getNuGetPackageSources(); will(returnValue(Collections.<String>emptyList()));\r
+      allowing(ps).getNuGetExeFile();  will(returnValue(nuget));\r
+      allowing(ps).getUseSafeUpdate(); will(returnValue(false));\r
+      allowing(ps).getPackagesToUpdate(); will(returnValue(Collections.<String>emptyList()));\r
+\r
+      oneOf(myProcessFactory).executeCommandLine(\r
+              ctx,\r
+              nuget,\r
+              Arrays.asList("update", myConfig.getPath(), "-RepositoryPath", myTarget.getPath()),\r
+              myConfig.getParentFile()\r
+      );\r
+    }});\r
+\r
+    i.createUpdate(ctx, ps, myConfig, myTarget);\r
+    m.assertIsSatisfied();\r
+  }\r
+\r
+  @Test\r
+  public void test_packageIds() throws RunBuildException, IOException {\r
+    final File nuget = createTempFile();\r
+    m.checking(new Expectations(){{\r
+      allowing(ps).getNuGetPackageSources(); will(returnValue(Collections.<String>emptyList()));\r
+      allowing(ps).getNuGetExeFile();  will(returnValue(nuget));\r
+      allowing(ps).getUseSafeUpdate(); will(returnValue(false));\r
+      allowing(ps).getPackagesToUpdate(); will(returnValue(Arrays.asList("aaa", "bbb")));\r
+\r
+      oneOf(myProcessFactory).executeCommandLine(\r
+              ctx,\r
+              nuget,\r
+              Arrays.asList("update", myConfig.getPath(), "-RepositoryPath", myTarget.getPath(), "-Id", "aaa", "-Id", "bbb"),\r
+              myConfig.getParentFile()\r
+      );\r
+    }});\r
+\r
+    i.createUpdate(ctx, ps, myConfig, myTarget);\r
+    m.assertIsSatisfied();\r
+  }\r
+\r
+  @Test\r
+  public void test_safe() throws RunBuildException, IOException {\r
+    final File nuget = createTempFile();\r
+    m.checking(new Expectations(){{\r
+      allowing(ps).getNuGetPackageSources(); will(returnValue(Collections.<String>emptyList()));\r
+      allowing(ps).getNuGetExeFile();  will(returnValue(nuget));\r
+      allowing(ps).getUseSafeUpdate(); will(returnValue(true));\r
+      allowing(ps).getPackagesToUpdate(); will(returnValue(Collections.<String>emptyList()));\r
+\r
+      oneOf(myProcessFactory).executeCommandLine(\r
+              ctx,\r
+              nuget,\r
+              Arrays.asList("update", myConfig.getPath(), "-Safe", "-RepositoryPath", myTarget.getPath()),\r
+              myConfig.getParentFile()\r
+      );\r
+    }});\r
+\r
+    i.createUpdate(ctx, ps, myConfig, myTarget);\r
+    m.assertIsSatisfied();\r
+  }\r
+\r
+  @Test\r
+  public void test_sources() throws RunBuildException, IOException {\r
+    final File nuget = createTempFile();\r
+    m.checking(new Expectations(){{\r
+      allowing(ps).getNuGetPackageSources(); will(returnValue(Arrays.asList("aaa", "bbb")));\r
+      allowing(ps).getNuGetExeFile();  will(returnValue(nuget));\r
+      allowing(ps).getUseSafeUpdate(); will(returnValue(false));\r
+      allowing(ps).getPackagesToUpdate(); will(returnValue(Collections.<String>emptyList()));\r
+\r
+      oneOf(myProcessFactory).executeCommandLine(\r
+              ctx,\r
+              nuget,\r
+              Arrays.asList("update", myConfig.getPath(), "-RepositoryPath", myTarget.getPath(), "-Source", "aaa", "-Source", "bbb"),\r
+              myConfig.getParentFile()\r
+      );\r
+    }});\r
+\r
+    i.createUpdate(ctx, ps, myConfig, myTarget);\r
+    m.assertIsSatisfied();\r
+  }\r
+\r
+\r
+}\r