From 5e042a73c16731f6eb46215a52475ddb0ae5c67a Mon Sep 17 00:00:00 2001 From: Maks Snegov Date: Mon, 21 Jun 2021 10:25:13 +0300 Subject: [PATCH] Refactoring --- spqr/curateipsum/backup.py | 18 +++++------------- spqr/curateipsum/fs.py | 26 ++++++++++++++------------ 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/spqr/curateipsum/backup.py b/spqr/curateipsum/backup.py index 83963c6..15c11a3 100644 --- a/spqr/curateipsum/backup.py +++ b/spqr/curateipsum/backup.py @@ -30,17 +30,14 @@ def _get_latest_backup(backup_dir: pathlib.Path) -> Optional[pathlib.Path]: backups = sorted(os.listdir(backup_dir), reverse=True) for b_ent in backups: - b_ent_abs = pathlib.Path(os.path.join(backup_dir, b_ent)) - + b_ent_abs = backup_dir / b_ent if not _is_backup_entity(b_ent_abs): continue - if not os.listdir(b_ent_abs): _lg.info("Removing empty backup entity: %s", b_ent_abs.name) _lg.debug("Removing directory %s", b_ent_abs) os.rmdir(b_ent_abs) continue - return b_ent_abs return None @@ -56,21 +53,16 @@ def initiate_backup(sources, backup_dir: pathlib.Path, dry_run=False): latest_backup = _get_latest_backup(backup_dir) if cur_backup == latest_backup: - _lg.warning( - "Latest backup %s was created less than minute ago, exiting", - latest_backup.name, - ) + _lg.warning("Latest backup %s was created less than minute ago, exiting", + latest_backup.name) return if latest_backup is None: _lg.info("Creating empty directory for current backup: %s", cur_backup.name) os.mkdir(cur_backup) else: - _lg.info( - "Copying data from latest backup %s to current backup %s", - latest_backup.name, - cur_backup.name, - ) + _lg.info("Copying data from latest backup %s to current backup %s", + latest_backup.name, cur_backup.name) hl_res = fs.hardlink_dir(latest_backup, cur_backup) if not hl_res: diff --git a/spqr/curateipsum/fs.py b/spqr/curateipsum/fs.py index a4de87a..e973a77 100644 --- a/spqr/curateipsum/fs.py +++ b/spqr/curateipsum/fs.py @@ -6,7 +6,6 @@ import enum import glob import logging import os -import shutil import subprocess import sys from typing import Iterable @@ -18,16 +17,18 @@ def rsync_ext(src, dst, dry_run=False): """Call external rsync command""" rsync_args = ["rsync"] if dry_run: - rsync_args.append("-n") - rsync_args.append("-a") # archive - rsync_args.append("-z") # compress - rsync_args.append("-h") # human-readable - rsync_args.append("-v") # verbose - rsync_args.append("-u") # don't touch new files on receiver - rsync_args.append("--progress") - rsync_args.append("--del") # delete during - rsync_args.append(src) - rsync_args.append(dst) + rsync_args.append("--dry-run") + rsync_args.append("--archive") + # rsync_args.append("--compress") + # rsync_args.append("--inplace") + rsync_args.append("--whole-file") + rsync_args.append("--human-readable") + rsync_args.append("--delete-during") + rsync_args.append("--itemize-changes") + rsync_args.append(f"{src}/") + rsync_args.append(str(dst)) + + _lg.info("Executing external command: %s", " ".join(rsync_args)) res = subprocess.run(rsync_args) return res @@ -144,7 +145,7 @@ def rsync(src_dir, dst_dir, dry_run=False): # remove dst entries not existing in source if src_entry is None: - _lg.debug("deleting %s", rel_path) + _lg.info("deleting %s", rel_path) rm_direntry(dst_entry) continue @@ -203,6 +204,7 @@ def rsync(src_dir, dst_dir, dry_run=False): _lg.info("updating owners %s", rel_path) os.chown(dst_entry.path, src_stat.st_uid, src_stat.st_gid) + # process remained source entries for rel_path, src_entry in src_files_map.items(): dst_path = os.path.join(dst_root_abs, rel_path) _lg.info("creating %s", rel_path)