Mercurial > hg
comparison mercurial/archival.py @ 44577:f8427841c8fc
merge with stable
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Fri, 20 Mar 2020 17:18:14 +0900 |
parents | e786d69c665d b7ca03dff14c |
children | 2c0043977b6d a56ba57c837d |
comparison
equal
deleted
inserted
replaced
44576:2ec6160449aa | 44577:f8427841c8fc |
---|---|
133 | 133 |
134 class tarit(object): | 134 class tarit(object): |
135 '''write archive to tar file or stream. can write uncompressed, | 135 '''write archive to tar file or stream. can write uncompressed, |
136 or compress with gzip or bzip2.''' | 136 or compress with gzip or bzip2.''' |
137 | 137 |
138 class GzipFileWithTime(gzip.GzipFile): | 138 if pycompat.ispy3: |
139 def __init__(self, *args, **kw): | 139 GzipFileWithTime = gzip.GzipFile # camelcase-required |
140 timestamp = None | 140 else: |
141 if 'timestamp' in kw: | 141 |
142 timestamp = kw.pop('timestamp') | 142 class GzipFileWithTime(gzip.GzipFile): |
143 if timestamp is None: | 143 def __init__(self, *args, **kw): |
144 self.timestamp = time.time() | 144 timestamp = None |
145 else: | 145 if 'mtime' in kw: |
146 self.timestamp = timestamp | 146 timestamp = kw.pop('mtime') |
147 gzip.GzipFile.__init__(self, *args, **kw) | 147 if timestamp is None: |
148 | 148 self.timestamp = time.time() |
149 def _write_gzip_header(self): | 149 else: |
150 self.fileobj.write(b'\037\213') # magic header | 150 self.timestamp = timestamp |
151 self.fileobj.write(b'\010') # compression method | 151 gzip.GzipFile.__init__(self, *args, **kw) |
152 fname = self.name | 152 |
153 if fname and fname.endswith(b'.gz'): | 153 def _write_gzip_header(self): |
154 fname = fname[:-3] | 154 self.fileobj.write(b'\037\213') # magic header |
155 flags = 0 | 155 self.fileobj.write(b'\010') # compression method |
156 if fname: | 156 fname = self.name |
157 flags = gzip.FNAME # pytype: disable=module-attr | 157 if fname and fname.endswith(b'.gz'): |
158 self.fileobj.write(pycompat.bytechr(flags)) | 158 fname = fname[:-3] |
159 gzip.write32u( # pytype: disable=module-attr | 159 flags = 0 |
160 self.fileobj, int(self.timestamp) | 160 if fname: |
161 ) | 161 flags = gzip.FNAME # pytype: disable=module-attr |
162 self.fileobj.write(b'\002') | 162 self.fileobj.write(pycompat.bytechr(flags)) |
163 self.fileobj.write(b'\377') | 163 gzip.write32u( # pytype: disable=module-attr |
164 if fname: | 164 self.fileobj, int(self.timestamp) |
165 self.fileobj.write(fname + b'\000') | 165 ) |
166 self.fileobj.write(b'\002') | |
167 self.fileobj.write(b'\377') | |
168 if fname: | |
169 self.fileobj.write(fname + b'\000') | |
166 | 170 |
167 def __init__(self, dest, mtime, kind=b''): | 171 def __init__(self, dest, mtime, kind=b''): |
168 self.mtime = mtime | 172 self.mtime = mtime |
169 self.fileobj = None | 173 self.fileobj = None |
170 | 174 |
176 gzfileobj = self.GzipFileWithTime( | 180 gzfileobj = self.GzipFileWithTime( |
177 name, | 181 name, |
178 pycompat.sysstr(mode + b'b'), | 182 pycompat.sysstr(mode + b'b'), |
179 zlib.Z_BEST_COMPRESSION, | 183 zlib.Z_BEST_COMPRESSION, |
180 fileobj, | 184 fileobj, |
181 timestamp=mtime, | 185 mtime=mtime, |
182 ) | 186 ) |
183 self.fileobj = gzfileobj | 187 self.fileobj = gzfileobj |
184 return tarfile.TarFile.taropen( # pytype: disable=attribute-error | 188 return tarfile.TarFile.taropen( # pytype: disable=attribute-error |
185 name, pycompat.sysstr(mode), gzfileobj | 189 name, pycompat.sysstr(mode), gzfileobj |
186 ) | 190 ) |