Skip to content

Commit d2b57a8

Browse files
authored
Fix --tmp-outdir-prefix for CommandLineTools. (#244)
* Fix --tmp-outdir-prefix for CommandLineTools. Clean up initialization of args.tmp_outdir_prefix, args.tmpdir_prefix, and args.cachedir.
1 parent 20176ff commit d2b57a8

File tree

1 file changed

+16
-21
lines changed

1 file changed

+16
-21
lines changed

cwltool/main.py

+16-21
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ def output_callback(out, processStatus):
206206

207207
output_dirs = set()
208208
finaloutdir = kwargs.get("outdir")
209-
kwargs["outdir"] = tempfile.mkdtemp()
209+
kwargs["outdir"] = tempfile.mkdtemp(prefix=kwargs["tmp_outdir_prefix"]) if kwargs.get("tmp_outdir_prefix") else tempfile.mkdtemp()
210210
output_dirs.add(kwargs["outdir"])
211211

212212
jobReqs = None
@@ -678,20 +678,22 @@ def main(argsl=None, # type: List[str]
678678
if isinstance(tool, int):
679679
return tool
680680

681-
if args.tmp_outdir_prefix != 'tmp':
682-
# Use user defined temp directory (if it exists)
683-
setattr(args, 'tmp_outdir_prefix',
684-
os.path.abspath(args.tmp_outdir_prefix))
685-
if not os.path.exists(args.tmp_outdir_prefix):
686-
_logger.error("Intermediate output directory prefix doesn't exist.")
687-
return 1
681+
for dirprefix in ("tmpdir_prefix", "tmp_outdir_prefix", "cachedir"):
682+
if getattr(args, dirprefix) and getattr(args, dirprefix) != 'tmp':
683+
sl = "/" if getattr(args, dirprefix).endswith("/") or dirprefix == "cachedir" else ""
684+
setattr(args, dirprefix,
685+
os.path.abspath(getattr(args, dirprefix))+sl)
686+
if not os.path.exists(os.path.dirname(getattr(args, dirprefix))):
687+
try:
688+
os.makedirs(os.path.dirname(getattr(args, dirprefix)))
689+
except Exception as e:
690+
_logger.error("Failed to create directory: %s", e)
691+
return 1
688692

689-
if args.tmpdir_prefix != 'tmp':
690-
# Use user defined prefix (if the folder exists)
691-
setattr(args, 'tmpdir_prefix', os.path.abspath(args.tmpdir_prefix))
692-
if not os.path.exists(args.tmpdir_prefix):
693-
_logger.error("Temporary directory prefix doesn't exist.")
694-
return 1
693+
if args.cachedir:
694+
if args.move_outputs == "move":
695+
setattr(args, 'move_outputs', "copy")
696+
setattr(args, "tmp_outdir_prefix", args.cachedir)
695697

696698
if job_order_object is None:
697699
job_order_object = load_job_order(args, tool, stdin,
@@ -703,14 +705,7 @@ def main(argsl=None, # type: List[str]
703705
if isinstance(job_order_object, int):
704706
return job_order_object
705707

706-
if args.cachedir:
707-
setattr(args, 'cachedir', os.path.abspath(args.cachedir))
708-
if args.move_outputs == "move":
709-
setattr(args, 'move_outputs', "copy")
710-
711708
try:
712-
setattr(args, 'tmp_outdir_prefix',
713-
args.cachedir if args.cachedir else args.tmp_outdir_prefix)
714709
setattr(args, 'basedir', job_order_object[1])
715710
del args.workflow
716711
del args.job_order

0 commit comments

Comments
 (0)