mercurial/archival.py
changeset 13668 9a41af6b9f29
parent 13400 14f3795a5ed7
child 13970 d13913355390
equal deleted inserted replaced
13667:8cbb59124e67 13668:9a41af6b9f29
     7 
     7 
     8 from i18n import _
     8 from i18n import _
     9 from node import hex
     9 from node import hex
    10 import cmdutil
    10 import cmdutil
    11 import util, encoding
    11 import util, encoding
    12 import cStringIO, os, stat, tarfile, time, zipfile
    12 import cStringIO, os, tarfile, time, zipfile
    13 import zlib, gzip
    13 import zlib, gzip
    14 
    14 
    15 def tidyprefix(dest, kind, prefix):
    15 def tidyprefix(dest, kind, prefix):
    16     '''choose prefix to use for names in archive.  make sure prefix is
    16     '''choose prefix to use for names in archive.  make sure prefix is
    17     safe for consumers.'''
    17     safe for consumers.'''
   170         i = zipfile.ZipInfo(name, self.date_time)
   170         i = zipfile.ZipInfo(name, self.date_time)
   171         i.compress_type = self.z.compression
   171         i.compress_type = self.z.compression
   172         # unzip will not honor unix file modes unless file creator is
   172         # unzip will not honor unix file modes unless file creator is
   173         # set to unix (id 3).
   173         # set to unix (id 3).
   174         i.create_system = 3
   174         i.create_system = 3
   175         ftype = stat.S_IFREG
   175         ftype = 0x8000 # UNX_IFREG in unzip source code
   176         if islink:
   176         if islink:
   177             mode = 0777
   177             mode = 0777
   178             ftype = stat.S_IFLNK
   178             ftype = 0xa000 # UNX_IFLNK in unzip source code
   179         i.external_attr = (mode | ftype) << 16L
   179         i.external_attr = (mode | ftype) << 16L
   180         self.z.writestr(i, data)
   180         self.z.writestr(i, data)
   181 
   181 
   182     def done(self):
   182     def done(self):
   183         self.z.close()
   183         self.z.close()