annotate scripts/miscellaneous/mkdir.m @ 23220:092078913d54

maint: Merge stable to default.
author John W. Eaton <jwe@octave.org>
date Wed, 22 Feb 2017 12:58:07 -0500
parents ef4d915df748 3ac9f9ecfae5
children 194eb4bd202b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23219
3ac9f9ecfae5 maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents: 23083
diff changeset
1 ## Copyright (C) 2016-2017 Lachlan Andrew
21696
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
2 ## Copyright (C) 2012 Carnë Draug
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
3 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
4 ## This program is free software; you can redistribute it and/or modify it
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
5 ## under the terms of the GNU General Public License as published by
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
6 ## the Free Software Foundation; either version 3 of the License, or
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
7 ## (at your option) any later version.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
8 ##
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22299
diff changeset
9 ## Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22299
diff changeset
10 ## WITHOUT ANY WARRANTY; without even the implied warranty of
21696
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
12 ## GNU General Public License for more details.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
13 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
14 ## You should have received a copy of the GNU General Public License
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22299
diff changeset
15 ## along with Octave; see the file COPYING. If not, see
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22299
diff changeset
16 ## <http://www.gnu.org/licenses/>.
21696
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
17
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
18 ## -*- texinfo -*-
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
19 ## @deftypefn {} {} mkdir @var{dir}
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
20 ## @deftypefnx {} {} mkdir (@var{parent}, @var{dir})
22299
9fc91bb2aec3 doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents: 21937
diff changeset
21 ## @deftypefnx {} {[@var{status}, @var{msg}, @var{msgid}] =} mkdir (@dots{})
21696
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
22 ## Create a directory named @var{dir} in the directory @var{parent},
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
23 ## creating any intermediate directories if necessary.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
24 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
25 ## If @var{dir} is a relative path and no @var{parent} directory is specified
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
26 ## then the present working directory is used.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
27 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
28 ## If successful, @var{status} is 1, and @var{msg} and @var{msgid} are empty
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
29 ## strings (""). Otherwise, @var{status} is 0, @var{msg} contains a
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
30 ## system-dependent error message, and @var{msgid} contains a unique message
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
31 ## identifier.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
32 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
33 ## When creating a directory permissions will be set to @code{0777 - UMASK}.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
34 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
35 ## @seealso{rmdir, pwd, cd, umask}
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
36 ## @end deftypefn
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
37
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
38 ## There is/was a bug in gnulib's mkdir-p module under Windows.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
39 ## This file is a workaround until that is fixed and the fix incorporated
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
40 ## into Octave.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
41
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
42 function [status, msg, msgid] = mkdir (parent, dirname)
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
43
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
44 if (nargin < 1 || nargin > 2)
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
45 print_usage ();
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
46 endif
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
47
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
48 if (nargin == 1)
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
49 dirname = parent;
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
50
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
51 if (is_absolute_filename (dirname))
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
52 parent = "";
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
53 else
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
54 parent = [pwd(), filesep];
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
55 endif
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
56 else
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
57 parent = [parent, filesep];
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
58 endif
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
59
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
60 ## Move leading directory names from dirname to parent
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
61 [parent, dirname, ext] = fileparts ([parent, dirname]);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
62
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
63 [status, msg, msgid] = mkdir_recur (parent, [dirname, ext]);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
64
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
65 endfunction
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
66
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
67 ## Recursively make directories until parent/dirname can be created.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
68 function [status, msg, msgid] = mkdir_recur (parent, dirname)
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
69
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
70 status = 1;
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
71
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
72 if (! isdir (parent))
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
73 [grandparent, name, ext] = fileparts (parent);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
74 [status, msg, msgid] = mkdir_recur (grandparent, [name, ext]);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
75 endif
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
76
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
77 if (status)
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
78 [status, msg, msgid] = __mkdir__ (parent, dirname);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
79 endif
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
80
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
81 endfunction
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
82
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
83
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
84 %!test
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
85 %! dir1 = tempname ();
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
86 %! dir2 = "%_unlikely_name_%";
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
87 %! dir = fullfile (dir1, dir2);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
88 %! unwind_protect
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
89 %! status = mkdir (dir);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
90 %! assert (status);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
91 %! assert (isdir (dir));
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
92 %! unwind_protect_cleanup
21937
55f7de37b618 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 21696
diff changeset
93 %! confirm_recursive_rmdir (false, "local");
21696
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
94 %! rmdir (dir1, "s");
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
95 %! end_unwind_protect
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
96
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
97 ## Test input validation
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
98 %!error mkdir ()
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
99 %!error mkdir ("a", "b", "c")