All Downloads are FREE. Search and download functionalities are using the official Maven repository.

bloop.cli.Default.scala Maven / Gradle / Ivy

package bloop.cli

import caseapp.core.RemainingArgs

import bloop.cli.options.DefaultOptions
import bloop.rifle.BloopThreads
import bloop.rifle.BloopRifle
import bloop.rifle.internal.Operations
import scala.concurrent.Await
import scala.concurrent.duration.Duration
import caseapp.core.app.Command

object Default extends Command[DefaultOptions] {
  override def stopAtFirstUnrecognized = true

  def run(options: DefaultOptions, args: RemainingArgs): Unit = {

    val threads = BloopThreads.create()
    val logger = options.logging.logger
    val bloopRifleConfig = options.bloopRifleConfig

    val isRunning = BloopRifle.check(bloopRifleConfig, logger.bloopRifleLogger)

    if (isRunning)
      logger.debug("Found running Bloop server")
    else {
      logger.debug("No running Bloop server found, starting one")
      val f = BloopRifle.startServer(
        bloopRifleConfig,
        threads.startServerChecks,
        logger.bloopRifleLogger,
        bloopRifleConfig.retainedBloopVersion.version.raw,
        bloopRifleConfig.javaPath
      )
      Await.result(f, Duration.Inf)
      logger.message("Bloop server started.")
    }

    val args0 = args.all

    args0 match {
      case Seq() =>
        // FIXME Give more details?
        logger.message("Bloop server is running.")
      case Seq(cmd, args @ _*) =>
        val assumeTty = System.console() != null
        val cwd = os.pwd.wrapped
        val retCode = Operations.run(
          command = cmd,
          args = args.toArray,
          workingDir = cwd,
          address = bloopRifleConfig.address,
          inOpt = Some(System.in),
          out = System.out,
          err = System.err,
          logger = logger.bloopRifleLogger,
          assumeInTty = assumeTty,
          assumeOutTty = assumeTty,
          assumeErrTty = assumeTty
        )
        if (retCode == 0)
          logger.debug(s"Bloop command $cmd ran successfully (return code 0)")
        else {
          logger.debug(
            s"Got return code $retCode from Bloop server when running $cmd, exiting with it"
          )
          sys.exit(retCode)
        }
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy