summaryrefslogtreecommitdiffstats
path: root/pkgs/build-support/docker
diff options
context:
space:
mode:
authorUtku Demir <me@utdemir.com>2020-06-21 12:09:22 +1200
committerUtku Demir <me@utdemir.com>2020-06-21 12:35:38 +1200
commitf1d7a09146678b60f78b08c2dec3ce14dc59499f (patch)
treefcdf8a29be07e9280b3b1eaf7b93bd4f736cd4d0 /pkgs/build-support/docker
parent26402290bfdec5b012dc66c1d0418ad7ffdb284e (diff)
stream_layered_image: Add docstrings to functions
Diffstat (limited to 'pkgs/build-support/docker')
-rw-r--r--pkgs/build-support/docker/stream_layered_image.py64
1 files changed, 57 insertions, 7 deletions
diff --git a/pkgs/build-support/docker/stream_layered_image.py b/pkgs/build-support/docker/stream_layered_image.py
index 44c6cbba21c6..d7267b25672d 100644
--- a/pkgs/build-support/docker/stream_layered_image.py
+++ b/pkgs/build-support/docker/stream_layered_image.py
@@ -44,8 +44,19 @@ from datetime import datetime
from collections import namedtuple
-# Adds the given store paths to as a tar to the given writable stream.
def archive_paths_to(obj, paths, mtime, add_nix, filter=None):
+ """
+ Writes the given store paths as a tar file to the given stream.
+
+ obj: Stream to write to. Should have a 'write' method.
+ paths: List of store paths.
+ add_nix: Whether /nix and /nix/store directories should be
+ prepended to the archive.
+ filter: An optional transformation to be applied to TarInfo
+ objects. Should take a single TarInfo object and return
+ another one. Defaults to identity.
+ """
+
filter = filter if filter else lambda i: i
# gettarinfo makes the paths relative, this makes them
@@ -92,9 +103,12 @@ def archive_paths_to(obj, paths, mtime, add_nix, filter=None):
tar.addfile(ti)
-# A writable stream which only calculates the final file size and
-# sha256sum, while discarding the actual contents.
class ExtractChecksum:
+ """
+ A writable stream which only calculates the final file size and
+ sha256sum, while discarding the actual contents.
+ """
+
def __init__(self):
self._digest = hashlib.sha256()
self._size = 0
@@ -104,6 +118,9 @@ class ExtractChecksum:
self._size += len(data)
def extract(self):
+ """
+ Returns: Hex-encoded sha256sum and size as a tuple.
+ """
return (self._digest.hexdigest(), self._size)
@@ -111,9 +128,24 @@ class ExtractChecksum:
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, mtime, add_nix=True, filter=None):
+ """
+ Appends given store paths to a TarFile object as a new layer.
+
+ tar: 'tarfile.TarFile' object for the new layer to be added to.
+ paths: List of store paths.
+ mtime: 'mtime' of the added files and the layer tarball.
+ Should be an integer representing a POSIX time.
+ add_nix: Whether /nix and /nix/store directories should be
+ added to a layer.
+ filter: An optional transformation to be applied to TarInfo
+ objects inside the layer. Should take a single TarInfo
+ object and return another one. Defaults to identity.
+
+ Returns: A 'LayerInfo' object containing some metadata of
+ the layer added.
+ """
+
assert all(i.startswith("/nix/store/") for i in paths)
# First, calculate the tarball checksum and the size.
@@ -157,8 +189,19 @@ def add_layer_dir(tar, paths, mtime, add_nix=True, filter=None):
return LayerInfo(size=size, checksum=checksum, path=path, paths=paths)
-# Adds the contents of the store path to the root as a new layer.
def add_customisation_layer(tar, path, mtime):
+ """
+ Adds the contents of the store path as a new layer. This is different
+ than the 'add_layer_dir' function defaults in the sense that the contents
+ of a single store path will be added to the root of the layer. eg (without
+ the /nix/store prefix).
+
+ tar: 'tarfile.TarFile' object for the new layer to be added to.
+ path: A store path.
+ mtime: 'mtime' of the added files and the layer tarball. Should be an
+ integer representing a POSIX time.
+ """
+
def filter(ti):
ti.name = re.sub("^/nix/store/[^/]*", "", ti.name)
return ti
@@ -171,8 +214,15 @@ def add_customisation_layer(tar, path, mtime):
)
-# Adds a file to the tarball with given path and contents.
def add_bytes(tar, path, content, mtime):
+ """
+ Adds a file to the tarball with given path and contents.
+
+ tar: 'tarfile.TarFile' object.
+ path: Path of the file as a string.
+ content: Contents of the file.
+ mtime: 'mtime' of the file. Should be an integer representing a POSIX time.
+ """
assert type(content) is bytes
ti = tarfile.TarInfo(path)