From a17993ec72e18da6f27aa7ba7737c658430009fb Mon Sep 17 00:00:00 2001 From: Aaron Janse Date: Thu, 13 Jun 2019 10:31:24 -0700 Subject: [PATCH 1/4] implement command to delete subdirectories --- lib/main.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/main.py b/lib/main.py index 6355b06..f51e5fa 100644 --- a/lib/main.py +++ b/lib/main.py @@ -24,6 +24,8 @@ from lib.common import WitUserError, error from lib.gitrepo import GitRepo import re +from glob import glob +import pathlib log = getLogger() @@ -71,6 +73,8 @@ def main() -> None: subparsers.add_parser('fetch-scala', help='Fetch dependencies for Scala projects') + subparsers.add_parser('clean', help='delete non-package subdirectories of workspace') + args = parser.parse_args() if args.verbose > 3: log.setLevel('TRACE') @@ -129,6 +133,9 @@ def main() -> None: elif args.command == 'fetch-scala': fetch_scala(ws, args, agg=False) + + elif args.command == 'clean': + clean(ws, args) except WitUserError as e: error(e) @@ -319,3 +326,14 @@ def version() -> None: version = re.sub(r"^v", "", version) print("wit {}".format(version)) + + +def clean(ws, args) -> None: + subdirs = glob(str(ws.path)+'/*/') + subdirs = [pathlib.PosixPath(f) for f in subdirs] + + pkg_folders = [f.parent for f in ws.path.glob('*/wit-manifest.json')] + + non_pkg_folders = [f for f in subdirs if f not in pkg_folders] + for folder in non_pkg_folders: + folder.rmdir() From 5539d6ed592eb40c6563314f35935daea7f0169a Mon Sep 17 00:00:00 2001 From: Aaron Janse Date: Thu, 13 Jun 2019 10:43:55 -0700 Subject: [PATCH 2/4] fix type checking --- lib/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/main.py b/lib/main.py index f51e5fa..61cfb88 100644 --- a/lib/main.py +++ b/lib/main.py @@ -329,8 +329,8 @@ def version() -> None: def clean(ws, args) -> None: - subdirs = glob(str(ws.path)+'/*/') - subdirs = [pathlib.PosixPath(f) for f in subdirs] + subdirs_str = glob(str(ws.path)+'/*/') + subdirs = [pathlib.PosixPath(f) for f in subdirs_str] pkg_folders = [f.parent for f in ws.path.glob('*/wit-manifest.json')] From 04559c747580e9d81be060f04f460b804523a726 Mon Sep 17 00:00:00 2001 From: Aaron Janse Date: Mon, 17 Jun 2019 15:03:37 -0700 Subject: [PATCH 3/4] fix pkg folder list --- lib/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/main.py b/lib/main.py index 61cfb88..68025a1 100644 --- a/lib/main.py +++ b/lib/main.py @@ -332,7 +332,7 @@ def clean(ws, args) -> None: subdirs_str = glob(str(ws.path)+'/*/') subdirs = [pathlib.PosixPath(f) for f in subdirs_str] - pkg_folders = [f.parent for f in ws.path.glob('*/wit-manifest.json')] + pkg_folders = [pkg.get_path() for pkg in ws.lock.packages] non_pkg_folders = [f for f in subdirs if f not in pkg_folders] for folder in non_pkg_folders: From 8bc68cab0be44505c8e59731063fc6742943c372 Mon Sep 17 00:00:00 2001 From: Aaron Janse Date: Mon, 17 Jun 2019 15:14:51 -0700 Subject: [PATCH 4/4] add --dry-run flag --- lib/main.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/main.py b/lib/main.py index 68025a1..703b5a3 100644 --- a/lib/main.py +++ b/lib/main.py @@ -73,7 +73,10 @@ def main() -> None: subparsers.add_parser('fetch-scala', help='Fetch dependencies for Scala projects') - subparsers.add_parser('clean', help='delete non-package subdirectories of workspace') + clean_parser = subparsers.add_parser('clean', help=('delete non-package subdirectories ' + 'in your workspace')) + clean_parser.add_argument('--dry-run', dest='dry_run', action="store_true", + help='do a dry run, showing what would have been deleted') args = parser.parse_args() if args.verbose > 3: @@ -335,5 +338,15 @@ def clean(ws, args) -> None: pkg_folders = [pkg.get_path() for pkg in ws.lock.packages] non_pkg_folders = [f for f in subdirs if f not in pkg_folders] + if not non_pkg_folders: + log.info("No non-package directories found.") + return + + if args.dry_run: + log.info("Skipping execution because of --dry-run. Would have run:") + for folder in non_pkg_folders: - folder.rmdir() + if args.dry_run: + log.info("rm -rf {}".format(folder)) + else: + folder.rmdir()