changeset 188:5013242d3af7 Eluru-6.0.x

Do clone directly to working dir instead of tmp dir
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Wed, 16 Mar 2011 10:17:53 +0300
parents 42bbe553bd8b
children 6077f7aef19d
files mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java
diffstat 1 files changed, 4 insertions(+), 58 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java	Fri Jan 21 09:56:06 2011 +0300
+++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialAgentSideVcsSupport.java	Wed Mar 16 10:17:53 2011 +0300
@@ -21,7 +21,6 @@
 import jetbrains.buildServer.agent.vcs.UpdateByIncludeRules;
 import jetbrains.buildServer.agent.vcs.UpdatePolicy;
 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.*;
-import jetbrains.buildServer.util.FileUtil;
 import jetbrains.buildServer.vcs.CheckoutRules;
 import jetbrains.buildServer.vcs.IncludeRule;
 import jetbrains.buildServer.vcs.VcsException;
@@ -29,7 +28,6 @@
 import org.jetbrains.annotations.NotNull;
 
 import java.io.File;
-import java.io.IOException;
 
 public class MercurialAgentSideVcsSupport extends AgentVcsSupport implements UpdateByIncludeRules {
   private void updateWorkingDir(final Settings settings, final String version, final BuildProgressLogger logger) throws VcsException {
@@ -41,51 +39,11 @@
     logger.message("Working directory updated successfully");
   }
 
-  private File cloneRepository(final Settings settings) throws VcsException {
-    File tempDir;
-    try {
-      File parent = FileUtil.createTempDirectory("hg", "clone");
-      parent.deleteOnExit();
-      tempDir = new File(parent, "hg");
-    } catch (IOException e) {
-      throw new VcsException("Failed to create temp directory: " + e.getLocalizedMessage());
-    }
-
+  private void doClone(final Settings settings, final File workingDir) throws VcsException {
     CloneCommand cc = new CloneCommand(settings);
-    cc.setDestDir(tempDir.getAbsolutePath());
-
+    cc.setDestDir(workingDir.getAbsolutePath());
     cc.setUpdateWorkingDir(false);
     cc.execute();
-    return tempDir;
-  }
-
-  /**
-   * Moves files from one directory to another with all subdirectories.
-   * Removes old directory if it became empty.
-   */
-  private static boolean moveDir(File oldDir, File newDir) {
-    // both old and new directories exist
-    boolean moveSuccessful = true;
-    final File[] files = oldDir.listFiles();
-    if (files != null) {
-      for (File file: files) {
-        if (file.isFile()) {
-          File destFile = new File(newDir, file.getName());
-          destFile.getParentFile().mkdirs();
-          if (!file.renameTo(destFile)) {
-            moveSuccessful = false;
-          }
-        } else if (!moveDir(file, new File(newDir, file.getName()))) {
-          moveSuccessful = false;
-        }
-      }
-    }
-
-    if (moveSuccessful) {
-      FileUtil.deleteIfEmpty(oldDir);
-    }
-
-    return moveSuccessful;
   }
 
   @NotNull
@@ -112,26 +70,14 @@
         Settings settings = new Settings(workingDir, vcsRoot);
         settings.setWorkingDir(workingDir);
         if (settings.hasCopyOfRepository()) {
-          // execute pull command
           logger.message("Repository in working directory found, start pulling changes");
           PullCommand pc = new PullCommand(settings);
           pc.execute();
           logger.message("Changes successfully pulled");
         } else {
-          // execute clone command
           logger.message("No repository in working directory found, start cloning repository to temporary folder");
-          File parentDir = cloneRepository(settings);
-          logger.message("Repository successfully cloned to: " + parentDir.getAbsolutePath());
-          logger.message("Moving repository to working directory: " + workingDir.getAbsolutePath());
-          if (!moveDir(parentDir, workingDir)) {
-            File hgDir = new File(workingDir, ".hg");
-            if (hgDir.isDirectory()) {
-              FileUtil.delete(hgDir);
-            }
-            throw new VcsException("Failed to move directory content: " + parentDir.getAbsolutePath() + " to: " + workingDir.getAbsolutePath());
-          }
-
-          logger.message("Repository successfully moved to working directory: " + workingDir.getAbsolutePath());
+          doClone(settings, workingDir);
+          logger.message("Repository successfully cloned to: " + workingDir.getAbsolutePath());
         }
         updateWorkingDir(settings, toVersion, logger);
       }