annotate scripts/miscellaneous/unpack.m @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents 3915633fdfd0
children 6bcc5e6d77fe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ########################################################################
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 ##
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30115
diff changeset
3 ## Copyright (C) 2006-2022 The Octave Project Developers
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 27569
diff changeset
4 ##
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 ## See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 ## distribution or <https://octave.org/copyright/>.
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
7 ##
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
8 ## This file is part of Octave.
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
9 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24096
diff changeset
10 ## Octave is free software: you can redistribute it and/or modify it
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
11 ## under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24096
diff changeset
12 ## the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22511
diff changeset
13 ## (at your option) any later version.
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
14 ##
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
15 ## Octave is distributed in the hope that it will be useful, but
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22511
diff changeset
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22511
diff changeset
18 ## GNU General Public License for more details.
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
19 ##
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
20 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6546
diff changeset
21 ## along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24096
diff changeset
22 ## <https://www.gnu.org/licenses/>.
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 ##
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ########################################################################
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
25
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
26 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20755
diff changeset
27 ## @deftypefn {} {@var{files} =} unpack (@var{file})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20755
diff changeset
28 ## @deftypefnx {} {@var{files} =} unpack (@var{file}, @var{dir})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20755
diff changeset
29 ## @deftypefnx {} {@var{files} =} unpack (@var{file}, @var{dir}, @var{filetype})
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
30 ## Unpack the archive @var{file} based on its extension to the directory
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
31 ## @var{dir}.
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
32 ##
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
33 ## If @var{file} is a list of strings, then each file is unpacked
20164
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19951
diff changeset
34 ## individually. Shell wildcards in the filename such as @samp{*} or
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19951
diff changeset
35 ## @samp{?} are accepted and expanded.
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
36 ##
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
37 ## If @var{dir} is not specified or is empty (@code{[]}), it defaults to the
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
38 ## current directory. If a directory is in the file list, then @var{filetype}
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
39 ## must also be specified.
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
40 ##
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
41 ## The specific archive filetype is inferred from the extension of the file.
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
42 ## The @var{filetype} may also be specified directly using a string which
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
43 ## corresponds to a known extension.
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
44 ##
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
45 ## Valid filetype extensions:
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
46 ##
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
47 ## @table @code
25003
2365c2661b3c doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents: 24662
diff changeset
48 ## @item @nospell{bz}
2365c2661b3c doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents: 24662
diff changeset
49 ## @itemx @nospell{bz2}
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
50 ## bzip archive
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
51 ##
25003
2365c2661b3c doc: Spellcheck documentation ahead of 4.4 release.
Rik <rik@octave.org>
parents: 24662
diff changeset
52 ## @item @nospell{gz}
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
53 ## gzip archive
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
54 ##
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
55 ## @item tar
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
56 ## tar archive
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
57 ##
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
58 ## @item tarbz
19235
cac9d4c49522 unpack.m: Fix Texinfo error in docstring.
Rik <rik@octave.org>
parents: 19234
diff changeset
59 ## @itemx tarbz2
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
60 ## @itemx tbz
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
61 ## @itemx tbz2
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
62 ## tar + bzip archive
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
63 ##
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
64 ## @item targz
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
65 ## @itemx tgz
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
66 ## tar + gzip archive
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
67 ##
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
68 ## @item z
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
69 ## compress archive
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
70 ##
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
71 ## @item zip
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
72 ## zip archive
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
73 ## @end table
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
74 ##
12642
f96b9b9f141b doc: Periodic grammarcheck and spellcheck of documentation.
Rik <octave@nomad.inbox5.com>
parents: 12500
diff changeset
75 ## The optional return value is a list of @var{files} unpacked.
19243
91a6f06c5052 Overhaul gzip.m and gunzip.m
Rik <rik@octave.org>
parents: 19235
diff changeset
76 ## @seealso{bunzip2, gunzip, unzip, untar, bzip2, gzip, zip, tar}
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
77 ## @end deftypefn
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
78
26142
b9d72a2dac8f Accept a cell array of strings to uncompress functions (bug #55102).
Rik <rik@octave.org>
parents: 25948
diff changeset
79 function filelist = unpack (file, dir = [], filetype = "")
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
80
28789
28de41192f3c Eliminate unneeded verification of nargin, nargout in m-files.
Rik <rik@octave.org>
parents: 28087
diff changeset
81 if (nargin < 1)
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
82 print_usage ();
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
83 endif
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
84
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
85 if (! ischar (file) && ! iscellstr (file))
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
86 error ("unpack: FILE must be a string or cell array of strings");
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
87 endif
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
88
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
89 ## Convert char arrays to cell strings to simplify further processing
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
90 if (ischar (file))
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
91 file = cellstr (file);
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
92 endif
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
93 if (numel (file) == 1)
25885
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
94 ## FIXME: The code below is not a perfect test for a URL
20748
bb219f1d92db Fix indexing error in cset 69aeef6736df.
Rik <rik@octave.org>
parents: 20746
diff changeset
95 if (isempty (strfind (file{1}, "://")))
29093
1c212b36a35e Use "__wglob__" instead of "glob" on Windows (bug #59287).
Markus Mützel <markus.muetzel@gmx.de>
parents: 28896
diff changeset
96 if (ispc ())
1c212b36a35e Use "__wglob__" instead of "glob" on Windows (bug #59287).
Markus Mützel <markus.muetzel@gmx.de>
parents: 28896
diff changeset
97 gfile = __wglob__ (file);
1c212b36a35e Use "__wglob__" instead of "glob" on Windows (bug #59287).
Markus Mützel <markus.muetzel@gmx.de>
parents: 28896
diff changeset
98 else
1c212b36a35e Use "__wglob__" instead of "glob" on Windows (bug #59287).
Markus Mützel <markus.muetzel@gmx.de>
parents: 28896
diff changeset
99 gfile = glob (file);
1c212b36a35e Use "__wglob__" instead of "glob" on Windows (bug #59287).
Markus Mützel <markus.muetzel@gmx.de>
parents: 28896
diff changeset
100 endif
20746
69aeef6736df unpack.m: Restore ability for input to be a URL (bug #46504).
Rik <rik@octave.org>
parents: 20713
diff changeset
101 if (isempty (gfile))
22760
c4d80b9d2898 maint: Capitalize variable names appearing in error() messages of m-files.
Rik <rik@octave.org>
parents: 22755
diff changeset
102 error ('unpack: FILE "%s" not found', file{1});
20746
69aeef6736df unpack.m: Restore ability for input to be a URL (bug #46504).
Rik <rik@octave.org>
parents: 20713
diff changeset
103 else
69aeef6736df unpack.m: Restore ability for input to be a URL (bug #46504).
Rik <rik@octave.org>
parents: 20713
diff changeset
104 file = gfile;
69aeef6736df unpack.m: Restore ability for input to be a URL (bug #46504).
Rik <rik@octave.org>
parents: 20713
diff changeset
105 endif
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
106 endif
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
107 endif
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
108
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
109 ## Recursively unpack cellstr arrays one file at a time
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
110 if (numel (file) > 1)
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
111 files = {};
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
112 for i = 1:numel (file)
26142
b9d72a2dac8f Accept a cell array of strings to uncompress functions (bug #55102).
Rik <rik@octave.org>
parents: 25948
diff changeset
113 if (! isempty (dir))
b9d72a2dac8f Accept a cell array of strings to uncompress functions (bug #55102).
Rik <rik@octave.org>
parents: 25948
diff changeset
114 tmpfiles = unpack (file{i}, dir);
b9d72a2dac8f Accept a cell array of strings to uncompress functions (bug #55102).
Rik <rik@octave.org>
parents: 25948
diff changeset
115 else
b9d72a2dac8f Accept a cell array of strings to uncompress functions (bug #55102).
Rik <rik@octave.org>
parents: 25948
diff changeset
116 tmpfiles = unpack (file{i}, fileparts (file{i}));
b9d72a2dac8f Accept a cell array of strings to uncompress functions (bug #55102).
Rik <rik@octave.org>
parents: 25948
diff changeset
117 endif
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
118 files = {files{:} tmpfiles{:}};
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
119 endfor
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
120
8352
33337f1aca75 fix bug in cell string handling of unpack function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8297
diff changeset
121 ## Return output if requested.
33337f1aca75 fix bug in cell string handling of unpack function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8297
diff changeset
122 if (nargout > 0)
33337f1aca75 fix bug in cell string handling of unpack function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8297
diff changeset
123 filelist = files;
33337f1aca75 fix bug in cell string handling of unpack function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8297
diff changeset
124 endif
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
125 return;
8352
33337f1aca75 fix bug in cell string handling of unpack function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 8297
diff changeset
126
19233
0ded8964c13a Added wildcard * support to archive-related routines (bug #43211).
Massimiliano Fasi <massimiliano.fasi@gmail.com>
parents: 18857
diff changeset
127 else
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
128 file = file{1};
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
129 endif
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
130
25885
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
131 if (nargin == 3 && (! ischar (filetype) || ! isrow (filetype)))
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
132 error ("unpack: FILETYPE must be a string");
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
133 endif
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
134
25781
e04c56bbbace isdir.m: Make m-file a legacy function (bug #54489)
Rik <rik@octave.org>
parents: 25054
diff changeset
135 if (isfolder (file))
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
136 if (isempty (filetype))
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
137 error ("unpack: FILETYPE must be given for a directory");
25885
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
138 elseif (! strcmpi (filetype, "gz"))
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
139 error ('unpack: FILETYPE must be "gz" for a directory');
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
140 endif
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
141 ext = ".gz";
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
142 else
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
143 [pathstr, name, ext] = fileparts (file);
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
144
25885
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
145 if (nargin == 3 && ! strcmpi (ext, filetype))
25948
700b3f415ebe maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 25893
diff changeset
146 ## override extension with given filetype
25885
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
147 if (isempty (ext))
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
148 ext = filetype;
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
149 else
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
150 ext = regexprep (ext, '(\.?)\S*$', ['$1' filetype]);
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
151 endif
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
152 endif
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
153
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
154 ## Check to see if it's .tar.gz, .tar.Z, etc.
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
155 if (any (strcmpi ({".gz" ".Z" ".bz2" ".bz"}, ext)))
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
156 [~, tmpname, tmpext] = fileparts (name);
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
157 if (strcmpi (tmpext, ".tar"))
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
158 name = tmpname;
16994
333243133364 Use matrix concatenation for strings, rather than cstrcat(), for clarity and performance.
Rik <rik@octave.org>
parents: 16724
diff changeset
159 ext = [tmpext ext];
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
160 endif
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
161 endif
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
162
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
163 ## If the file is a URL, download it and then work with that file.
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
164 if (! isempty (strfind (file, "://")))
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
165 ## FIXME: The above code is not a perfect test for a URL
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
166 urlfile = file;
20755
46b15c018fa5 unpack.m: Fix handling of gzip archives expanded into /tmp (bug #40274).
Rik <rik@octave.org>
parents: 20748
diff changeset
167 tmpfile = fullfile (tempdir (), [name ext]);
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
168 [file, success, msg] = urlwrite (urlfile, tmpfile);
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
169 if (! success)
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
170 error ('unpack: could not fetch "%s": %s', urlfile, msg);
12499
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
171 endif
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
172 endif
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
173
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
174 endif
a3019189ac51 Improve file archiving functions (gzip, bzip2, zip, unpack)
Rik <octave@nomad.inbox5.com>
parents: 11588
diff changeset
175
19579
0cc52d752f99 unpack.m: replace canonicalize_file_name by make_absolute_filename (bug #43979)
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 19278
diff changeset
176 file = make_absolute_filename (file);
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
177
20291
2fc43288a6c4 unpack.m: Stop hang when unpacking on to existing filename (bug #45331).
Rik <rik@octave.org>
parents: 20164
diff changeset
178 if (isempty (dir))
2fc43288a6c4 unpack.m: Stop hang when unpacking on to existing filename (bug #45331).
Rik <rik@octave.org>
parents: 20164
diff changeset
179 dir = ".";
2fc43288a6c4 unpack.m: Stop hang when unpacking on to existing filename (bug #45331).
Rik <rik@octave.org>
parents: 20164
diff changeset
180 else
2fc43288a6c4 unpack.m: Stop hang when unpacking on to existing filename (bug #45331).
Rik <rik@octave.org>
parents: 20164
diff changeset
181 dir = tilde_expand (dir);
2fc43288a6c4 unpack.m: Stop hang when unpacking on to existing filename (bug #45331).
Rik <rik@octave.org>
parents: 20164
diff changeset
182 endif
2fc43288a6c4 unpack.m: Stop hang when unpacking on to existing filename (bug #45331).
Rik <rik@octave.org>
parents: 20164
diff changeset
183
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
184 ## Instructions on what to do for any extension.
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
185 ##
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
186 ## The field names are the file extension without periods.
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
187 ## The first cell is what is executed to unpack an archive verbosely.
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
188 ## The second cell is what is executed to unpack an archive quietly.
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
189 ## The third cell is the function to execute on output to get the files list.
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
190 ## The fourth cell indicates if the files may need to be manually moved
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
191 ## (i.e., tar and unzip decompress into the current directory while
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
192 ## bzip2 and gzip decompress the file at its location).
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
193 persistent commandlist;
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
194 if (isempty (commandlist))
30112
167747278b7a use -k option for bzip2 and gzip (bug #43206)
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
195 commandlist.gz = {'gzip -d -k -v -f -r "%s"', ...
167747278b7a use -k option for bzip2 and gzip (bug #43206)
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
196 'gzip -d -k -f -r "%s"', ...
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9170
diff changeset
197 @__parse_gzip__, true};
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
198 commandlist.z = commandlist.gz;
30112
167747278b7a use -k option for bzip2 and gzip (bug #43206)
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
199 commandlist.bz2 = {'bzip2 -d -k -v -f "%s"', ...
167747278b7a use -k option for bzip2 and gzip (bug #43206)
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
200 'bzip2 -d -k -f "%s"', ...
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9170
diff changeset
201 @__parse_bzip2__, true};
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
202 commandlist.bz = commandlist.bz2;
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
203 commandlist.tar = {'tar xvf "%s"', ...
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
204 'tar xf "%s"', ...
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9170
diff changeset
205 @__parse_tar__, false};
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
206 commandlist.targz = {'gzip -d -c "%s" | tar xvf -', ...
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
207 'gzip -d -c "%s" | tar xf -', ...
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9170
diff changeset
208 @__parse_tar__, false};
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
209 commandlist.tgz = commandlist.targz;
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
210 commandlist.tarbz2 = {'bzip2 -d -c "%s" | tar xvf -', ...
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
211 'bzip2 -d -c "%s" | tar xf -', ...
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9170
diff changeset
212 @__parse_tar__, false};
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
213 commandlist.tarbz = commandlist.tarbz2;
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
214 commandlist.tbz2 = commandlist.tarbz2;
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
215 commandlist.tbz = commandlist.tarbz2;
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
216 commandlist.zip = {'unzip -n "%s"', ...
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
217 'unzip -nq "%s"', ...
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9170
diff changeset
218 @__parse_zip__, false};
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
219 endif
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
220
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
221 ## Unzip doesn't actually care about the extension
25885
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
222 if (strcmpi (filetype, "zip"))
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
223 nodotext = "zip";
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
224 else
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
225 nodotext = ext(ext != '.');
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
226 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
227
19951
8c20fb6caa16 Fix XFAIL with tar and unpack tests (bug #44007, bug #43979).
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 19927
diff changeset
228 if (ispc && strcmp (nodotext, "tar"))
8c20fb6caa16 Fix XFAIL with tar and unpack tests (bug #44007, bug #43979).
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 19927
diff changeset
229 ## Change file pathname into a mingw style acceptable for tar
8c20fb6caa16 Fix XFAIL with tar and unpack tests (bug #44007, bug #43979).
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 19927
diff changeset
230 file = __w2mpth__ (file);
8c20fb6caa16 Fix XFAIL with tar and unpack tests (bug #44007, bug #43979).
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 19927
diff changeset
231 endif
8c20fb6caa16 Fix XFAIL with tar and unpack tests (bug #44007, bug #43979).
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 19927
diff changeset
232
27569
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
233 ## Create the output directory if necessary.
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
234 s = stat (dir);
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
235 if (isempty (s))
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
236 [status, msg] = mkdir (dir);
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
237 if (! status)
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
238 error ("unpack: mkdir failed to create %s: %s", dir, msg);
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
239 endif
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
240 elseif (! S_ISDIR (s.mode))
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
241 error ("unpack: %s: not a directory", dir);
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
242 endif
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
243
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
244 if (isfield (commandlist, tolower (nodotext)))
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
245 [commandv, commandq, parsefcn, move] = deal (commandlist.(nodotext){:});
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
246 origdir = pwd ();
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
247 if (move)
19597
db92e7e28e1f strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 19579
diff changeset
248 startdir = fileparts (file);
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
249 else
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
250 startdir = origdir;
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
251 endif
19951
8c20fb6caa16 Fix XFAIL with tar and unpack tests (bug #44007, bug #43979).
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 19927
diff changeset
252 cstartdir = make_absolute_filename (startdir);
8c20fb6caa16 Fix XFAIL with tar and unpack tests (bug #44007, bug #43979).
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 19927
diff changeset
253 cenddir = make_absolute_filename (dir);
20291
2fc43288a6c4 unpack.m: Stop hang when unpacking on to existing filename (bug #45331).
Rik <rik@octave.org>
parents: 20164
diff changeset
254 if (cenddir(end) == filesep)
2fc43288a6c4 unpack.m: Stop hang when unpacking on to existing filename (bug #45331).
Rik <rik@octave.org>
parents: 20164
diff changeset
255 cenddir(end) = [];
2fc43288a6c4 unpack.m: Stop hang when unpacking on to existing filename (bug #45331).
Rik <rik@octave.org>
parents: 20164
diff changeset
256 endif
27569
29ccef7e5295 New function "is_same_file".
Markus Mützel <markus.muetzel@gmx.de>
parents: 27331
diff changeset
257 needmove = move && ! is_same_file (cstartdir, cenddir);
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
258 if (nargout > 0 || needmove)
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
259 command = commandv;
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
260 else
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
261 command = commandq;
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
262 endif
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
263 else
25885
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
264 warning ("unpack: unrecognized FILETYPE <%s>", nodotext);
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
265 filelist = {};
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
266 return;
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
267 endif
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
268
24096
8f3db1ac7877 tar, untar, unpack: ensure TAR_OPTIONS doesn't affect behavior (bug #52095)
Mike Miller <mtmiller@octave.org>
parents: 23220
diff changeset
269 ## Save and restore the TAR_OPTIONS environment variable used by GNU tar.
8f3db1ac7877 tar, untar, unpack: ensure TAR_OPTIONS doesn't affect behavior (bug #52095)
Mike Miller <mtmiller@octave.org>
parents: 23220
diff changeset
270 tar_options_env = getenv ("TAR_OPTIONS");
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
271 unwind_protect
24096
8f3db1ac7877 tar, untar, unpack: ensure TAR_OPTIONS doesn't affect behavior (bug #52095)
Mike Miller <mtmiller@octave.org>
parents: 23220
diff changeset
272 unsetenv ("TAR_OPTIONS");
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 10793
diff changeset
273 cd (dir);
16994
333243133364 Use matrix concatenation for strings, rather than cstrcat(), for clarity and performance.
Rik <rik@octave.org>
parents: 16724
diff changeset
274 [status, output] = system (sprintf ([command " 2>&1"], file));
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
275 unwind_protect_cleanup
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
276 cd (origdir);
24096
8f3db1ac7877 tar, untar, unpack: ensure TAR_OPTIONS doesn't affect behavior (bug #52095)
Mike Miller <mtmiller@octave.org>
parents: 23220
diff changeset
277 if (! isempty (tar_options_env))
8f3db1ac7877 tar, untar, unpack: ensure TAR_OPTIONS doesn't affect behavior (bug #52095)
Mike Miller <mtmiller@octave.org>
parents: 23220
diff changeset
278 setenv ("TAR_OPTIONS", tar_options_env);
8f3db1ac7877 tar, untar, unpack: ensure TAR_OPTIONS doesn't affect behavior (bug #52095)
Mike Miller <mtmiller@octave.org>
parents: 23220
diff changeset
279 endif
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
280 end_unwind_protect
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
281
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
282 if (status)
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
283 error ("unpack: unarchiving program exited with status: %d\n%s",
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9170
diff changeset
284 status, output);
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
285 endif
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
286
6084
38114c34b44a [project @ 2006-10-25 03:52:48 by jwe]
jwe
parents: 6083
diff changeset
287 if (nargout > 0 || needmove)
19927
0cc365dada52 Allow tar, unpack, and zip to run on Windows with CR/NL EOL.
Rik <rik@octave.org>
parents: 19697
diff changeset
288 ## Trim the last CR or NL if needed.
0cc365dada52 Allow tar, unpack, and zip to run on Windows with CR/NL EOL.
Rik <rik@octave.org>
parents: 19697
diff changeset
289 files = parsefcn (ostrsplit (output, "\r\n", true))';
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
290
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
291 ## Move files if necessary.
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
292 if (needmove)
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
293 [st, msg] = movefile (files, cenddir);
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
294 if (! st)
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
295 error ('unpack: unable to move files to "%s": %s', dir, msg);
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
296 endif
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
297
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
298 ## Fix the names of the files since they were moved.
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
299 files = strrep (files, cstartdir, cenddir);
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
300 endif
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
301
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
302 ## Return output if requested.
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
303 if (nargout > 0)
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
304 filelist = files;
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
305 endif
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
306 endif
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
307
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
308 endfunction
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
309
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
310 function files = __parse_zip__ (output)
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
311 ## Parse the output from zip and unzip.
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
312
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
313 ## Skip first line which is Archive header.
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
314 files = char (output(2:end));
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
315 ## Trim constant width prefix and return cell array.
21385
89fa0694aa2e Fix check-missing-semicolon QA target (bug #47277).
Rik <rik@octave.org>
parents: 20852
diff changeset
316 files = cellstr (files(:,14:end));
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
317 endfunction
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
318
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
319 function output = __parse_tar__ (output)
27331
3bf19af20af8 tar, untar, unpack: Add support for BSD tar (bug #53695)
Andrew Janke <andrew@apjanke.net>
parents: 26376
diff changeset
320 ## BSD tar emits file actions in the first 2 columns
3bf19af20af8 tar, untar, unpack: Add support for BSD tar (bug #53695)
Andrew Janke <andrew@apjanke.net>
parents: 26376
diff changeset
321
3bf19af20af8 tar, untar, unpack: Add support for BSD tar (bug #53695)
Andrew Janke <andrew@apjanke.net>
parents: 26376
diff changeset
322 if (tar_is_bsd ())
3bf19af20af8 tar, untar, unpack: Add support for BSD tar (bug #53695)
Andrew Janke <andrew@apjanke.net>
parents: 26376
diff changeset
323 output = cellfun (@(x) x(3:end), output, 'UniformOutput', false);
3bf19af20af8 tar, untar, unpack: Add support for BSD tar (bug #53695)
Andrew Janke <andrew@apjanke.net>
parents: 26376
diff changeset
324 endif
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
325 endfunction
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
326
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
327 function files = __parse_gzip__ (output)
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
328 ## Parse the output from gzip and gunzip returning the files
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21571
diff changeset
329 ## compressed (or decompressed).
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
330
30115
3915633fdfd0 unpack.m: Fix to support old and new versions of gzip (bug #43206).
Rik <rik@octave.org>
parents: 30112
diff changeset
331 files = regexprep (output, '^.+ -- (?:created|replaced with) (.*)$', '$1');
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
332 endfunction
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
333
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
334 function files = __parse_bzip2__ (output)
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
335 ## Parse the output from bzip2 and bunzip2 returning the files
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21571
diff changeset
336 ## compressed (or decompressed).
6082
588721ac2140 [project @ 2006-10-25 03:46:17 by jwe]
jwe
parents:
diff changeset
337
20713
2469d78a1d8b Consistently use 'filename' rather than 'file name' throughout code base.
Rik <rik@octave.org>
parents: 20291
diff changeset
338 ## Strip leading blanks and .bz2 extension from filename
17000
45165d6c4738 unpack.m: Allow zip files to have any suffix (bug #39148)
Rik <rik@octave.org>
parents: 16994
diff changeset
339 files = regexprep (output, '^\s+(.*)\.bz2: .*', '$1');
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
340 endfunction
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
341
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
342
22270
2c7acd39e9b7 Conditionally disable tests that rely on optional features
Mike Miller <mtmiller@octave.org>
parents: 21758
diff changeset
343 %!testif HAVE_ZLIB
24662
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
344 %! envvar = {"TMPDIR", "TMP"};
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
345 %! envdir = cellfun (@(x) getenv (x), envvar, "uniformoutput", false);
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
346 %! unwind_protect
24662
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
347 %! cellfun (@(x) unsetenv (x), envvar);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
348 %! ## Create temporary directory and file for packing and unpacking
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
349 %! dirname = tempname ();
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
350 %! assert (mkdir (dirname));
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
351 %! filename = tempname ();
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
352 %! fid = fopen (filename, "wt");
19259
f8552bd35180 unpack.m: Rewrite BIST test to not produce warning on stderr.
Rik <rik@octave.org>
parents: 19243
diff changeset
353 %! assert (fid >= 0);
24662
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
354 %! fprintf (fid, "Hello World\n");
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
355 %! fprintf (fid, "123 456 789\n");
19259
f8552bd35180 unpack.m: Rewrite BIST test to not produce warning on stderr.
Rik <rik@octave.org>
parents: 19243
diff changeset
356 %! fclose (fid);
24662
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
357 %!
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
358 %! unwind_protect
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
359 %! copyfile (filename, [filename ".orig"]);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
360 %! gzip (filename, dirname);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
361 %! [~, f] = fileparts (filename);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
362 %! filelist = unpack (fullfile (dirname, [f ".gz"]), tempdir);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
363 %! assert (filelist{1}, filename);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
364 %! fid = fopen ([filename ".orig"], "rb");
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
365 %! assert (fid >= 0);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
366 %! orig_data = fread (fid);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
367 %! fclose (fid);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
368 %! fid = fopen (filename, "rb");
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
369 %! assert (fid >= 0);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
370 %! new_data = fread (fid);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
371 %! fclose (fid);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
372 %! if (orig_data != new_data)
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
373 %! error ("unpack: Unpacked file does not equal original");
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
374 %! endif
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
375 %! unwind_protect_cleanup
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
376 %! unlink (filename);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
377 %! unlink ([filename ".orig"]);
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
378 %! confirm_recursive_rmdir (false, "local");
28087
9cb04a9e81ec rmdir: throw an error if operation fails and nargout == 0 (bug #57830).
Rik <rik@octave.org>
parents: 27978
diff changeset
379 %! sts = rmdir (dirname, "s");
24662
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
380 %! end_unwind_protect
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
381 %! unwind_protect_cleanup
24662
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
382 %! ## Restore environment variables TMPDIR, TMP
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
383 %! for i = 1:numel (envvar)
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
384 %! if (isempty (envdir{i}))
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
385 %! unsetenv (envvar{i});
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
386 %! else
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
387 %! setenv (envvar{i}, envdir{i});
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
388 %! endif
276eca875721 Clear environment variables affecting tmpdir before running BIST tests (bug #52627)
Rik <rik@octave.org>
parents: 24534
diff changeset
389 %! endfor
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
390 %! end_unwind_protect
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
391
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
392 ## Test input validation
28896
90fea9cc9caa test: Add expected error message <Invalid call> to BIST tests for nargin.
Rik <rik@octave.org>
parents: 28789
diff changeset
393 %!error <Invalid call> unpack ()
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
394 %!error <FILE must be a string or cell array of strings> unpack (1)
22765
01aae08a0105 maint: Rename variables to match documentation in m-files.
Rik <rik@octave.org>
parents: 22760
diff changeset
395 %!error <FILE "_%NOT_A_FILENAME%_" not found> unpack ("_%NOT_A_FILENAME%_")
01aae08a0105 maint: Rename variables to match documentation in m-files.
Rik <rik@octave.org>
parents: 22760
diff changeset
396 %!error <FILE "_%NOT_A_FILENAME%_" not found> unpack ({"_%NOT_A_FILENAME%_"})
01aae08a0105 maint: Rename variables to match documentation in m-files.
Rik <rik@octave.org>
parents: 22760
diff changeset
397 %!error <FILE "_%NOT_A_FILENAME%_" not found> unpack ({"_%NOT_A_FILENAME%_", "2nd_filename"})
25893
96c69234ac98 unpack.m: Fix failing BIST test on Windows (bug #54719).
Rik <rik@octave.org>
parents: 25885
diff changeset
398 %!error <FILETYPE must be a string>
96c69234ac98 unpack.m: Fix failing BIST test on Windows (bug #54719).
Rik <rik@octave.org>
parents: 25885
diff changeset
399 %! if (isunix || ismac)
96c69234ac98 unpack.m: Fix failing BIST test on Windows (bug #54719).
Rik <rik@octave.org>
parents: 25885
diff changeset
400 %! unpack ("/", [], 1)
96c69234ac98 unpack.m: Fix failing BIST test on Windows (bug #54719).
Rik <rik@octave.org>
parents: 25885
diff changeset
401 %! else
96c69234ac98 unpack.m: Fix failing BIST test on Windows (bug #54719).
Rik <rik@octave.org>
parents: 25885
diff changeset
402 %! unpack ('C:\', [], 1)
96c69234ac98 unpack.m: Fix failing BIST test on Windows (bug #54719).
Rik <rik@octave.org>
parents: 25885
diff changeset
403 %! endif
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
404 %!error <FILETYPE must be given for a directory>
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
405 %! if (isunix || ismac)
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
406 %! unpack ("/");
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
407 %! else
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
408 %! unpack ('C:\');
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
409 %! endif
25885
75ed70a1c108 Overhaul unpack and associated functions (bug #54567).
Rik <rik@octave.org>
parents: 25781
diff changeset
410 %!error <FILETYPE must be "gz" for a directory>
19234
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
411 %! if (isunix || ismac)
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
412 %! unpack ("/", [], "foobar");
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
413 %! else
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
414 %! unpack ('C:\', [], "foobar");
6ebc2ca01c76 unpack.m: Overhaul function.
Rik <rik@octave.org>
parents: 19233
diff changeset
415 %! endif