From 126ae85388b6e378751c5d12547ad1a2574bdbf6 Mon Sep 17 00:00:00 2001 From: Maks Snegov Date: Mon, 21 Jun 2021 08:27:18 +0300 Subject: [PATCH] Add dry-run option --- main.py | 43 ++++++++++++++++++-------------------- spqr/curateipsum/backup.py | 8 ++++++- spqr/curateipsum/fs.py | 2 +- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/main.py b/main.py index 86a2398..894ecf4 100755 --- a/main.py +++ b/main.py @@ -20,28 +20,25 @@ def main(): prog="cura-te-ipsum", description="cura-te-ipsum, my personal backup software.", ) parser.add_argument("-V", "--version", action="version", version="%(prog)s 0.1") - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="print verbose information", - ) - parser.add_argument( - "-b", - type=pathlib.Path, - dest="backup_dir", - metavar="BACKUP_DIR", - required=True, - help="directory, where all backups will be stored", - ) - parser.add_argument( - "sources", - nargs="+", - metavar="SOURCE", - type=pathlib.Path, - help="backup source (file/dir/smth else)", - ) + parser.add_argument("-v", "--verbose", + action="store_true", + default=False, + help="print verbose information") + parser.add_argument("-b", + dest="backup_dir", + metavar="BACKUP_DIR", + type=pathlib.Path, + required=True, + help="directory, where all backups will be stored") + parser.add_argument("-n", "--dry-run", + action="store_true", + default=False, + help="Do not do create backup") + parser.add_argument("sources", + nargs="+", + metavar="SOURCE", + type=pathlib.Path, + help="backup source (file/dir/smth else)") args = parser.parse_args() loglevel = logging.DEBUG if args.verbose else logging.INFO @@ -58,7 +55,7 @@ def main(): _lg.error("Source directory %s does not exist", src_dir) return 1 - initiate_backup(args.sources, backup_dir_abs) + initiate_backup(args.sources, backup_dir_abs, dry_run=args.dry_run) if __name__ == "__main__": diff --git a/spqr/curateipsum/backup.py b/spqr/curateipsum/backup.py index 51ee2a6..3a6c48a 100644 --- a/spqr/curateipsum/backup.py +++ b/spqr/curateipsum/backup.py @@ -5,6 +5,7 @@ Module with backup functions. import logging import os import pathlib +import shutil from datetime import datetime from typing import Optional @@ -44,7 +45,7 @@ def _get_latest_backup(backup_dir: pathlib.Path) -> Optional[pathlib.Path]: return None -def initiate_backup(sources, backup_dir: pathlib.Path): +def initiate_backup(sources, backup_dir: pathlib.Path, dry_run=False): """ Main backup function """ cur_backup = pathlib.Path( @@ -77,3 +78,8 @@ def initiate_backup(sources, backup_dir: pathlib.Path): # dst_abs = pathlib.Path(os.path.join(cur_backup, src_abs.name)) # _lg.info("Backing up directory %s to %s backup", src_abs, cur_backup.name) # rsync(src_abs, cur_backup) + if dry_run: + _lg.info("Dry-run, removing created backup: %s", cur_backup.name) + shutil.rmtree(cur_backup, ignore_errors=True) + else: + _lg.info("Backup created: %s", cur_backup.name) diff --git a/spqr/curateipsum/fs.py b/spqr/curateipsum/fs.py index 85790d1..49db99d 100644 --- a/spqr/curateipsum/fs.py +++ b/spqr/curateipsum/fs.py @@ -111,7 +111,7 @@ class Actions(enum.Enum): create = enum.auto() -def rsync(src_dir, dst_dir=None): +def rsync(src_dir, dst_dir, dry_run=False): """ Do sync :param src_dir: source dir