changeset 12319:381f131220ad stable

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.
author Martin Geisler <mg@aragost.com>
date Mon, 20 Sep 2010 15:33:39 +0200
parents ed639917c825
children 40c40c6f20b8
files mercurial/archival.py tests/test-archive tests/test-archive.out
diffstat 3 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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