Skip to content

Commit a9ad8b7

Browse files
committed
Add version of Scala to the output of version command
1 parent d9a1118 commit a9ad8b7

File tree

10 files changed

+86
-16
lines changed

10 files changed

+86
-16
lines changed

modules/cli-options/src/main/scala/scala/cli/commands/VersionOptions.scala

+7-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@ import caseapp._
66
@HelpMessage("Print `scala-cli` version")
77
final case class VersionOptions(
88
@Recurse
9-
verbosity: VerbosityOptions = VerbosityOptions()
9+
verbosity: VerbosityOptions = VerbosityOptions(),
10+
@HelpMessage("Show only plain scala-cli version")
11+
@Name("cli")
12+
cliVersion: Boolean = false,
13+
@HelpMessage("Show only plain scala version")
14+
@Name("scala")
15+
scalaVersion: Boolean = false
1016
)
1117
// format: on
1218

modules/cli/src/main/scala/scala/cli/ScalaCliCommands.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class ScalaCliCommands(
1818
isSipScala: Boolean
1919
) extends CommandsEntryPoint {
2020

21-
lazy val actualDefaultCommand = new Default(help)
21+
lazy val actualDefaultCommand = new Default(help, isSipScala)
2222

2323
// for debugging purposes - allows to run the scala-cli-signing binary from the Scala CLI JVM launcher
2424
private lazy val pgpUseBinaryCommands =
@@ -64,7 +64,7 @@ class ScalaCliCommands(
6464
Uninstall,
6565
UninstallCompletions,
6666
Update,
67-
Version
67+
new Version(isSipScala = isSipScala)
6868
) ++ (if (pgpUseBinaryCommands) Nil else pgpCommands.allScalaCommands.toSeq) ++
6969
(if (pgpUseBinaryCommands) pgpBinaryCommands.allScalaCommands.toSeq else Nil)
7070

modules/cli/src/main/scala/scala/cli/commands/About.scala

+1-6
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,7 @@ class About(isSipScala: Boolean) extends ScalaCommand[AboutOptions] {
1111

1212
def run(options: AboutOptions, args: RemainingArgs): Unit = {
1313
CurrentParams.verbosity = options.verbosity.verbosity
14-
val version = Constants.version
15-
val detailedVersionOpt = Constants.detailedVersion.filter(_ != version)
16-
val appName =
17-
if (isSipScala) "Scala command"
18-
else "Scala CLI"
19-
println(s"$appName version $version" + detailedVersionOpt.fold("")(" (" + _ + ")"))
14+
println(Version.versionInfo(isSipScala))
2015
val newestScalaCliVersion = Update.newestScalaCliVersion(options.ghToken.map(_.get()))
2116
val isOutdated = CommandUtils.isOutOfDateVersion(
2217
newestScalaCliVersion,

modules/cli/src/main/scala/scala/cli/commands/Default.scala

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import scala.build.internal.Constants
77
import scala.cli.{CurrentParams, ScalaCliHelp}
88

99
class Default(
10-
actualHelp: => RuntimeCommandsHelp
10+
actualHelp: => RuntimeCommandsHelp,
11+
isSipScala: Boolean
1112
) extends ScalaCommand[DefaultOptions] {
1213

1314
private def defaultHelp: String = actualHelp.help(ScalaCliHelp.helpFormat)
@@ -30,7 +31,7 @@ class Default(
3031
def run(options: DefaultOptions, args: RemainingArgs): Unit = {
3132
CurrentParams.verbosity = options.runOptions.shared.logging.verbosity
3233
if (options.version)
33-
println(Constants.version)
34+
println(Version.versionInfo(isSipScala))
3435
else if (anyArgs)
3536
Run.run(
3637
options.runOptions,

modules/cli/src/main/scala/scala/cli/commands/InstallHome.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ object InstallHome extends ScalaCommand[InstallHomeOptions] {
5151
val newScalaCliBinPath = os.Path(options.scalaCliBinaryPath, os.pwd)
5252

5353
val newVersion: String =
54-
os.proc(newScalaCliBinPath, "version").call(cwd = os.pwd).out.text().trim
54+
os.proc(newScalaCliBinPath, "version", "--cli-version").call(cwd = os.pwd).out.text().trim
5555

5656
// Backward compatibility - previous versions not have the `--version` parameter
5757
val oldVersion: String =
5858
if (os.isFile(destBinPath)) {
59-
val res = os.proc(destBinPath, "version").call(cwd = os.pwd, check = false)
59+
val res = os.proc(destBinPath, "version", "--cli-version").call(cwd = os.pwd, check = false)
6060
if (res.exitCode == 0)
6161
res.out.text().trim
6262
else

modules/cli/src/main/scala/scala/cli/commands/Update.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ object Update extends ScalaCommand[UpdateOptions] {
9595
}
9696

9797
private def getCurrentVersion(scalaCliBinPath: os.Path): String = {
98-
val res = os.proc(scalaCliBinPath, "version").call(cwd = os.pwd, check = false)
98+
val res = os.proc(scalaCliBinPath, "version", "--cli-version").call(cwd = os.pwd, check = false)
9999
if (res.exitCode == 0)
100100
res.out.text().trim
101101
else

modules/cli/src/main/scala/scala/cli/commands/Version.scala

+18-2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,26 @@ import caseapp._
55
import scala.build.internal.Constants
66
import scala.cli.CurrentParams
77

8-
object Version extends ScalaCommand[VersionOptions] {
8+
class Version(isSipScala: Boolean) extends ScalaCommand[VersionOptions] {
99
override def group = "Miscellaneous"
1010
def run(options: VersionOptions, args: RemainingArgs): Unit = {
1111
CurrentParams.verbosity = options.verbosity.verbosity
12-
println(Constants.version)
12+
if (options.cliVersion)
13+
println(Constants.version)
14+
else if (options.scalaVersion)
15+
println(Constants.defaultScalaVersion)
16+
else
17+
println(Version.versionInfo(isSipScala))
1318
}
1419
}
20+
21+
object Version {
22+
def versionInfo(isSipScala: Boolean) =
23+
val version = Constants.version
24+
val detailedVersionOpt = Constants.detailedVersion.filter(_ != version).fold("")(" (" + _ + ")")
25+
val appName =
26+
if (isSipScala) "Scala code runner"
27+
else "Scala CLI"
28+
s"""$appName version: $version$detailedVersionOpt
29+
|Scala version (default): ${Constants.defaultScalaVersion}""".stripMargin
30+
}

modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala

+31
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,35 @@ class SipScalaTests extends ScalaCliSuite {
3939
noDirectoriesCommandTest("scala-cli-sip")
4040
}
4141
}
42+
43+
def runVersionCommand(binaryName: String) =
44+
TestInputs.empty.fromRoot { root =>
45+
val cliPath = os.Path(TestUtil.cliPath, os.pwd)
46+
val ext = if (Properties.isWin) ".exe" else ""
47+
val newCliPath = root / s"$binaryName$ext"
48+
os.copy(cliPath, newCliPath)
49+
50+
for { versionOption <- Seq("version", "-version", "--version") } {
51+
val version = os.proc(newCliPath, versionOption).call(check = false)
52+
assert(
53+
version.exitCode == 0,
54+
clues(version, version.out.text(), version.err.text(), version.exitCode)
55+
)
56+
val expectedLauncherVersion =
57+
if (binaryName == "scala") "Scala code runner version:"
58+
else "Scala CLI version:"
59+
expect(version.out.text().contains(expectedLauncherVersion))
60+
expect(version.out.text().contains(s"Scala version (default): ${Constants.defaultScala}"))
61+
}
62+
}
63+
64+
if (TestUtil.isNativeCli) {
65+
test("version command print detailed info run as scala") {
66+
runVersionCommand("scala")
67+
}
68+
69+
test("version command print detailed info run as scala-cli") {
70+
runVersionCommand("scala-cli")
71+
}
72+
}
4273
}

website/docs/reference/cli-options.md

+20
Original file line numberDiff line numberDiff line change
@@ -1973,6 +1973,26 @@ Interactive mode
19731973

19741974
Enable actionable diagnostics
19751975

1976+
## Version options
1977+
1978+
Available in commands:
1979+
- [`version`](./commands.md#version)
1980+
1981+
1982+
<!-- Automatically generated, DO NOT EDIT MANUALLY -->
1983+
1984+
#### `--cli-version`
1985+
1986+
Aliases: `--cli`
1987+
1988+
Show only plain scala-cli version
1989+
1990+
#### `--scala-version`
1991+
1992+
Aliases: `--scala`
1993+
1994+
Show only plain scala version
1995+
19761996
## Watch options
19771997

19781998
Available in commands:

website/docs/reference/commands.md

+1
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@ Print `scala-cli` version
475475
476476
Accepts options:
477477
- [verbosity](./cli-options.md#verbosity-options)
478+
- [version](./cli-options.md#version-options)
478479
479480
## Hidden commands
480481

0 commit comments

Comments
 (0)