aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ProjectLock.java20
1 files changed, 17 insertions, 3 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectLock.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectLock.java
index ce62584abc9..f12751f9be6 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectLock.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectLock.java
@@ -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);
}
}