Add a version command-line option (#99)
* [sbt] make name and version available within Scala Available as `thorp.BuildInfo._` * [core] ConfigOption Add Version option * [cli] ParseArgs add command-line options `-V` and `--version` * [core] ConfigQuery add showVersion query * [cli] Program shows version then exit * [cli] Main don't show "Done"
This commit is contained in:
parent
561966218c
commit
5df752047f
7 changed files with 30 additions and 8 deletions
|
@ -67,6 +67,11 @@ lazy val cli = (project in file("cli"))
|
||||||
.settings(applicationSettings)
|
.settings(applicationSettings)
|
||||||
.settings(commandLineParsing)
|
.settings(commandLineParsing)
|
||||||
.settings(testDependencies)
|
.settings(testDependencies)
|
||||||
|
.enablePlugins(BuildInfoPlugin)
|
||||||
|
.settings(
|
||||||
|
buildInfoKeys := Seq[BuildInfoKey](name, version),
|
||||||
|
buildInfoPackage := "thorp"
|
||||||
|
)
|
||||||
.settings(Seq(
|
.settings(Seq(
|
||||||
assemblyOption in assembly := (
|
assemblyOption in assembly := (
|
||||||
assemblyOption in assembly).value
|
assemblyOption in assembly).value
|
||||||
|
|
|
@ -13,7 +13,7 @@ object Main extends IOApp {
|
||||||
.guaranteeCase {
|
.guaranteeCase {
|
||||||
case Canceled => exitCaseLogger.warn("Interrupted")
|
case Canceled => exitCaseLogger.warn("Interrupted")
|
||||||
case Error(e) => exitCaseLogger.error(e.getMessage)
|
case Error(e) => exitCaseLogger.error(e.getMessage)
|
||||||
case Completed => exitCaseLogger.info("Done")
|
case Completed => IO.unit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,9 @@ object ParseArgs {
|
||||||
OParser.sequence(
|
OParser.sequence(
|
||||||
programName("thorp"),
|
programName("thorp"),
|
||||||
head("thorp"),
|
head("thorp"),
|
||||||
|
opt[Unit]('V', "version")
|
||||||
|
.action((_, cos) => ConfigOption.Version :: cos)
|
||||||
|
.text("Show version"),
|
||||||
opt[String]('s', "source")
|
opt[String]('s', "source")
|
||||||
.action((str, cos) => ConfigOption.Source(Paths.get(str)) :: cos)
|
.action((str, cos) => ConfigOption.Source(Paths.get(str)) :: cos)
|
||||||
.text("Source directory to sync to destination"),
|
.text("Source directory to sync to destination"),
|
||||||
|
|
|
@ -11,13 +11,17 @@ trait Program {
|
||||||
|
|
||||||
def apply(cliOptions: Seq[ConfigOption]): IO[ExitCode] = {
|
def apply(cliOptions: Seq[ConfigOption]): IO[ExitCode] = {
|
||||||
implicit val logger: Logger = new PrintLogger()
|
implicit val logger: Logger = new PrintLogger()
|
||||||
for {
|
if (ConfigQuery.showVersion(cliOptions)) IO {
|
||||||
storageService <- defaultStorageService
|
println(s"Thorp v${thorp.BuildInfo.version}")
|
||||||
actions <- Synchronise(storageService, defaultHashService, cliOptions).valueOrF(handleErrors)
|
ExitCode.Success
|
||||||
events <- handleActions(UnversionedMirrorArchive.default(storageService), actions)
|
} else
|
||||||
_ <- storageService.shutdown
|
for {
|
||||||
_ <- SyncLogging.logRunFinished(events)
|
storageService <- defaultStorageService
|
||||||
} yield ExitCode.Success
|
actions <- Synchronise(storageService, defaultHashService, cliOptions).valueOrF(handleErrors)
|
||||||
|
events <- handleActions(UnversionedMirrorArchive.default(storageService), actions)
|
||||||
|
_ <- storageService.shutdown
|
||||||
|
_ <- SyncLogging.logRunFinished(events)
|
||||||
|
} yield ExitCode.Success
|
||||||
}
|
}
|
||||||
|
|
||||||
private def handleErrors(implicit logger: Logger): List[String] => IO[Stream[Action]] = {
|
private def handleErrors(implicit logger: Logger): List[String] => IO[Stream[Action]] = {
|
||||||
|
|
|
@ -10,6 +10,9 @@ sealed trait ConfigOption {
|
||||||
}
|
}
|
||||||
|
|
||||||
object ConfigOption {
|
object ConfigOption {
|
||||||
|
case object Version extends ConfigOption {
|
||||||
|
override def update(config: Config): Config = config
|
||||||
|
}
|
||||||
case class Source(path: Path) extends ConfigOption {
|
case class Source(path: Path) extends ConfigOption {
|
||||||
override def update(config: Config): Config = config.copy(source = path.toFile)
|
override def update(config: Config): Config = config.copy(source = path.toFile)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,12 @@ package net.kemitix.thorp.core
|
||||||
|
|
||||||
trait ConfigQuery {
|
trait ConfigQuery {
|
||||||
|
|
||||||
|
def showVersion(configOptions: Seq[ConfigOption]): Boolean =
|
||||||
|
configOptions.exists {
|
||||||
|
case ConfigOption.Version => true
|
||||||
|
case _ => false
|
||||||
|
}
|
||||||
|
|
||||||
def ignoreUserOptions(configOptions: Seq[ConfigOption]): Boolean =
|
def ignoreUserOptions(configOptions: Seq[ConfigOption]): Boolean =
|
||||||
configOptions.exists {
|
configOptions.exists {
|
||||||
case ConfigOption.IgnoreUserOptions => true
|
case ConfigOption.IgnoreUserOptions => true
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.3.2")
|
addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.3.2")
|
||||||
addSbtPlugin("com.geirsson" % "sbt-ci-release" % "1.2.6")
|
addSbtPlugin("com.geirsson" % "sbt-ci-release" % "1.2.6")
|
||||||
|
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.9.0")
|
Loading…
Reference in a new issue