mirror of
https://github.com/tiennm99/DocsGPT.git
synced 2026-10-13 08:15:43 +00:00
Merge feat/install-4-backup into feat/install-5-native
This commit is contained in:
commit
20f4729571
2 files changed
+11
-6
No files matched your search
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user