changeset 2679:5aa1499d8496 octave-forge

allow zip to treat directories and return list of archived files
author adb014
date Sat, 14 Oct 2006 05:17:00 +0000
parents 5ccf40d3064a
children 031a5020ac98
files main/miscellaneous/inst/zip.m
diffstat 1 files changed, 26 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/main/miscellaneous/inst/zip.m	Sat Oct 14 05:13:33 2006 +0000
+++ b/main/miscellaneous/inst/zip.m	Sat Oct 14 05:17:00 2006 +0000
@@ -15,14 +15,22 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 ## -*- texinfo -*-
-## @deftypefn {Function File} {} zip (@var{zipfile},@var{files})
-## Compress the list of files specified in 'files' into the archive 'zipfiles' in the same directory.
+## @deftypefn {Function File} {@var{entries} =} zip (@var{zipfile},@var{files})
+## @deftypefnx {Function File} {@var{entries} =} zip (@var{zipfile},@var{files},@var{rootdir})
+## Compress the list of files and/or directories specified in @var{files} 
+## into the archive @var{zipfiles} in the same directory. If @var{rootdir} 
+## is defined the @var{files} is located relative to @var{rootdir} rather 
+## than the current directory
 ## @seealso{unzip,tar}
 ## @end deftypefn
 
-function zip(zipfile, files)
-	
-  if (nargin == 2)
+function entries = zip(zipfile, files, rootdir)
+  if (nargin != 3)
+    rootdir = "./";
+  endif
+
+  if (nargin == 2 || nargin == 3)
+    rootdir = tilde_expand(rootdir);
 
     if (ischar (files))
       files = cellstr (files);
@@ -30,18 +38,24 @@
 
     if (ischar (zipfile) && iscellstr (files))
 
-      cmd = sprintf ("zip %s %s", zipfile,
+      cmd = sprintf ("cd %s; zip -r %s %s", rootdir, [pwd(),"/",zipfile],
 		     sprintf (" %s", files{:}));
 
       [status, output] = system (cmd);
 
       if (status == 0)
 	if (nargout > 0)
-	  if (output(end) == "\n")
-	    output(end) = [];
+	  cmd = sprintf ("zipinfo -1 %s", zipfile);
+	  [status, entries] = system (cmd);
+	  if (status == 0)
+	    if (entries(end) == "\n")
+	      entries(end) = [];
+	    endif
+            entries = cellstr (split (entries, "\n"));
+	    entries = entries';
+	  else
+	    error("zip: zipinfo exit status = %d", status);
 	  endif
-          entries = cellstr (split (output, "\n"));
-	  entries = entries';
 	endif
       else
 	error ("zip: zip exited with status = %d", status);
@@ -52,7 +66,7 @@
     endif
 
   else
-		usage(" zip(zipfiles,files)");
+    print_usage();
   endif
 
-endfunction
\ No newline at end of file
+endfunction