equal
deleted
inserted
replaced
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() |