@@ -339,7 +339,7 @@ class _Stream:
339339 """
340340
341341 def __init__ (self , name , mode , comptype , fileobj , bufsize ,
342- compresslevel , preset ):
342+ compresslevel , preset , mtime ):
343343 """Construct a _Stream object.
344344 """
345345 self ._extfileobj = True
@@ -374,7 +374,7 @@ def __init__(self, name, mode, comptype, fileobj, bufsize,
374374 self .exception = zlib .error
375375 self ._init_read_gz ()
376376 else :
377- self ._init_write_gz (compresslevel )
377+ self ._init_write_gz (compresslevel , mtime )
378378
379379 elif comptype == "bz2" :
380380 try :
@@ -423,15 +423,17 @@ def __del__(self):
423423 if hasattr (self , "closed" ) and not self .closed :
424424 self .close ()
425425
426- def _init_write_gz (self , compresslevel ):
426+ def _init_write_gz (self , compresslevel , mtime ):
427427 """Initialize for writing with gzip compression.
428428 """
429429 self .cmp = self .zlib .compressobj (compresslevel ,
430430 self .zlib .DEFLATED ,
431431 - self .zlib .MAX_WBITS ,
432432 self .zlib .DEF_MEM_LEVEL ,
433433 0 )
434- timestamp = struct .pack ("<L" , int (time .time ()))
434+ if mtime is None :
435+ mtime = int (time .time ())
436+ timestamp = struct .pack ("<L" , mtime )
435437 self .__write (b"\037 \213 \010 \010 " + timestamp + b"\002 \377 " )
436438 if self .name .endswith (".gz" ):
437439 self .name = self .name [:- 3 ]
@@ -1726,7 +1728,7 @@ class TarFile(object):
17261728 def __init__ (self , name = None , mode = "r" , fileobj = None , format = None ,
17271729 tarinfo = None , dereference = None , ignore_zeros = None , encoding = None ,
17281730 errors = "surrogateescape" , pax_headers = None , debug = None ,
1729- errorlevel = None , copybufsize = None , stream = False ):
1731+ errorlevel = None , copybufsize = None , stream = False , mtime = None ):
17301732 """Open an (uncompressed) tar archive 'name'. 'mode' is either 'r' to
17311733 read from an existing archive, 'a' to append data to an existing
17321734 file or 'w' to create a new file overwriting an existing one. 'mode'
@@ -1932,8 +1934,9 @@ def not_compressed(comptype):
19321934
19331935 compresslevel = kwargs .pop ("compresslevel" , 6 )
19341936 preset = kwargs .pop ("preset" , None )
1937+ mtime = kwargs .pop ("mtime" , None )
19351938 stream = _Stream (name , filemode , comptype , fileobj , bufsize ,
1936- compresslevel , preset )
1939+ compresslevel , preset , mtime )
19371940 try :
19381941 t = cls (name , filemode , stream , ** kwargs )
19391942 except :
@@ -1969,7 +1972,8 @@ def gzopen(cls, name, mode="r", fileobj=None, compresslevel=6, **kwargs):
19691972 raise CompressionError ("gzip module is not available" ) from None
19701973
19711974 try :
1972- fileobj = GzipFile (name , mode + "b" , compresslevel , fileobj )
1975+ mtime = kwargs .pop ("mtime" , None )
1976+ fileobj = GzipFile (name , mode + "b" , compresslevel , fileobj , mtime = mtime )
19731977 except OSError as e :
19741978 if fileobj is not None and mode == 'r' :
19751979 raise ReadError ("not a gzip file" ) from e
0 commit comments