Commit 6efe0956 authored by bow's avatar bow

Merge branch 'feature-precommands' into 'develop'

Adding precommands



See merge request !450
parents a37fabe7 12d64615
......@@ -18,7 +18,7 @@ import java.io.{ File, FileInputStream, PrintWriter }
import java.security.MessageDigest
import nl.lumc.sasc.biopet.utils.Logging
import org.broadinstitute.gatk.utils.commandline.{ Gather, Input, Output }
import org.broadinstitute.gatk.utils.commandline.{ Input, Output }
import org.broadinstitute.gatk.utils.runtime.ProcessSettings
import org.ggf.drmaa.JobTemplate
......@@ -40,6 +40,8 @@ trait BiopetCommandLineFunction extends CommandLineResources { biopetFunction =>
def defaultRemoteCommand = "bash"
private val remoteCommand: String = config("remote_command", default = defaultRemoteCommand)
val preCommands: List[String] = config("pre_commands", default = Nil, freeVar = false)
private def changeScript(file: File): Unit = {
val lines = Source.fromFile(file).getLines().toList
val writer = new PrintWriter(file)
......@@ -111,7 +113,7 @@ trait BiopetCommandLineFunction extends CommandLineResources { biopetFunction =>
* Checks executable. Follow full CanonicalPath, checks if it is existing and do a md5sum on it to store in job report
*/
protected[core] def preProcessExecutable() {
val exe = BiopetCommandLineFunction.preProcessExecutable(executable)
val exe = BiopetCommandLineFunction.preProcessExecutable(executable, preCommands)
exe.path.foreach(executable = _)
addJobReportBinding("md5sum_exe", exe.md5.getOrElse("N/A"))
}
......@@ -219,7 +221,8 @@ trait BiopetCommandLineFunction extends CommandLineResources { biopetFunction =>
*/
override final def commandLine: String = {
preCmdInternal()
val cmd = cmdLine +
val cmd = preCommands.mkString("\n", "\n", "\n") +
cmdLine +
stdinFile.map(file => " < " + required(file.getAbsoluteFile)).getOrElse("") +
stdoutFile.map(file => " > " + required(file.getAbsoluteFile)).getOrElse("")
addJobReportBinding("command", cmd)
......@@ -240,13 +243,18 @@ object BiopetCommandLineFunction extends Logging {
private[core] val executableCache: mutable.Map[String, String] = mutable.Map()
case class Executable(path: Option[String], md5: Option[String])
def preProcessExecutable(executable: String): Executable = {
def preProcessExecutable(executable: String, pre_commands: List[String] = Nil): Executable = {
if (!BiopetCommandLineFunction.executableMd5Cache.contains(executable)) {
if (executable != null) {
if (!BiopetCommandLineFunction.executableCache.contains(executable)) {
try {
val buffer = new StringBuffer()
val cmd = Seq("which", executable)
val tempFile = File.createTempFile("which.", ".sh")
val writer = new PrintWriter(tempFile)
pre_commands.foreach(cmd => writer.println(cmd + " > /dev/null 2> /dev/null"))
writer.println(s"which $executable")
writer.close()
val cmd = Seq("bash", tempFile.getAbsolutePath)
val process = Process(cmd).run(ProcessLogger(buffer.append(_)))
if (process.exitValue == 0) {
val file = new File(buffer.toString)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment