From c03a6d53e38254bd04a421069a1eadbc0fe877ac Mon Sep 17 00:00:00 2001 From: "A. Murat Eren" Date: Fri, 24 Jun 2005 08:53:51 +0000 Subject: [PATCH] Symlink ve permissionlar ile ilgili bir sorunumuz kalmadi.. Dosya sisteminde nasilsa oyle zipliyoruz, zip icinde nasilsa oyle aciyoruz. --- pisi/archive.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/pisi/archive.py b/pisi/archive.py index 1b246f03..fbc1e4e7 100644 --- a/pisi/archive.py +++ b/pisi/archive.py @@ -75,12 +75,20 @@ class ArchiveZip(ArchiveBase): def add_file(self, fileName): """Add file or directory to a zip file""" - if os.path.isdir(fileName): + if os.path.isdir(fileName) and not os.path.islink(fileName): self.zip.writestr(fileName + '/', '') for f in os.listdir(fileName): self.add_file(fileName + '/' + f) else: - self.zip.write(fileName, fileName, zipfile.ZIP_DEFLATED) + if os.path.islink(fileName): + dest = os.readlink(fileName) + attr = zipfile.ZipInfo() + attr.filename = fileName + attr.create_system = 3 + attr.external_attr = 2716663808L # long of hex val '0xA1ED0000L' + self.zip.writestr(attr, dest) + else: + self.zip.write(fileName, fileName, zipfile.ZIP_DEFLATED) def unpack_file_cond(self, pred, targetDir, archiveRoot=''): """Unpack/Extract a file according to predicate function filename -> @@ -118,9 +126,9 @@ class ArchiveZip(ArchiveBase): else: inf = zip.getinfo(fileName) perm = inf.external_attr - perm &= 0x00FF0000; - perm >>= 16; - perm |= 0x00000100; + perm &= 0x00FF0000 + perm >>= 16 + perm |= 0x00000100 buff = open (ofile, 'wb') fileContent = zip.read(fileName) buff.write(fileContent)