changeset 38:49eaa98230c5

* Rename 'tarballs' directory to 'snapshots'. * Add support for ZIP archives.
author cmlenz
date Wed, 22 Jun 2005 21:55:13 +0000
parents 35e7b490496f
children ed5af0f0028d
files bitten/trac_ext/main.py bitten/util/archive.py
diffstat 2 files changed, 25 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/bitten/trac_ext/main.py
+++ b/bitten/trac_ext/main.py
@@ -38,7 +38,7 @@
         for table in [Build._table]:
             cursor.execute(db.to_sql(table))
 
-        tarballs_dir = os.path.join(self.env.path, 'tarballs')
+        tarballs_dir = os.path.join(self.env.path, 'snapshots')
 
         cursor.execute("INSERT INTO system (name,value) "
                        "VALUES ('bitten_version',%s)", (schema_version,))
--- a/bitten/util/archive.py
+++ b/bitten/util/archive.py
@@ -19,7 +19,7 @@
 # Author: Christopher Lenz <cmlenz@gmx.de>
 
 import os.path
-import tarfile
+import time
 
 _formats = {'gzip': ('.tar.gz', 'gz'), 'bzip2': ('.tar.bz2', 'bz2'),
             'zip': ('.zip', None)}
@@ -32,10 +32,10 @@
 
     assert format in _formats, 'Unknown archive format: %s' % format
 
-    filedir = os.path.join(env.path, 'tarballs')
+    filedir = os.path.join(env.path, 'snapshots')
     if not os.access(filedir, os.R_OK + os.W_OK):
         raise IOError, 'Insufficient permissions to create tarball'
-    prefix = '%s-%s' % (root.path.replace('/', '-'), root.rev)
+    prefix = '%s_r%s' % (root.path.replace('/', '-'), root.rev)
     filename = os.path.join(filedir, prefix + _formats[format][0])
 
     if format in ('bzip2', 'gzip'):
@@ -43,7 +43,8 @@
     else:
         _make_zip_archive(env, root, filename, prefix)
 
-def _make_tar_archive(env, root, filename, prefix, format='gzip'):
+def _make_tar_archive(env, root, filename, prefix, format):
+    import tarfile
     tar = tarfile.open(filename, 'w:' + _formats[format][1])
 
     def _add_entry(prefix, node):
@@ -63,8 +64,23 @@
 
     tar.close()
 
+def _make_zip_archive(env, root, filename, prefix):
+    import zipfile
+    zip = zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED)
 
-if __name__ == '__main__':
-    from trac.env import Environment
-    env = Environment('/var/trac/bitten')
-    make_archive(env, 'bitten/trunk')
+    def _add_entry(prefix, node):
+        name = node.path[len(root.path):]
+        if name.startswith('/'):
+            name = name[1:]
+        if node.isdir:
+            for entry in node.get_entries():
+                _add_entry(os.path.join(prefix, name), entry)
+        else:
+            info = zipfile.ZipInfo(os.path.join(prefix, name))
+            info.compress_type = zipfile.ZIP_DEFLATED
+            info.date_time = time.gmtime(node.last_modified)[:6]
+            info.file_size = node.content_length
+            zip.writestr(info, node.get_content().read())
+    _add_entry(prefix, root)
+
+    zip.close()
Copyright (C) 2012-2017 Edgewall Software