]> git.phdru.name Git - dotfiles.git/blobdiff - bin/unzip.py
Feat(zip): Save and restore symlinks
[dotfiles.git] / bin / unzip.py
index 57af7b1d5a277eec95eb5b9e1e6265c57c98750d..ab62d240cf83482892dbcd08a0437cf1aa997fb0 100755 (executable)
@@ -42,10 +42,15 @@ for zinfo in zf.infolist():
 
     if not tgt.endswith('/'):
         infile = zf.open(zinfo.filename)
-        fp = open(tgt, 'wb')
-        copyfileobj(infile, fp)
-        fp.close()
+        if zinfo.external_attr == 0xA1ED0000:
+            os.symlink(infile.read(), tgt)
+        else:  # regular file
+            fp = open(tgt, 'wb')
+            copyfileobj(infile, fp)
+            fp.close()
         infile.close()
-    dt = time.mktime(zinfo.date_time + (0, 0, -1))
-    os.utime(tgt, (dt, dt))
+    if zinfo.external_attr != 0xA1ED0000:
+        # set timestamp for directories and files but not symlinks
+        dt = time.mktime(zinfo.date_time + (0, 0, -1))
+        os.utime(tgt, (dt, dt))
 zf.close()