Mercurial > hg > octave-lyh
diff scripts/miscellaneous/private/__xzip__.m @ 12499:a3019189ac51
Improve file archiving functions (gzip, bzip2, zip, unpack)
author | Rik <octave@nomad.inbox5.com> |
---|---|
date | Thu, 03 Mar 2011 11:59:05 -0800 |
parents | c792872f8942 |
children | cefd568ea073 5cc3b7673d25 |
line wrap: on
line diff
--- a/scripts/miscellaneous/private/__xzip__.m +++ b/scripts/miscellaneous/private/__xzip__.m @@ -33,81 +33,79 @@ function entries = __xzip__ (commandname, extension, commandtemplate, files, outdir) - if (nargin == 4 || nargin == 5) - if (! ischar (extension) || length (extension) == 0) - error ("__xzip__: EXTENSION has to be a string with finite length"); - endif + if (nargin != 4 && nargin != 5) + print_usage (); + endif + + if (! ischar (extension) || length (extension) == 0) + error ("__xzip__: EXTENSION must be a string with finite length"); + endif - if (nargin == 5 && ! exist (outdir, "dir")) - error ("__xzip__: output directory does not exist"); - endif + if (nargin == 5 && ! exist (outdir, "dir")) + error ("__xzip__: OUTDIR output directory does not exist"); + endif + + if (ischar (files)) + files = cellstr (files); + endif + if (! iscellstr (files)) + error ("__xzip__: FILES must be a character array or cellstr"); + endif - if (ischar (files)) - files = cellstr (files); - else - error ("__xzip__: expecting FILES to be a character array"); - endif + if (nargin == 4) + outdir = tmpnam (); + mkdir (outdir); + endif + + cwd = pwd (); + unwind_protect + files = glob (files); - if (nargin == 4) - outdir = tmpnam (); - mkdir (outdir); + ## Ignore any file with the compress extension + files(cellfun (@(x) length(x) > length(extension) + && strcmp (x((end - length(extension) + 1):end), extension), + files)) = []; + + copyfile (files, outdir); + + [d, f] = myfileparts(files); + + cd (outdir); + + cmd = sprintf (commandtemplate, sprintf (" %s", f{:})); + + [status, output] = system (cmd); + if (status) + error ("__xzip__: %s command failed with exit status = %d", + commandname, status); endif - cwd = pwd(); - unwind_protect - files = glob (files); - - ## Ignore any file with the compress extension - files (cellfun (@(x) length(x) > length(extension) - && strcmp (x((end - length(extension) + 1):end), extension), - files)) = []; - - copyfile (files, outdir); - - [d, f] = myfileparts(files); - - cd (outdir); - - cmd = sprintf (commandtemplate, sprintf (" %s", f{:})); - - [status, output] = system (cmd); - if (status == 0) + if (nargout > 0) + if (nargin == 5) + entries = cellfun( + @(x) fullfile (outdir, sprintf ("%s.%s", x, extension)), + f, "uniformoutput", false); + else + movefile (cellfun(@(x) sprintf ("%s.%s", x, extension), f, + "uniformoutput", false), cwd); + ## FIXME this does not work when you try to compress directories + entries = cellfun(@(x) sprintf ("%s.%s", x, extension), + files, "uniformoutput", false); + endif + endif - if (nargin == 5) - compressed_files = cellfun( - @(x) fullfile (outdir, sprintf ("%s.%s", x, extension)), - f, "uniformoutput", false); - else - movefile (cellfun(@(x) sprintf ("%s.%s", x, extension), f, - "uniformoutput", false), cwd); - ## FIXME this does not work when you try to compress directories - - compressed_files = cellfun(@(x) sprintf ("%s.%s", x, extension), - files, "uniformoutput", false); - endif - - if (nargout > 0) - entries = compressed_files; - endif - else - error ("__xzip__: %s command failed with exit status = %d", - commandname, status); - endif - unwind_protect_cleanup - cd(cwd); - if (nargin == 4) - crr = confirm_recursive_rmdir (); - unwind_protect - confirm_recursive_rmdir (false); - rmdir (outdir, "s"); - unwind_protect_cleanup - confirm_recursive_rmdir (crr); - end_unwind_protect - endif - end_unwind_protect - else - print_usage (); - endif + unwind_protect_cleanup + cd (cwd); + if (nargin == 4) + crr = confirm_recursive_rmdir (); + unwind_protect + confirm_recursive_rmdir (false); + rmdir (outdir, "s"); + unwind_protect_cleanup + confirm_recursive_rmdir (crr); + end_unwind_protect + endif + end_unwind_protect endfunction