archive: set date to 1980 for very old zip files
The zip file format stores the date using "MS-DOS format" which
apparently means that they use 1980 as their epoch. Python's zipfile
module emits deprecation warnings of this form
/usr/lib/python2.6/zipfile.py:1108: DeprecationWarning: struct
integer overflow masking is deprecated
self.fp.write(zinfo.FileHeader())
/usr/lib/python2.6/zipfile.py:1108: DeprecationWarning: 'H' format
requires 0 <= number <= 65535
self.fp.write(zinfo.FileHeader())
/home/mg/src/mercurial-crew/mercurial/archival.py:169:
DeprecationWarning: struct integer overflow masking is deprecated
self.z.close()
/home/mg/src/mercurial-crew/mercurial/archival.py:169:
DeprecationWarning: 'H' format requires 0 <= number <= 65535
self.z.close()
when it is given such old timestamps. This fixes this by silently
clamping the date to 1980.
--- a/mercurial/archival.py Fri Sep 17 12:44:35 2010 -0500
+++ b/mercurial/archival.py Mon Sep 20 15:33:39 2010 +0200
@@ -139,6 +139,13 @@
self.z = zipfile.ZipFile(dest, 'w',
compress and zipfile.ZIP_DEFLATED or
zipfile.ZIP_STORED)
+
+ # Python's zipfile module emits deprecation warnings if we try
+ # to store files with a date before 1980.
+ epoch = 315532800 # calendar.timegm((1980, 1, 1, 0, 0, 0, 1, 1, 0))
+ if mtime < epoch:
+ mtime = epoch
+
self.date_time = time.gmtime(mtime)[:6]
def addfile(self, name, mode, islink, data):
--- a/tests/test-archive Fri Sep 17 12:44:35 2010 -0500
+++ b/tests/test-archive Mon Sep 20 15:33:39 2010 +0200
@@ -140,4 +140,11 @@
cd ../empty
hg archive ../test-empty
+echo '% old file -- date clamped to 1980'
+touch -d 1975-01-01 old
+hg add old
+hg commit -m old
+hg archive ../old.zip
+unzip -l ../old.zip
+
exit 0
--- a/tests/test-archive.out Fri Sep 17 12:44:35 2010 -0500
+++ b/tests/test-archive.out Mon Sep 20 15:33:39 2010 +0200
@@ -80,3 +80,11 @@
% server errors
% empty repo
abort: no working directory: please specify a revision
+% old file -- date clamped to 1980
+Archive: ../old.zip
+ Length Date Time Name
+--------- ---------- ----- ----
+ 147 1980-01-01 00:00 old/.hg_archival.txt
+ 0 1980-01-01 00:00 old/old
+--------- -------
+ 147 2 files