From 8c0e69b2f43a58ecfb6619974e4a6890fe712c83 Mon Sep 17 00:00:00 2001 From: Bastian Venthur Date: Sat, 6 Aug 2022 21:55:09 +0200 Subject: [PATCH 1/4] Delete files that should not be in dest-dir --- blag/blag.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/blag/blag.py b/blag/blag.py index e84bc2b..151e02e 100644 --- a/blag/blag.py +++ b/blag/blag.py @@ -209,6 +209,7 @@ def build(args): """ os.makedirs(f'{args.output_dir}', exist_ok=True) convertibles = [] + known_targets = [] for root, dirnames, filenames in os.walk(args.input_dir): for filename in filenames: rel_src = os.path.relpath(f'{root}/{filename}', @@ -219,13 +220,20 @@ def build(args): rel_dst = rel_src rel_dst = rel_dst[:-3] + '.html' convertibles.append((rel_src, rel_dst)) + known_targets.append( + os.path.abspath(f'{args.output_dir}/{rel_dst}') + ) else: shutil.copy(f'{args.input_dir}/{rel_src}', f'{args.output_dir}/{rel_src}') + known_targets.append( + os.path.abspath(f'{args.output_dir}/{rel_src}') + ) for dirname in dirnames: # all directories are copied into the output directory path = os.path.relpath(f'{root}/{dirname}', start=args.input_dir) os.makedirs(f'{args.output_dir}/{path}', exist_ok=True) + known_targets.append(os.path.abspath(f'{args.output_dir}/{path}')) # copy static files over logger.info('Copying static files.') @@ -250,6 +258,22 @@ def build(args): article_template, ) + # clean up files that should not be there + for root, dirnames, filenames in os.walk(args.output_dir): + for filename in filenames: + dst = os.path.abspath(f'{root}/{filename}') + if dst not in known_targets: + os.remove(dst) + else: + known_targets.remove(dst) + for dirname in dirnames: + dst = os.path.abspath(f'{root}/{dirname}') + if dst not in known_targets: + shutil.rmtree(dst) + else: + known_targets.remove(dst) + logger.debug(known_targets) + generate_feed( articles, args.output_dir, base_url=config['base_url'], From ff3f8101adbf9a8b4e6904df53ec1382a4fa7be9 Mon Sep 17 00:00:00 2001 From: Bastian Venthur Date: Sat, 6 Aug 2022 22:29:48 +0200 Subject: [PATCH 2/4] added test --- tests/test_blag.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/test_blag.py b/tests/test_blag.py index 72dbf37..91f1ac2 100644 --- a/tests/test_blag.py +++ b/tests/test_blag.py @@ -275,6 +275,21 @@ def test_build(args): blag.build(args) +def test_remove_extra_files(args): + # create a file and directory in output dir that have no corresponding + # source + file_path = f'{args.output_dir}/a' + dir_path = f'{args.output_dir}/b' + fh = open(file_path, 'w') + fh.close() + os.mkdir(dir_path) + + blag.build(args) + + assert not os.path.exists(file_path) + assert not os.path.exists(dir_path) + + def test_main(cleandir): blag.main(['build']) From 94ad898a862988d3237abc159a74bb10b5d3252f Mon Sep 17 00:00:00 2001 From: Bastian Venthur Date: Sun, 7 Aug 2022 21:10:51 +0200 Subject: [PATCH 3/4] added logger messanges on deletion --- blag/blag.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/blag/blag.py b/blag/blag.py index 151e02e..ae6e624 100644 --- a/blag/blag.py +++ b/blag/blag.py @@ -263,12 +263,14 @@ def build(args): for filename in filenames: dst = os.path.abspath(f'{root}/{filename}') if dst not in known_targets: + logger.info(f'deleting {dst}') os.remove(dst) else: known_targets.remove(dst) for dirname in dirnames: dst = os.path.abspath(f'{root}/{dirname}') if dst not in known_targets: + logger.info(f'deleting {dst}') shutil.rmtree(dst) else: known_targets.remove(dst) From 618327adf5756a01111a06255ec2b10e8c8319c9 Mon Sep 17 00:00:00 2001 From: Bastian Venthur Date: Sun, 12 Nov 2023 17:24:48 +0100 Subject: [PATCH 4/4] reformatted --- blag/blag.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/blag/blag.py b/blag/blag.py index 858bc49..4633e56 100644 --- a/blag/blag.py +++ b/blag/blag.py @@ -231,7 +231,7 @@ def build(args: argparse.Namespace) -> None: rel_dst = rel_dst[:-3] + ".html" convertibles.append((rel_src, rel_dst)) known_targets.append( - os.path.abspath(f'{args.output_dir}/{rel_dst}') + os.path.abspath(f"{args.output_dir}/{rel_dst}") ) else: shutil.copy( @@ -239,7 +239,7 @@ def build(args: argparse.Namespace) -> None: f"{args.output_dir}/{rel_src}", ) known_targets.append( - os.path.abspath(f'{args.output_dir}/{rel_src}') + os.path.abspath(f"{args.output_dir}/{rel_src}") ) for dirname in dirnames: # all directories are copied into the output directory @@ -284,16 +284,16 @@ def build(args: argparse.Namespace) -> None: # clean up files that should not be there for root, dirnames, filenames in os.walk(args.output_dir): for filename in filenames: - dst = os.path.abspath(f'{root}/{filename}') + dst = os.path.abspath(f"{root}/{filename}") if dst not in known_targets: - logger.info(f'deleting {dst}') + logger.info(f"deleting {dst}") os.remove(dst) else: known_targets.remove(dst) for dirname in dirnames: - dst = os.path.abspath(f'{root}/{dirname}') + dst = os.path.abspath(f"{root}/{dirname}") if dst not in known_targets: - logger.info(f'deleting {dst}') + logger.info(f"deleting {dst}") shutil.rmtree(dst) else: known_targets.remove(dst)