]> source.dussan.org Git - sonarqube.git/commitdiff
Hide project lock on windows
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Wed, 2 Sep 2015 08:11:08 +0000 (10:11 +0200)
committerDuarte Meneses <duarte.meneses@sonarsource.com>
Fri, 4 Sep 2015 08:33:16 +0000 (10:33 +0200)
sonar-batch/src/main/java/org/sonar/batch/scan/ProjectLock.java

index ce62584abc9debccfcb0bfc0d0cf92a34989ef22..f12751f9be6b5d16bf18f70899de55bb5ebb1aea 100644 (file)
@@ -31,6 +31,7 @@ import java.nio.channels.FileLock;
 import java.nio.channels.OverlappingFileLockException;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.attribute.DosFileAttributeView;
 
 public class ProjectLock implements Startable {
   private static final Logger LOG = LoggerFactory.getLogger(ProjectLock.class);
@@ -50,18 +51,31 @@ public class ProjectLock implements Startable {
     try {
       lockRandomAccessFile = new RandomAccessFile(lockFilePath.toFile(), "rw");
       lockChannel = lockRandomAccessFile.getChannel();
+      hideLockFileWindows(lockFilePath);
       lockFile = lockChannel.tryLock(0, 1024, false);
 
       if (lockFile == null) {
         failAlreadyInProgress(null);
       }
+      
     } catch (OverlappingFileLockException e) {
       failAlreadyInProgress(e);
     } catch (IOException e) {
       throw new IllegalStateException("Failed to create project lock in " + lockFilePath.toString(), e);
     }
   }
-  
+
+  private static void hideLockFileWindows(Path p) {
+    try {
+      DosFileAttributeView fileAttrView = Files.getFileAttributeView(p, DosFileAttributeView.class);
+      if (fileAttrView != null) {
+        fileAttrView.setHidden(true);
+      }
+    } catch (IOException e) {
+      throw new IllegalStateException("Failed to hide file: " + p.toString(), e);
+    }
+  }
+
   private static void failAlreadyInProgress(Exception e) {
     throw new IllegalStateException("Another SonarQube analysis is already in progress for this project", e);
   }
@@ -92,11 +106,11 @@ public class ProjectLock implements Startable {
         LOG.error("Error closing file", e);
       }
     }
-    
+
     try {
       Files.delete(lockFilePath);
     } catch (IOException e) {
-      //ignore, as an error happens if another process just started to acquire the same lock
+      // ignore, as an error happens if another process just started to acquire the same lock
       LOG.debug("Couldn't delete lock file: " + lockFilePath.toString(), e);
     }
   }