changeset 30211:54520422f056

simplify mkdir and allow it to create parent directory (bug #61166) * mkdir.m: Always perform tilde expansion on parent. If both parent and dirname are supplied, use fullfile to concatentate with dirname. Recursively create all directories. * system.tst: New test.
author John W. Eaton <jwe@octave.org>
date Fri, 24 Sep 2021 10:46:49 -0400
parents 351dbe4da930
children c27b9ba4c9bd
files scripts/miscellaneous/mkdir.m test/system.tst
diffstat 2 files changed, 43 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/miscellaneous/mkdir.m	Mon Sep 27 12:59:34 2021 +0200
+++ b/scripts/miscellaneous/mkdir.m	Fri Sep 24 10:46:49 2021 -0400
@@ -54,20 +54,18 @@
     print_usage ();
   endif
 
+  parent = tilde_expand (parent);
+
   if (nargin == 1)
     dirname = parent;
-
-    if (is_absolute_filename (tilde_expand (dirname)))
-      parent = "";
-    else
-      parent = [pwd(), filesep];
-    endif
   else
-    parent = [parent, filesep];
+    dirname = fullfile (parent, dirname);
   endif
 
+  dirname = make_absolute_filename (dirname);
+
   ## Move leading directory names from dirname to parent
-  [parent, dirname, ext] = fileparts ([parent, dirname]);
+  [parent, dirname, ext] = fileparts (dirname);
 
   [sts, msg, msgid] = mkdir_recur (parent, [dirname, ext]);
 
--- a/test/system.tst	Mon Sep 27 12:59:34 2021 +0200
+++ b/test/system.tst	Fri Sep 24 10:46:49 2021 -0400
@@ -101,6 +101,43 @@
 %!error <called with too many inputs> mkdir ("foo", 1, 2)
 %!error <Invalid call to rmdir> rmdir ()
 
+%!test <61166>
+%! crr = confirm_recursive_rmdir ();
+%! unwind_protect
+%!   confirm_recursive_rmdir (0);
+%!   tmp_dir = tempname ();
+%!   e1 = mkdir (tmp_dir);
+%!   ## parent dir that exists
+%!   mkdir (tmp_dir, "d1");
+%!   mkdir (tmp_dir, "d2/foo");
+%!   mkdir (tmp_dir, "d3/foo.bar");
+%!   assert (isfolder (fullfile (tmp_dir, "d1")));
+%!   assert (isfolder (fullfile (tmp_dir, "d2/foo")));
+%!   assert (isfolder (fullfile (tmp_dir, "d3/foo.bar")));
+%!   ## parent dir that does not exist
+%!   d4 = fullfile (tmp_dir, "d4");
+%!   d5 = fullfile (tmp_dir, "d5");
+%!   d6 = fullfile (tmp_dir, "d6");
+%!   mkdir (d4, "foo");
+%!   mkdir (d5, "foo/bar");
+%!   mkdir (d6, "foo/bar.baz");
+%!   assert (isfolder (fullfile (d4, "foo")));
+%!   assert (isfolder (fullfile (d5, "foo/bar")));
+%!   assert (isfolder (fullfile (d6, "foo/bar.baz")));
+%!   d7 = fullfile (tmp_dir, "d7/foo");
+%!   d8 = fullfile (tmp_dir, "d8/foo/bar");
+%!   d9 = fullfile (tmp_dir, "d9/foo/bar.baz");
+%!   mkdir (d7);
+%!   mkdir (d8);
+%!   mkdir (d9);
+%!   assert (isfolder (d7));
+%!   assert (isfolder (d8));
+%!   assert (isfolder (d9));
+%! unwind_protect_cleanup
+%!   rmdir (tmp_dir, "s");
+%!   confirm_recursive_rmdir (crr);
+%! end_unwind_protect
+
 %!test
 %! crr = confirm_recursive_rmdir ();
 %! confirm_recursive_rmdir (0);