Mercurial > hg
changeset 17629:331d611813ec
Merge with crew-stable
author | Bryan O'Sullivan <bryano@fb.com> |
---|---|
date | Wed, 19 Sep 2012 09:38:51 -0700 |
parents | 84f12b832ee8 (current diff) 133d13e44544 (diff) |
children | ff5ed1ecd43a |
files | mercurial/archival.py tests/test-archive.t |
diffstat | 2 files changed, 38 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/archival.py Tue Sep 18 21:39:12 2012 +0900 +++ b/mercurial/archival.py Wed Sep 19 09:38:51 2012 -0700 @@ -12,6 +12,7 @@ import scmutil, util, encoding import cStringIO, os, tarfile, time, zipfile import zlib, gzip +import struct # from unzip source code: _UNX_IFREG = 0x8000 @@ -169,6 +170,7 @@ if mtime < epoch: mtime = epoch + self.mtime = mtime self.date_time = time.gmtime(mtime)[:6] def addfile(self, name, mode, islink, data): @@ -182,6 +184,14 @@ mode = 0777 ftype = _UNX_IFLNK i.external_attr = (mode | ftype) << 16L + # add "extended-timestamp" extra block, because zip archives + # without this will be extracted with unexpected timestamp, + # if TZ is not configured as GMT + i.extra += struct.pack('<hhBl', + 0x5455, # block type: "extended-timestamp" + 1 + 4, # size of this block + 1, # "modification time is present" + self.mtime) # time of last modification (UTC) self.z.writestr(i, data) def done(self):
--- a/tests/test-archive.t Tue Sep 18 21:39:12 2012 +0900 +++ b/tests/test-archive.t Wed Sep 19 09:38:51 2012 -0700 @@ -270,3 +270,31 @@ \s*147\s+2 files (re) $ cd .. + +issue3600: check whether "hg archive" can create archive files which +are extracted with expected timestamp, even though TZ is not +configured as GMT. + + $ mkdir issue3600 + $ cd issue3600 + + $ hg init repo + $ echo a > repo/a + $ hg -R repo add repo/a + $ hg -R repo commit -m '#0' -d '456789012 21600' + $ cat > show_mtime.py <<EOF + > import sys, os + > print int(os.stat(sys.argv[1]).st_mtime) + > EOF + + $ hg -R repo archive --prefix tar-extracted archive.tar + $ (TZ=UTC-3; export TZ; tar xf archive.tar) + $ python show_mtime.py tar-extracted/a + 456789012 + + $ hg -R repo archive --prefix zip-extracted archive.zip + $ (TZ=UTC-3; export TZ; unzip -q archive.zip) + $ python show_mtime.py zip-extracted/a + 456789012 + + $ cd ..