[Pkg-bazaar-commits] r142 ./bzr-builddeb/people/jdw/merge_upstream: Support repacking over any transport.

James Westby jw+debian at jameswestby.net
Sun Jul 8 09:42:08 UTC 2007


------------------------------------------------------------
revno: 142
committer: James Westby <jw+debian at jameswestby.net>
branch nick: merge_upstream
timestamp: Sun 2007-07-08 10:42:08 +0100
message:
  Support repacking over any transport.
  
  The orig_file of repack_tarball can now be any URI or local path.
  Transports are used to open the file.
  
  Remote destinations are still not supported.
modified:
  repack_tarball.py
-------------- next part --------------
=== modified file 'repack_tarball.py'
--- a/repack_tarball.py	2007-07-01 14:23:31 +0000
+++ b/repack_tarball.py	2007-07-08 09:42:08 +0000
@@ -28,6 +28,8 @@
                            BzrCommandError,
                            NotADirectory,
                            )
+from bzrlib.transport import get_transport
+from bzrlib import urlutils
 
 
 def repack_tarball(orig_name, new_name, target_dir=None):
@@ -76,30 +78,36 @@
     finally:
       tar.close()
   else:
-    if orig_name.endswith('.tar.gz') or orig_name.endswith('.tgz'):
-      shutil.copyfile(orig_name, new_name)
-    elif orig_name.endswith('.tar'):
-      f = open(orig_name)
-      try:
+    base_dir, path = urlutils.split(orig_name)
+    transport = get_transport(base_dir)
+    trans_file = transport.get(path)
+    try:
+      if orig_name.endswith('.tar.gz') or orig_name.endswith('.tgz'):
+        dest = open(new_name, 'wb')
+        try:
+          dest.write(trans_file.read())
+        finally:
+          dest.close()
+      elif orig_name.endswith('.tar'):
         gz = gzip.GzipFile(new_name, 'w')
         try:
-          gz.write(f.read())
+          gz.write(trans_file.read())
         finally:
           gz.close()
-      finally:
-        f.close()
-    elif orig_name.endswith('.tar.bz2'):
-      old_tar = tarfile.open(orig_name, 'r:bz2')
-      try:
-        new_tar = tarfile.open(new_name, 'w:gz')
+      elif orig_name.endswith('.tar.bz2'):
+        old_tar = tarfile.open(orig_name, 'r|bz2', trans_file)
         try:
-          for old_member in old_tar.getmembers():
-            new_tar.addfile(old_member)
+          new_tar = tarfile.open(new_name, 'w|gz')
+          try:
+            for old_member in old_tar.getmembers():
+              new_tar.addfile(old_member)
+          finally:
+            new_tar.close()
         finally:
-          new_tar.close()
-      finally:
-        old_tar.close()
-    else:
-      raise BzrCommandError('Unsupported format for repack: %s' % orig_name)
-  # TODO: handle zip files.
+          old_tar.close()
+      else:
+        raise BzrCommandError('Unsupported format for repack: %s' % orig_name)
+      # TODO: handle zip files.
+    finally:
+      trans_file.close()
 



More information about the Pkg-bazaar-commits mailing list