From a18188d157cd08e45043d3a20c763a183fa0be1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wro=C5=84ski?= Date: Wed, 28 Dec 2022 12:10:03 +0100 Subject: [PATCH] Remove suffix `.aux` from progName when installed by cs --- modules/cli/src/main/scala/scala/cli/ScalaCli.scala | 10 +++++++++- .../installcompletions/InstallCompletions.scala | 12 ++++-------- .../scala/scala/cli/integration/SipScalaTests.scala | 13 +++++++++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/modules/cli/src/main/scala/scala/cli/ScalaCli.scala b/modules/cli/src/main/scala/scala/cli/ScalaCli.scala index b95912572a..3105d6d66c 100644 --- a/modules/cli/src/main/scala/scala/cli/ScalaCli.scala +++ b/modules/cli/src/main/scala/scala/cli/ScalaCli.scala @@ -4,6 +4,7 @@ import sun.misc.{Signal, SignalHandler} import java.io.{ByteArrayOutputStream, File, PrintStream} import java.nio.charset.StandardCharsets +import java.nio.file.Paths import java.util.Locale import scala.build.blooprifle.FailedToStartServerException @@ -21,7 +22,14 @@ object ScalaCli { // the Scala CLI native image, no need to manually load it. coursier.jniutils.LoadWindowsLibrary.assumeInitialized() - val progName = (new Argv0).get("scala-cli") + val progName = { + val argv0 = (new Argv0).get("scala-cli") + val last = Paths.get(argv0).getFileName.toString + last match { + case s".${name}.aux" => name // cs install binaries under .app-name.aux and add to the PATH + case _ => argv0 + } + } private def checkName(name: String) = { val baseProgName = if (Properties.isWin) progName.stripSuffix(".exe") else progName diff --git a/modules/cli/src/main/scala/scala/cli/commands/installcompletions/InstallCompletions.scala b/modules/cli/src/main/scala/scala/cli/commands/installcompletions/InstallCompletions.scala index 4249677fb4..7d19cf94bc 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/installcompletions/InstallCompletions.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/installcompletions/InstallCompletions.scala @@ -5,12 +5,13 @@ import caseapp.core.complete.{Bash, Zsh} import java.io.File import java.nio.charset.Charset +import java.nio.file.Paths import java.util import scala.build.Logger -import scala.cli.CurrentParams import scala.cli.commands.ScalaCommand import scala.cli.internal.{Argv0, ProfileFileUpdater} +import scala.cli.{CurrentParams, ScalaCli} object InstallCompletions extends ScalaCommand[InstallCompletionsOptions] { override def names = List( @@ -101,13 +102,8 @@ object InstallCompletions extends ScalaCommand[InstallCompletionsOptions] { def getName(name: Option[String]): String = name.getOrElse { - val baseName = (new Argv0).get(baseRunnerName) - val idx = baseName.lastIndexOf(File.separator) - val last = if (idx < 0) baseName else baseName.drop(idx + 1) - last match { - case s".${name}.aux" => name // // cs install binaries under .app-name.aux - case name => name - } + val progName = ScalaCli.progName + Paths.get(progName).getFileName.toString } def getFormat(format: Option[String]): Option[String] = diff --git a/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala b/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala index 013d77b5e8..a173ae7453 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala @@ -107,6 +107,19 @@ class SipScalaTests extends ScalaCliSuite { } } + if (TestUtil.isNativeCli) + test(s"usage instruction should point to scala when installing by cs") { // https://github.com/VirtusLab/scala-cli/issues/1662 + TestInputs.empty.fromRoot { + root => // cs install binaries under .app-name.aux and scala-cli should drop .aux from progName + val binary = "scala".prepareBinary(root) + val csBinaryName = root / ".scala.aux" + os.move(binary, csBinaryName) + val output = os.proc(csBinaryName, "test", "--usage").call(check = false).out.text().trim + val usageMsg = TestUtil.removeAnsiColors(output) + expect(usageMsg == "Usage: scala test [options]") + } + } + def testHelpOutput(binaryName: String): Unit = TestInputs.empty.fromRoot { root => val binary = binaryName.prepareBinary(root) for { helpOption <- Seq("help", "-help", "--help") } {