about summary refs log tree commit diff
path: root/pkgs/build-support
diff options
context:
space:
mode:
authorUtku Demir <me@utdemir.com>2020-06-11 12:51:47 +1200
committerUtku Demir <me@utdemir.com>2020-06-21 12:35:38 +1200
commita5a611cacbc11d267d394f2a7bde06c098ef65af (patch)
tree724a89bc56538ce1120b9589ac3b0673e76cc4f9 /pkgs/build-support
parent4e0109f87362ee31f71ee5805806a3915afd3fbd (diff)
Set mtime in even more places
Diffstat (limited to 'pkgs/build-support')
-rw-r--r--pkgs/build-support/docker/stream_layered_image.py27
1 files changed, 15 insertions, 12 deletions
diff --git a/pkgs/build-support/docker/stream_layered_image.py b/pkgs/build-support/docker/stream_layered_image.py
index fd8c2428d9189..f502e855e9542 100644
--- a/pkgs/build-support/docker/stream_layered_image.py
+++ b/pkgs/build-support/docker/stream_layered_image.py
@@ -12,7 +12,7 @@ from collections import namedtuple
 
 
 # Adds the given store paths to as a tar to the given writable stream.
-def archive_paths_to(obj, paths, created, add_nix, filter=None):
+def archive_paths_to(obj, paths, mtime, add_nix, filter=None):
     filter = filter if filter else lambda i: i
 
     # gettarinfo makes the paths relative, this makes them
@@ -22,7 +22,7 @@ def archive_paths_to(obj, paths, created, add_nix, filter=None):
         return ti
 
     def apply_filters(ti):
-        ti.mtime = int(created.timestamp())
+        ti.mtime = mtime
         return filter(ti)
 
     def dir(path):
@@ -77,14 +77,14 @@ LayerInfo = namedtuple("LayerInfo", ["size", "checksum", "path", "paths"])
 
 # Given a list of store paths 'paths', creates a layer add append it
 # to tarfile 'tar'. Returns some a 'LayerInfo' for the layer.
-def add_layer_dir(tar, paths, created, add_nix=True, filter=None):
+def add_layer_dir(tar, paths, mtime, add_nix=True, filter=None):
     assert all(i.startswith("/nix/store/") for i in paths)
 
     extract_checksum = ExtractChecksum()
     archive_paths_to(
         extract_checksum,
         paths,
-        created=created,
+        mtime=mtime,
         add_nix=add_nix,
         filter=filter
     )
@@ -93,6 +93,7 @@ def add_layer_dir(tar, paths, created, add_nix=True, filter=None):
     path = f"{checksum}/layer.tar"
     ti = tarfile.TarInfo(path)
     ti.size = size
+    ti.mtime = mtime
 
     read_fd, write_fd = os.pipe()
     with open(read_fd, "rb") as read, open(write_fd, "wb") as write:
@@ -100,7 +101,7 @@ def add_layer_dir(tar, paths, created, add_nix=True, filter=None):
             archive_paths_to(
                 write,
                 paths,
-                created=created,
+                mtime=mtime,
                 add_nix=add_nix,
                 filter=filter
             )
@@ -111,25 +112,26 @@ def add_layer_dir(tar, paths, created, add_nix=True, filter=None):
     return LayerInfo(size=size, checksum=checksum, path=path, paths=paths)
 
 
-def add_customisation_layer(tar, path, created):
+def add_customisation_layer(tar, path, mtime):
     def filter(ti):
         ti.name = re.sub("^/nix/store/[^/]*", "", ti.name)
         return ti
     return add_layer_dir(
         tar,
         [path],
-        created=created,
+        mtime=mtime,
         add_nix=False,
         filter=filter
       )
 
 
 # Adds a file to the tarball with given path and contents.
-def add_bytes(tar, path, content):
+def add_bytes(tar, path, content, mtime):
     assert type(content) is bytes
 
     ti = tarfile.TarInfo(path)
     ti.size = len(content)
+    ti.mtime = mtime
     tar.addfile(ti, io.BytesIO(content))
 
 
@@ -143,6 +145,7 @@ created = (
   if conf["created"] == "now"
   else datetime.fromisoformat(conf["created"])
 )
+mtime = int(created.timestamp())
 
 with tarfile.open(mode="w|", fileobj=sys.stdout.buffer) as tar:
     layers = []
@@ -151,7 +154,7 @@ with tarfile.open(mode="w|", fileobj=sys.stdout.buffer) as tar:
           "Creating layer", num,
           "from paths:", store_layer,
           file=sys.stderr)
-        info = add_layer_dir(tar, store_layer, created=created)
+        info = add_layer_dir(tar, store_layer, mtime=mtime)
         layers.append(info)
 
     print("Creating the customisation layer...", file=sys.stderr)
@@ -159,7 +162,7 @@ with tarfile.open(mode="w|", fileobj=sys.stdout.buffer) as tar:
       add_customisation_layer(
         tar,
         conf["customisation_layer"],
-        created=created
+        mtime=mtime
       )
     )
 
@@ -186,7 +189,7 @@ with tarfile.open(mode="w|", fileobj=sys.stdout.buffer) as tar:
     image_json = json.dumps(image_json, indent=4).encode("utf-8")
     image_json_checksum = hashlib.sha256(image_json).hexdigest()
     image_json_path = f"{image_json_checksum}.json"
-    add_bytes(tar, image_json_path, image_json)
+    add_bytes(tar, image_json_path, image_json, mtime=mtime)
 
     manifest_json = [
         {
@@ -196,6 +199,6 @@ with tarfile.open(mode="w|", fileobj=sys.stdout.buffer) as tar:
         }
     ]
     manifest_json = json.dumps(manifest_json, indent=4).encode("utf-8")
-    add_bytes(tar, "manifest.json", manifest_json)
+    add_bytes(tar, "manifest.json", manifest_json, mtime=mtime)
 
     print("Done.", file=sys.stderr)