TW-51567 do not clean checkout dir when .git is not found
authorDmitry Neverov <dmitry.neverov@gmail.com>
Tue, 24 Oct 2017 11:37:46 +0000 (13:37 +0200)
committerDmitry Neverov <dmitry.neverov@gmail.com>
Tue, 24 Oct 2017 11:37:46 +0000 (13:37 +0200)
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/UpdaterImpl.java

index 54bb2efd6b7fea0f5f202598191bf38dcb593fa8..4e57add35d6b7c9b70dbad2da62fb26d8516f8e4 100644 (file)
@@ -144,12 +144,12 @@ public class UpdaterImpl implements Updater {
   private boolean initGitRepository() throws VcsException {
     boolean firstFetch = false;
     if (!new File(myTargetDirectory, ".git").exists()) {
-      initDirectory();
+      initDirectory(false);
       firstFetch = true;
     } else {
       String remoteUrl = getRemoteUrl();
       if (!remoteUrl.equals(myRoot.getRepositoryFetchURL().toString())) {
-        initDirectory();
+        initDirectory(true);
         firstFetch = true;
       } else {
         try {
@@ -157,7 +157,7 @@ public class UpdaterImpl implements Updater {
           configureSparseCheckout();
         } catch (Exception e) {
           LOG.warn("Do clean checkout due to errors while configure use of local mirrors", e);
-          initDirectory();
+          initDirectory(true);
           firstFetch = true;
         }
       }
@@ -721,14 +721,17 @@ public class UpdaterImpl implements Updater {
    *
    * @throws VcsException if there are problems with initializing the directory
    */
-  void initDirectory() throws VcsException {
-    BuildDirectoryCleanerCallback c = new BuildDirectoryCleanerCallback(myLogger, LOG);
-    myDirectoryCleaner.cleanFolder(myTargetDirectory, c);
-    //noinspection ResultOfMethodCallIgnored
-    myTargetDirectory.mkdirs();
-    if (c.isHasErrors()) {
-      throw new VcsException("Unable to clean directory " + myTargetDirectory + " for VCS root " + myRoot.getName());
+  private void initDirectory(boolean removeTargetDir) throws VcsException {
+    if (removeTargetDir) {
+      BuildDirectoryCleanerCallback c = new BuildDirectoryCleanerCallback(myLogger, LOG);
+      myDirectoryCleaner.cleanFolder(myTargetDirectory, c);
+      //noinspection ResultOfMethodCallIgnored
+      if (c.isHasErrors()) {
+        throw new VcsException("Unable to clean directory " + myTargetDirectory + " for VCS root " + myRoot.getName());
+      }
     }
+
+    myTargetDirectory.mkdirs();
     myLogger.message("The .git directory is missing in '" + myTargetDirectory + "'. Running 'git init'...");
     myGitFactory.create(myTargetDirectory).init().call();
     validateUrls();