annotate scripts/miscellaneous/mkdir.m @ 21937:55f7de37b618

maint: Strip trailing whitespace from source files.
author John W. Eaton <jwe@octave.org>
date Fri, 17 Jun 2016 05:52:21 -0400
parents b8c05cc524ef
children 9fc91bb2aec3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21696
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
1 ## Copyright (C) 2016 Lachlan Andrew
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 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
9 ## This program is distributed in the hope that it will be useful,
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
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
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
15 ## along with this program. If not, see <http://www.gnu.org/licenses/>.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
16
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
17 ## -*- texinfo -*-
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
18 ## @deftypefn {} {} mkdir @var{dir}
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
19 ## @deftypefnx {} {} mkdir (@var{parent}, @var{dir})
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
20 ## @deftypefnx {} {[@var{status}, @var{msg}, @var{msgid}] =} mkdir (...)
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
21 ## 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
22 ## 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
23 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
24 ## 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
25 ## 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
26 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
27 ## 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
28 ## 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
29 ## 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
30 ## identifier.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
31 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
32 ## 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
33 ##
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
34 ## @seealso{rmdir, pwd, cd, umask}
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
35 ## @end deftypefn
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
36
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
37 ## 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
38 ## 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
39 ## into Octave.
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
40
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
41 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
42
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
43 if (nargin < 1 || nargin > 2)
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
44 print_usage ();
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
45 endif
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
46
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
47 if (nargin == 1)
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
48 dirname = parent;
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
49
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
50 if (is_absolute_filename (dirname))
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
51 parent = "";
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
52 else
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
53 parent = [pwd(), filesep];
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
54 endif
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
55 else
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
56 parent = [parent, filesep];
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
57 endif
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
58
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
59 ## 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
60 [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
61
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
62 [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
63
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
64 endfunction
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
65
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
66 ## 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
67 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
68
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
69 status = 1;
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
70
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
71 if (! isdir (parent))
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
72 [grandparent, name, ext] = fileparts (parent);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
73 [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
74 endif
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
75
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
76 if (status)
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
77 [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
78 endif
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
79
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
80 endfunction
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
81
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 %!test
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
84 %! dir1 = tempname ();
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
85 %! dir2 = "%_unlikely_name_%";
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
86 %! dir = fullfile (dir1, dir2);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
87 %! unwind_protect
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
88 %! status = mkdir (dir);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
89 %! assert (status);
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
90 %! assert (isdir (dir));
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
91 %! unwind_protect_cleanup
21937
55f7de37b618 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 21696
diff changeset
92 %! 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
93 %! rmdir (dir1, "s");
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
94 %! end_unwind_protect
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
95
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
96 ## Test input validation
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
97 %!error mkdir ()
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
98 %!error mkdir ("a", "b", "c")
b8c05cc524ef mkdir.m: new script to implement recursive mkdir (bug #30650).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
diff changeset
99