# HG changeset patch # User wenzelm # Date 1614443154 -3600 # Node ID 87403fde8cc30780522e534378ed74a5ae3c6f63 # Parent 8ae2f8ebc37318139939931916218a641977d609 more direct make_directory in ML and Scala, but ssh still requires perl for Windows UNC paths (see a5dbad753552); diff -r 8ae2f8ebc373 -r 87403fde8cc3 src/Pure/General/file.ML --- a/src/Pure/General/file.ML Sat Feb 27 16:33:16 2021 +0100 +++ b/src/Pure/General/file.ML Sat Feb 27 17:25:54 2021 +0100 @@ -11,6 +11,7 @@ val bash_path: Path.T -> string val bash_paths: Path.T list -> string val bash_platform_path: Path.T -> string + val absolute_path: Path.T -> Path.T val full_path: Path.T -> Path.T -> Path.T val tmp_path: Path.T -> Path.T val exists: Path.T -> bool @@ -56,15 +57,16 @@ (* full_path *) +val absolute_path = + Path.expand #> (fn path => + if Path.is_absolute path then path + else Path.explode (ML_System.standard_path (OS.FileSys.getDir ())) + path); + fun full_path dir path = let val path' = Path.expand path; val _ = Path.is_current path' andalso error "Bad file specification"; - val path'' = dir + path'; - in - if Path.is_absolute path'' then path'' - else Path.explode (ML_System.standard_path (OS.FileSys.getDir ())) + path'' - end; + in absolute_path (dir + path') end; (* tmp_path *) diff -r 8ae2f8ebc373 -r 87403fde8cc3 src/Pure/System/isabelle_system.ML --- a/src/Pure/System/isabelle_system.ML Sat Feb 27 16:33:16 2021 +0100 +++ b/src/Pure/System/isabelle_system.ML Sat Feb 27 17:25:54 2021 +0100 @@ -78,13 +78,7 @@ fun rm_tree path = system_command ("rm -r -f " ^ File.bash_path path); fun make_directory path = - let - val _ = - if File.is_dir path then () - else - (bash ("perl -e \"use File::Path make_path; make_path('" ^ File.standard_path path ^ "');\""); - if File.is_dir path then () else error ("Failed to create directory: " ^ Path.print path)); - in path end; + (Scala.function "make_directory" (Path.implode (File.absolute_path path)); path); fun mkdir path = if File.is_dir path then () else OS.FileSys.mkDir (File.platform_path path); diff -r 8ae2f8ebc373 -r 87403fde8cc3 src/Pure/System/isabelle_system.scala --- a/src/Pure/System/isabelle_system.scala Sat Feb 27 16:33:16 2021 +0100 +++ b/src/Pure/System/isabelle_system.scala Sat Feb 27 17:25:54 2021 +0100 @@ -191,13 +191,17 @@ def make_directory(path: Path): Path = { - if (!path.is_dir) { - bash("perl -e \"use File::Path make_path; make_path('" + File.standard_path(path) + "');\"") - if (!path.is_dir) error("Failed to create directory: " + path.absolute) - } + try { Files.createDirectories(path.file.toPath) } + catch { case ERROR(_) => error("Failed to create directory: " + path.absolute) } path } + object Make_Directory extends Scala.Fun("make_directory") + { + val here = Scala_Project.here + def apply(arg: String): String = { make_directory(Path.explode(arg)); "" } + } + def new_directory(path: Path): Path = if (path.is_dir) error("Directory already exists: " + path.absolute) else make_directory(path) diff -r 8ae2f8ebc373 -r 87403fde8cc3 src/Pure/System/scala.scala --- a/src/Pure/System/scala.scala Sat Feb 27 16:33:16 2021 +0100 +++ b/src/Pure/System/scala.scala Sat Feb 27 17:25:54 2021 +0100 @@ -245,4 +245,5 @@ Doc.Doc_Names, Bash.Process, Bibtex.Check_Database, + Isabelle_System.Make_Directory, Isabelle_Tool.Isabelle_Tools)