Mercurial > hg > octave-jordi
annotate scripts/miscellaneous/zip.m @ 19257:a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
* NEWS: Announce changes to archive family of functions.
* bunzip2.m: Redo docstring. Use common variable names between docstring and
function. Remove file from test statistics. Default to placing uncompressed
files in same directory as the compressed one.
* bzip2.m: Redo docstring. Use common variable names between docstring and
function. Add extensive BIST test.
* gunzip.m: Redo docstring. Use common variable names between docstring and
function. Remove file from test statistics. Default to placing uncompressed
files in same directory as the compressed one.
* gzip.m: Redo docstring. Remove input validation test that is no longer
applicable.
* __xzip__.m: Create output directory if it is named, but does not yet exist.
Check return code of mkdir and issue an error if it is unsuccesful. Use the
caller's name (gzip or bzip2) in error messages. Rename subfunction myfileparts
to fname_only for slightly more clarity. Add FIXME note that compression of
directories does not work.
* tar.m: Redo docstring. Use common variable names between docstring and
function. Add extensive BIST test.
* untar.m: Redo docstring. Use common variable names between docstring and
function. Remove file from test statistics. Default to placing uncompressed
files in same directory as the compressed one.
* unzip.m: Redo docstring. Use common variable names between docstring and
function. Remove file from test statistics. Default to placing uncompressed
files in same directory as the zip archive.
* zip.m: Redo docstring. Use common variable names between docstring and
function. Add extensive BIST test.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 17 Oct 2014 10:45:25 -0700 |
parents | d63878346099 |
children | db92e7e28e1f |
rev | line source |
---|---|
17744
d63878346099
maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents:
17338
diff
changeset
|
1 ## Copyright (C) 2006-2013 Sylvain Pelissier |
6049 | 2 ## |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7016 | 7 ## the Free Software Foundation; either version 3 of the License, or (at |
8 ## your option) any later version. | |
6049 | 9 ## |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
6049 | 18 |
19 ## -*- texinfo -*- | |
19257
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
20 ## @deftypefn {Function File} {@var{filelist} =} zip (@var{zipfile}, @var{files}) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
21 ## @deftypefnx {Function File} {@var{filelist} =} zip (@var{zipfile}, @var{files}, @var{rootdir}) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
22 ## Compress the list of files and directories specified in @var{files} into the |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
23 ## ZIP archive @var{zipfile}. |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
24 ## |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
25 ## @var{files} is a character array or cell array of strings. Shell |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
26 ## wildcards in the filename such as @samp{*} or @samp{?} are accepted and |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
27 ## expanded. Directories are recursively traversed and all files are |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
28 ## compressed and added to the archive. |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
29 ## |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
30 ## If @var{rootdir} is defined then any files without absolute pathnames are |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
31 ## located relative to @var{rootdir} rather than the current directory. |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
32 ## |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
33 ## The optional output @var{filelist} is a list of the files that were included |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
34 ## in the archive. |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
35 ## @seealso{unzip, unpack, bzip2, gzip, tar} |
6049 | 36 ## @end deftypefn |
37 | |
38 ## Author: Sylvain Pelissier <sylvain.pelissier@gmail.com> | |
39 | |
19257
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
40 function filelist = zip (zipfile, files, rootdir = ".") |
6049 | 41 |
19257
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
42 if (nargin < 2 || nargin > 3) |
6049 | 43 print_usage (); |
44 endif | |
45 | |
19257
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
46 if (! ischar (zipfile)) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
47 error ("zip: ZIPFILE must be a string"); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
48 elseif (ischar (files)) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
49 files = cellstr (files); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
50 elseif (! iscellstr (files)) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
51 error ("zip: FILES must be a character array or cellstr"); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
52 endif |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
53 |
12500
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
54 rootdir = tilde_expand (rootdir); |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
55 |
19257
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
56 zipfile = make_absolute_filename (zipfile); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
57 |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
58 cmd = sprintf ("cd %s; zip -r %s %s", |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
59 rootdir, zipfile, sprintf (" %s", files{:})); |
12500
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
60 |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
61 [status, output] = system (cmd); |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
62 |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
63 if (status) |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
64 error ("zip: zip failed with exit status = %d", status); |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
65 endif |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
66 |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
67 if (nargout > 0) |
19257
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
68 cmd = ["unzip -Z -1 " zipfile]; |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
69 [status, filelist] = system (cmd); |
12500
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
70 if (status) |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
71 error ("zip: zipinfo failed with exit status = %d", status); |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
72 endif |
19257
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
73 if (filelist(end) == "\n") |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
74 filelist(end) = []; |
12500
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
75 endif |
19257
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
76 filelist = ostrsplit (filelist, "\n"); |
12500
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
77 endif |
8f2056646dba
Improve docstrings for archive functions (gzip, bzip2, etc.)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
78 |
6049 | 79 endfunction |
17338
1c89599167a6
maint: End m-files with 1 blank line.
Rik <rik@octave.org>
parents:
16724
diff
changeset
|
80 |
19257
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
81 |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
82 %!xtest |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
83 %! ## test zip together with unzip |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
84 %! unwind_protect |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
85 %! filename = tempname; |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
86 %! tmp_var = pi; |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
87 %! save (filename, "tmp_var"); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
88 %! dirname = tempname; |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
89 %! mkdir (dirname); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
90 %! zipfile = tempname; |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
91 %! [~, basename, ext] = fileparts (filename); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
92 %! filelist = zip (zipfile, [basename ext], tempdir); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
93 %! filelist = filelist{1}; |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
94 %! if (! strcmp (filelist, [basename ext])) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
95 %! error ("zip archive does not contain expected name!"); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
96 %! endif |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
97 %! if (! exist ([zipfile ".zip"], "file")) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
98 %! error ("zip file cannot be found!"); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
99 %! endif |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
100 %! unzip ([zipfile ".zip"], dirname); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
101 %! fid = fopen (filename, "rb"); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
102 %! assert (fid >= 0); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
103 %! orig_data = fread (fid); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
104 %! fclose (fid); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
105 %! fid = fopen ([dirname filesep basename ext], "rb"); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
106 %! assert (fid >= 0); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
107 %! new_data = fread (fid); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
108 %! fclose (fid); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
109 %! if (orig_data != new_data) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
110 %! error ("unzipped file not equal to original file!"); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
111 %! endif |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
112 %! unwind_protect_cleanup |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
113 %! delete (filename); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
114 %! delete ([dirname, filesep, basename, extension]); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
115 %! rmdir (dirname); |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
116 %! end_unwind_protect |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
117 |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
118 ## Test input validation |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
119 %!error zip () |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
120 %!error zip (1) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
121 %!error zip (1,2,3,4) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
122 %!error <ZIPFILE must be a string> zip (1, "foobar") |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
123 %!error <FILES must be a character array or cellstr> zip ("foobar", 1) |
a4e993343e93
Overhaul the archive family (bzip2, gzip, zip, tar) of m-files.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
124 |