# HG changeset patch # User John W. Eaton # Date 1632494809 14400 # Node ID 54520422f0564253f663f37e75ae984af6451077 # Parent 351dbe4da930baec92dc0f6031db4c95b8ab3343 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. diff -r 351dbe4da930 -r 54520422f056 scripts/miscellaneous/mkdir.m --- 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]); diff -r 351dbe4da930 -r 54520422f056 test/system.tst --- 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 mkdir ("foo", 1, 2) %!error 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);