From 80acc9297604b15f899c2c4223f5eac01558af11 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Mon, 7 Oct 2024 17:54:18 +0200 Subject: [PATCH] Add --no-wait-for-build-lock option Mainly meant to be used in integration tests --- main/api/src/mill/api/Logger.scala | 7 +++++-- runner/src/mill/runner/MillCliConfig.scala | 8 +++++++- runner/src/mill/runner/MillMain.scala | 5 ++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/main/api/src/mill/api/Logger.scala b/main/api/src/mill/api/Logger.scala index dc0be1c8e05..cedc9f67f2a 100644 --- a/main/api/src/mill/api/Logger.scala +++ b/main/api/src/mill/api/Logger.scala @@ -80,13 +80,16 @@ trait Logger extends Closeable { finally removePromptLine() } - def waitForLock(lock: Lock): Locked = { + def waitForLock(lock: Lock, waitingAllowed: Boolean): Locked = { val tryLocked = lock.tryLock() if (tryLocked.isLocked()) tryLocked - else { + else if (waitingAllowed) { info("Another Mill process is running tasks, waiting for it to be done...") lock.lock() + } else { + error("Cannot proceed, another Mill process is running tasks") + throw new Exception("Cannot acquire lock on Mill output directory") } } } diff --git a/runner/src/mill/runner/MillCliConfig.scala b/runner/src/mill/runner/MillCliConfig.scala index 6608672ea66..429a394f18a 100644 --- a/runner/src/mill/runner/MillCliConfig.scala +++ b/runner/src/mill/runner/MillCliConfig.scala @@ -136,7 +136,13 @@ case class MillCliConfig( doc = """Evaluate tasks / commands without acquiring an exclusive lock on the Mill output directory""" ) - noBuildLock: Flag = Flag() + noBuildLock: Flag = Flag(), + @arg( + hidden = true, + doc = + """Do not wait for an exclusive lock on the Mill output directory to evaluate tasks / commands. Fail if waiting for a lock is needed.""" + ) + noWaitForBuildLock: Flag = Flag() ) import mainargs.ParserForClass diff --git a/runner/src/mill/runner/MillMain.scala b/runner/src/mill/runner/MillMain.scala index 1d4867a9aea..10f343d1518 100644 --- a/runner/src/mill/runner/MillMain.scala +++ b/runner/src/mill/runner/MillMain.scala @@ -243,7 +243,10 @@ object MillMain { ) Using.resources( logger, - logger.waitForLock(outLock) + logger.waitForLock( + outLock, + waitingAllowed = !config.noWaitForBuildLock.value + ) ) { (_, _) => new MillBuildBootstrap( projectRoot = WorkspaceRoot.workspaceRoot,