Skip to content

Commit

Permalink
fix for #2885 - output correct JAVA env setters in Windows bash sessi…
Browse files Browse the repository at this point in the history
…ons (#2886)

* fix for #2885

* fix native-launcher test

* Manage Windows Posix script via command-line options

---------

Co-authored-by: Alexandre Archambault <alexandre.archambault@gmail.com>
  • Loading branch information
philwalk and alexarchambault committed Nov 22, 2023
1 parent aec940c commit d08572f
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 12 deletions.
4 changes: 2 additions & 2 deletions .github/scripts/generate-os-packages.sh
Expand Up @@ -6,7 +6,7 @@ ARCHITECTURE=$(uname -m)
ARTIFACTS_DIR="artifacts/"
mkdir -p "$ARTIFACTS_DIR"

if [[ "$OSTYPE" == "msys" ]]; then
if [[ -z "$OSTYPE" ]]; then
mill="./mill.bat"
else
mill="./mill"
Expand All @@ -17,7 +17,7 @@ launcher() {
local launcherMillCommand="cliNativeImageLauncher"
local launcherName

if [[ "$OSTYPE" == "msys" ]]; then
if [[ "${OS-}" == "Windows_NT" ]]; then
launcherName="cs.exe"
else
launcherName="cs"
Expand Down
2 changes: 2 additions & 0 deletions modules/cli/src/main/scala/coursier/cli/jvm/Java.scala
Expand Up @@ -144,6 +144,8 @@ object Java extends CoursierCommand[JavaOptions] {
val script =
if (params.env.windowsScript)
coursier.jvm.JavaHome.finalBatScript(envUpdate)
else if (params.env.windowsPosixScript)
coursier.jvm.JavaHome.finalBashScript(envUpdate).replace('\\', '/')
else
ShellUtil.shell() match {
case Some(Shell.Fish) => coursier.jvm.JavaHome.finalFishScript(envUpdate)
Expand Down
2 changes: 2 additions & 0 deletions modules/cli/src/main/scala/coursier/cli/jvm/JavaHome.scala
Expand Up @@ -48,6 +48,8 @@ object JavaHome extends CoursierCommand[JavaHomeOptions] {
val script =
if (params.env.windowsScript)
coursier.jvm.JavaHome.finalBatScript(envUpdate)
else if (params.env.windowsPosixScript)
coursier.jvm.JavaHome.finalBashScript(envUpdate).replace('\\', '/')
else
coursier.jvm.JavaHome.finalBashScript(envUpdate)
print(script)
Expand Down
Expand Up @@ -18,7 +18,11 @@ final case class EnvOptions(

@Group(OptionGroup.scripting)
@Hidden
windowsScript: Boolean = Properties.isWin,
windowsScript: Option[Boolean] = None,

@Group(OptionGroup.scripting)
@Hidden
windowsPosixScript: Option[Boolean] = None,

@Group(OptionGroup.scripting)
@HelpMessage("Sets the default JVM to be used")
Expand Down
59 changes: 50 additions & 9 deletions modules/cli/src/main/scala/coursier/cli/params/EnvParams.scala
Expand Up @@ -3,6 +3,7 @@ package coursier.cli.params
import java.nio.file.{Path, Paths}

import cats.data.{Validated, ValidatedNel}
import cats.implicits._
import coursier.cli.options.EnvOptions
import coursier.env.{EnvironmentUpdate, ProfileUpdater, WindowsEnvVarUpdater}
import coursier.launcher.internal.Windows
Expand All @@ -15,7 +16,8 @@ final case class EnvParams(
disableEnv: Boolean,
setup: Boolean,
homeOpt: Option[Path],
windowsScript: Boolean
windowsScript: Boolean,
windowsPosixScript: Boolean
) {
def anyFlag: Boolean = env || setup
// TODO Allow to customize some parameters of WindowsEnvVarUpdater / ProfileUpdater?
Expand Down Expand Up @@ -87,6 +89,10 @@ final case class EnvParams(
}

object EnvParams {

def defaultWindowsPosixScript: Boolean =
Properties.isWin && Option(System.getenv("OSTYPE")).exists(_.trim.nonEmpty)

def apply(options: EnvOptions): ValidatedNel[String, EnvParams] = {
val homeOpt = options.userHome.filter(_.nonEmpty).map(Paths.get(_))

Expand All @@ -103,14 +109,49 @@ object EnvParams {
else
Validated.validNel(())

flagsV.map { _ =>
EnvParams(
options.env,
options.disableEnv,
options.setup,
homeOpt,
options.windowsScript
)
val windowsScriptValues0 = (options.windowsScript, options.windowsPosixScript) match {
case (Some(true), Some(true)) =>
Validated.invalidNel("Cannot specify both --windows-script and --windows-posix-script")
case (Some(true), _) =>
Validated.validNel(Some(true))
case (_, Some(true)) =>
Validated.validNel(Some(false))
case (Some(false), Some(false)) =>
Validated.validNel(None)
case (None, Some(false)) =>
Validated.validNel {
if (Properties.isWin) Some(true)
else None
}
case (Some(false), None) =>
Validated.validNel {
if (defaultWindowsPosixScript) Some(false)
else None
}
case (None, None) =>
Validated.validNel {
if (defaultWindowsPosixScript) Some(false)
else if (Properties.isWin) Some(true)
else None
}
}

val windowsScriptValues = windowsScriptValues0.map {
case Some(true) => (true, false)
case Some(false) => (false, true)
case None => (false, false)
}

(flagsV, windowsScriptValues).mapN {
case (_, (windowsScript, windowsPosixScript)) =>
EnvParams(
options.env,
options.disableEnv,
options.setup,
homeOpt,
windowsScript,
windowsPosixScript
)
}
}
}

0 comments on commit d08572f

Please sign in to comment.