Merge feat/install-4-backup into feat/install-5-native

This commit is contained in:
Alex committed 2026-09-16 22:01:46 +01:00
commit 20f4729571
2 files changed
+11 -6

No files matched your search

+9 -5
View File
@@ -117,13 +117,17 @@ class Docker:
def import_volume(self, volume: str, source: Path, image: str) -> None:
"""Replace ``volume``'s contents with the tar at ``source``; the volume is created when missing."""
# Unpack into the container's own filesystem first, so a truncated or corrupt tar fails
# before the live volume is touched rather than halfway through emptying it. It goes under
# /tmp because the image does not run as root and cannot write to /.
staging = "/tmp/docsgpt-restore"
script = (
f"set -e; rm -rf {staging}; mkdir -p {staging}; tar xf - -C {staging}; "
f"find /data -mindepth 1 -delete; tar cf - -C {staging} . | tar xf - -C /data"
)
with source.open("rb") as handle:
self._run(
["docker", "run", "--rm", "-i", "-v", f"{volume}:/data", image, "sh", "-c",
# Unpack into the container's own filesystem first: a truncated or corrupt tar must
# fail before the live volume is touched, not halfway through emptying it.
"set -e; rm -rf /stage; mkdir /stage; tar xf - -C /stage; "
"find /data -mindepth 1 -delete; tar cf - -C /stage . | tar xf - -C /data"],
["docker", "run", "--rm", "-i", "-v", f"{volume}:/data", image, "sh", "-c", script],
stdin=handle,
)
+2 -1
View File
@@ -130,7 +130,8 @@ class TestVolumes:
assert args[-2] == "-c"
assert "tar xf - -C /data" in args[-1]
command = args[-1]
assert command.index("tar xf - -C /stage") < command.index("find /data -mindepth 1 -delete"), (
assert "mkdir -p /tmp/" in command, "the image does not run as root, so staging goes under /tmp"
assert command.index("tar xf - -C /tmp/") < command.index("find /data -mindepth 1 -delete"), (
"the incoming tar is unpacked outside the volume first, so a corrupt one leaves it alone"
)
assert runner.streams[0][1] is not None, "the tar is fed in on stdin"