diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2022-02-17 12:43:40 +0100 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2022-02-17 12:43:40 +0100 |
| commit | 733c9c7501f48f98946d40230a1b94397c35c51e (patch) | |
| tree | 5d61e42d70d3c11a33e4a511e24f0d1944e49c72 /hosts/vidhar/borg | |
| parent | 909b2a07444d84c15d56e27535bfe39d4b8270fd (diff) | |
| download | nixos-733c9c7501f48f98946d40230a1b94397c35c51e.tar nixos-733c9c7501f48f98946d40230a1b94397c35c51e.tar.gz nixos-733c9c7501f48f98946d40230a1b94397c35c51e.tar.bz2 nixos-733c9c7501f48f98946d40230a1b94397c35c51e.tar.xz nixos-733c9c7501f48f98946d40230a1b94397c35c51e.zip | |
vidhar: ...
Diffstat (limited to 'hosts/vidhar/borg')
| -rwxr-xr-x | hosts/vidhar/borg/copy.py | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/hosts/vidhar/borg/copy.py b/hosts/vidhar/borg/copy.py index 679c9ad1..db907297 100755 --- a/hosts/vidhar/borg/copy.py +++ b/hosts/vidhar/borg/copy.py | |||
| @@ -33,17 +33,20 @@ parser.add_argument('target', metavar='REPO_OR_ARCHIVE') | |||
| 33 | args = parser.parse_args() | 33 | args = parser.parse_args() |
| 34 | 34 | ||
| 35 | halo_args = { | 35 | halo_args = { |
| 36 | 'stream': sys.stderr, | 36 | 'stream': stderr, |
| 37 | 'enabled': sys.stderr.isatty(), | 37 | 'enabled': stderr.isatty(), |
| 38 | 'spinner': 'arc' | 38 | 'spinner': 'arc' |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | def read_repo(path): | 41 | def read_repo(path): |
| 42 | with Halo(text=f'Listing {path}', **halo_args) as sp: | 42 | with Halo(text=f'Listing {path}', **halo_args) as sp: |
| 43 | res = None | 43 | res = None |
| 44 | with subprocess.Popen(['borg', 'list', '--info', '--lock-wait', '120', '--json', path], stdout=subprocess.PIPE) as proc: | 44 | with subprocess.Popen(['borg', 'list', '--debug', '--lock-wait', '120', '--json', path], stdout=subprocess.PIPE) as proc: |
| 45 | res = json.load(proc.stdout)['archives'] | 45 | res = json.load(proc.stdout)['archives'] |
| 46 | sp.succeed(f'{len(res)} archives in {path}') | 46 | if sp.enabled: |
| 47 | sp.succeed(f'{len(res)} archives in {path}') | ||
| 48 | else: | ||
| 49 | print(f'{len(res)} archives in {path}', file=stderr) | ||
| 47 | return res | 50 | return res |
| 48 | 51 | ||
| 49 | class ToSync: | 52 | class ToSync: |
| @@ -73,7 +76,10 @@ def copy_archive(src_repo_path, dst_repo_path, entry): | |||
| 73 | repo_id = json.load(proc.stdout)['repository']['id'] | 76 | repo_id = json.load(proc.stdout)['repository']['id'] |
| 74 | if repo_id: | 77 | if repo_id: |
| 75 | cache_suffix = f'{repo_id}_{match.group(1)}' | 78 | cache_suffix = f'{repo_id}_{match.group(1)}' |
| 76 | sp.succeed(f'Will process {entry["name"]} ({dateutil.parser.isoparse(entry["start"])}, cache_suffix={cache_suffix})') | 79 | if sp.enabled: |
| 80 | sp.succeed(f'Will process {entry["name"]} ({dateutil.parser.isoparse(entry["start"])}, cache_suffix={cache_suffix})') | ||
| 81 | else: | ||
| 82 | print(f'Will process {entry["name"]} ({dateutil.parser.isoparse(entry["start"])}, cache_suffix={cache_suffix})', file=stderr) | ||
| 77 | with TemporaryDirectory(prefix=f'borg-mount_{entry["name"]}_') as tmpdir: | 83 | with TemporaryDirectory(prefix=f'borg-mount_{entry["name"]}_') as tmpdir: |
| 78 | child = os.fork() | 84 | child = os.fork() |
| 79 | if child == 0: | 85 | if child == 0: |
| @@ -105,7 +111,10 @@ def copy_archive(src_repo_path, dst_repo_path, entry): | |||
| 105 | stats = json.load(proc.stdout)['archives'][0]['stats'] | 111 | stats = json.load(proc.stdout)['archives'][0]['stats'] |
| 106 | total_size = stats['original_size'] | 112 | total_size = stats['original_size'] |
| 107 | total_files = stats['nfiles'] | 113 | total_files = stats['nfiles'] |
| 108 | sp.succeed(f'{total_files} files, {naturalsize(total_size, binary=True)}') | 114 | if sp.enabled: |
| 115 | sp.succeed(f'{total_files} files, {naturalsize(total_size, binary=True)}') | ||
| 116 | else: | ||
| 117 | print(f'{total_files} files, {naturalsize(total_size, binary=True)}', file=stderr) | ||
| 109 | # print(f'Mounting to {dir}', file=stderr) | 118 | # print(f'Mounting to {dir}', file=stderr) |
| 110 | with subprocess.Popen(['borg', 'mount', '--foreground', '--progress', '--lock-wait', '120', f'{src_repo_path}::{entry["name"]}', dir]) as mount_proc: | 119 | with subprocess.Popen(['borg', 'mount', '--foreground', '--progress', '--lock-wait', '120', f'{src_repo_path}::{entry["name"]}', dir]) as mount_proc: |
| 111 | with Halo(text='Waiting for mount', **halo_args) as sp: | 120 | with Halo(text='Waiting for mount', **halo_args) as sp: |
| @@ -117,7 +126,10 @@ def copy_archive(src_repo_path, dst_repo_path, entry): | |||
| 117 | elif datetime.now() - wait_start > timedelta(minutes=10): | 126 | elif datetime.now() - wait_start > timedelta(minutes=10): |
| 118 | ret.check_returncode() | 127 | ret.check_returncode() |
| 119 | sleep(0.1) | 128 | sleep(0.1) |
| 120 | sp.succeed('Mounted') | 129 | if sp.enabled: |
| 130 | sp.succeed('Mounted') | ||
| 131 | else: | ||
| 132 | print('Mounted', file=stderr) | ||
| 121 | while True: | 133 | while True: |
| 122 | try: | 134 | try: |
| 123 | with tqdm(total=total_size, unit_scale=True, unit_divisor=1024, unit='B', smoothing=0.01, disable=None, dynamic_ncols=True, maxinterval=0.5, miniters=1) as progress: | 135 | with tqdm(total=total_size, unit_scale=True, unit_divisor=1024, unit='B', smoothing=0.01, disable=None, dynamic_ncols=True, maxinterval=0.5, miniters=1) as progress: |
