diff options
author | Jan Christopher Vogt <oss.nsp@cvogt.org> | 2017-06-15 23:15:37 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-15 23:15:37 -0400 |
commit | 494c302e738529ff2113d25910398d7b2b7a196c (patch) | |
tree | d67c88d10906647c7fd56229e6e56121a9107744 /stage2/BasicBuild.scala | |
parent | 618711302b7ea29de651c1f771eb3160e236b339 (diff) | |
parent | 09051773461b98d374d1b46dd0a2caa57768ab30 (diff) | |
download | cbt-494c302e738529ff2113d25910398d7b2b7a196c.tar.gz cbt-494c302e738529ff2113d25910398d7b2b7a196c.tar.bz2 cbt-494c302e738529ff2113d25910398d7b2b7a196c.zip |
Merge pull request #523 from cvogt/restart
sbt-revolver like restart feature
Diffstat (limited to 'stage2/BasicBuild.scala')
-rw-r--r-- | stage2/BasicBuild.scala | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/stage2/BasicBuild.scala b/stage2/BasicBuild.scala index 0bdbad7..3a9c958 100644 --- a/stage2/BasicBuild.scala +++ b/stage2/BasicBuild.scala @@ -319,4 +319,45 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with SbtDep final def crossScalaVersionsArray = Array(scalaVersion) def publish: Seq[URL] = Seq() + + def fork = false + + def runForked: ExitCode = { + val ( pid, waitFor, destroy ) = runForkedHandles + waitFor() + } + + /** currently only produces output when run via cbt direct */ + def restart: Int = { + val pid = restart( mainClassOrFail.getName, context.args ) + System.err.print("started process with pid: ") + pid + } + + def restart( className: String, args: Seq[String] ): Int = { + val ( pid, waitFor, destroy ) = runForked( mainClassOrFail.getName, context.args ) + lib.addProcessIdToKillList( context.cwd, pid ) + pid + } + + protected def runForkedHandles = runForked( mainClassOrFail.getName, context.args ) + + def runForked( className: String, args: Seq[String] ): ( Int, () => ExitCode, () => ExitCode ) = + lib.runMainForked( + className, + args, + classpath.string, + Some( context.workingDirectory ), + NailgunLauncher.runningViaNailgun.option( + lib.getOutErrIn match { case (l,r, in) => (l.get,r.get, in) } + ) + ) + + override def runMain( className: String, args: Seq[String] ): ExitCode = { + if(fork){ + runForked(className, args)._2() + } else { + super.runMain( className, args ) + } + } } |