1
0
Fork 0
mirror of https://codeberg.org/Mo8it/dotfiles.git synced 2024-10-17 20:52:40 +00:00

Use last snapshot

This commit is contained in:
Mo 2022-09-24 21:45:19 +02:00
parent 278af2f184
commit d5d5c2e8d7

View file

@ -1,5 +1,6 @@
#!/usr/bin/python3 #!/usr/bin/env python3
import json
import subprocess import subprocess
from getpass import getpass from getpass import getpass
from os import environ from os import environ
@ -18,9 +19,9 @@ def decorated_print(str: str):
def write_home_visible_includes(): def write_home_visible_includes():
home_visible_content = set( home_visible_content = set(
run( run("fd -d 1 '.*' ~", check=True, stdout=subprocess.PIPE, text=True)
"fd -d 1 '.*' ~", check=True, stdout=subprocess.PIPE, text=True .stdout.strip()
).stdout.split() .split()
) )
home_visible_excludes = [] home_visible_excludes = []
@ -67,6 +68,18 @@ def mounted_backup_drive():
return mounted_drives_path / mounted_backup_drives[ind] return mounted_drives_path / mounted_backup_drives[ind]
def get_parent_snapshot(env):
snapshots_json = run(
"restic snapshots -q --latest 1 --json",
env=env,
check=True,
stdout=subprocess.PIPE,
text=True,
).stdout.strip()
return json.loads(snapshots_json)[-1]["id"]
def pre_backup(): def pre_backup():
password = getpass("Restic repo password: ") password = getpass("Restic repo password: ")
@ -94,20 +107,31 @@ def pre_backup():
env = environ.copy() env = environ.copy()
env["RESTIC_REPOSITORY"] = repo env["RESTIC_REPOSITORY"] = repo
env["RESTIC_PASSWORD"] = password env["RESTIC_PASSWORD"] = password
env["RESTIC_COMPRESSION"] = "auto"
if init_repo: if init_repo:
run("restic init", env=env, check=True) run("restic init", env=env, check=True)
parent_snapshot = None
else:
parent_snapshot = get_parent_snapshot(env)
return env decorated_print(f"Parent snapshot: {parent_snapshot}")
return env, parent_snapshot
def backup(env): def backup(env, parent_snapshot):
home_visible_includes = CONFIG_PATH / "home_visible_includes.txt" home_visible_includes = CONFIG_PATH / "home_visible_includes.txt"
includes = CONFIG_PATH / "includes.txt" includes = CONFIG_PATH / "includes.txt"
excludes = CONFIG_PATH / "excludes.txt" excludes = CONFIG_PATH / "excludes.txt"
if parent_snapshot is not None:
parent_arg = "--parent " + parent_snapshot
else:
parent_arg = ""
run( run(
f"restic backup -v --files-from {home_visible_includes} --files-from {includes} --exclude-file {excludes}", f"restic backup -v {parent_arg} --files-from {home_visible_includes} --files-from {includes} --exclude-file {excludes}",
env=env, env=env,
check=True, check=True,
) )
@ -120,9 +144,9 @@ def post_backup(env):
def main(): def main():
env = pre_backup() env, parent_snapshot = pre_backup()
backup(env) backup(env, parent_snapshot)
post_backup(env) post_backup(env)