Refactoring

This commit is contained in:
Maks Snegov 2021-06-21 10:25:13 +03:00
parent 874f2de9ff
commit 5e042a73c1
2 changed files with 19 additions and 25 deletions

View File

@ -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:

View File

@ -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)