changeset 335:092373ee11e5

Merge branch Eluru-6.5.x
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Thu, 01 Dec 2011 14:25:26 +0300
parents 692d253c78cf (current diff) 01648f900892 (diff)
children ae189ede9756
files mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfig.java mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentPluginConfigImpl.java mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/PluginConfig.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ArchiveCommand.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java mercurial-server/src/META-INF/build-server-plugin-mercurial.xml mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerPluginConfigImpl.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/SettingsTest.java
diffstat 2 files changed, 97 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ArchiveCommand.java	Thu Dec 01 14:25:26 2011 +0300
@@ -0,0 +1,86 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;
+
+import com.intellij.execution.configurations.GeneralCommandLine;
+import jetbrains.buildServer.ExecResult;
+import jetbrains.buildServer.util.FileUtil;
+import jetbrains.buildServer.vcs.VcsException;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+
+public class ArchiveCommand extends VcsRootCommand {
+  private File myDestDir;
+  private String myToId;
+
+  public ArchiveCommand(@NotNull final Settings settings, @NotNull final File workingDir) {
+    super(settings, workingDir);
+  }
+
+  public void setDestDir(@NotNull File destDir) {
+    myDestDir = destDir;
+  }
+
+  public void setToId(final String toId) {
+    myToId = toId;
+  }
+
+  public void execute() throws VcsException {
+    if (myDestDir == null)
+      throw new IllegalStateException("Destination dir must be specified");
+    GeneralCommandLine cli = createCommandLine();
+    cli.addParameter("archive");
+    setType(cli);
+    setRevision(cli);
+    setDestination(cli);
+    setSubRepos(cli);
+
+    ExecResult res = runCommand(cli);
+    failIfNotEmptyStdErr(cli, res);
+    deleteHgArchival();
+  }
+
+  private void setDestination(GeneralCommandLine cli) {
+    cli.addParameter(myDestDir.getAbsolutePath());
+  }
+
+  private void setRevision(GeneralCommandLine cli) {
+    cli.addParameter("-r");
+    if (myToId != null) {
+      cli.addParameter(myToId);
+    } else {
+      cli.addParameter("tip");
+    }
+  }
+
+  private void setType(GeneralCommandLine cli) {
+    cli.addParameter("-t");
+    cli.addParameter("files");
+  }
+
+  private void setSubRepos(GeneralCommandLine cli) {
+    cli.addParameter("-S");
+  }
+
+  /**
+   * hg archive generates .hg_archival.txt, delete it since original repository do not have such file
+   */
+  private void deleteHgArchival() {
+    if (myDestDir == null)
+      throw new IllegalStateException("Destination dir must be specified");
+    File hg_arhival = new File(myDestDir, ".hg_archival.txt");
+    FileUtil.delete(hg_arhival);
+  }
+}
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Mon Nov 28 08:38:22 2011 +0300
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Thu Dec 01 14:25:26 2011 +0300
@@ -33,7 +33,6 @@
 import org.jetbrains.annotations.Nullable;
 
 import java.io.File;
-import java.io.FileFilter;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.util.*;
@@ -351,35 +350,22 @@
     File tempDir = FileUtil.createTempDirectory("mercurial", toVer.getId());
     try {
       File mirrorDir = getWorkingDir(settings);
-      final File repRoot = new File(tempDir, "rep");
-      CloneCommand cl = new CloneCommand(settings, repRoot);
-      // clone from the local repository
-      cl.setRepository(mirrorDir.getAbsolutePath());
-      cl.setToId(toVer.getId());
-      cl.setUpdateWorkingDir(false);
-      cl.setUsePullProtocol(myConfig.isUsePullProtocol());
-      cl.execute();
-
-      UpdateCommand up = new UpdateCommand(settings, repRoot);
-      up.setToId(toVer.getId());
-      up.execute();
-
-      buildPatchFromDirectory(builder, repRoot, new FileFilter() {
-        public boolean accept(final File file) {
-          return !(file.isDirectory() && ".hg".equals(file.getName()));
-        }
-      }, checkoutRules);
+      ArchiveCommand archive = new ArchiveCommand(settings, mirrorDir);
+      archive.setDestDir(tempDir);
+      archive.setToId(toVer.getId());
+      archive.execute();
+      buildPatchFromDirectory(builder, tempDir, checkoutRules);
     } finally {
       FileUtil.delete(tempDir);
     }
   }
 
-  private void buildPatchFromDirectory(final PatchBuilder builder, final File repRoot, final FileFilter filter, final CheckoutRules checkoutRules) throws IOException {
-    buildPatchFromDirectory(repRoot, builder, repRoot, filter, checkoutRules);
+  private void buildPatchFromDirectory(final PatchBuilder builder, final File repRoot, final CheckoutRules checkoutRules) throws IOException {
+    buildPatchFromDirectory(repRoot, builder, repRoot, checkoutRules);
   }
 
-  private void buildPatchFromDirectory(File curDir, final PatchBuilder builder, final File repRoot, final FileFilter filter, final CheckoutRules checkoutRules) throws IOException {
-    File[] files = curDir.listFiles(filter);
+  private void buildPatchFromDirectory(File curDir, final PatchBuilder builder, final File repRoot, final CheckoutRules checkoutRules) throws IOException {
+    File[] files = curDir.listFiles();
     if (files != null) {
       for (File realFile: files) {
         String relPath = realFile.getAbsolutePath().substring(repRoot.getAbsolutePath().length());
@@ -388,7 +374,7 @@
           final File virtualFile = new File(mappedPath);
           if (realFile.isDirectory()) {
             builder.createDirectory(virtualFile);
-            buildPatchFromDirectory(realFile, builder, repRoot, filter, checkoutRules);
+            buildPatchFromDirectory(realFile, builder, repRoot, checkoutRules);
           } else {
             final FileInputStream is = new FileInputStream(realFile);
             try {
@@ -399,7 +385,7 @@
           }
         } else {
           if (realFile.isDirectory()) {
-            buildPatchFromDirectory(realFile, builder, repRoot, filter, checkoutRules);
+            buildPatchFromDirectory(realFile, builder, repRoot, checkoutRules);
           }
         }
       }