diff --git a/lib/main.py b/lib/main.py index 6355b06..703b5a3 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,11 @@ def main() -> None: subparsers.add_parser('fetch-scala', help='Fetch dependencies for Scala projects') + 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: log.setLevel('TRACE') @@ -129,6 +136,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 +329,24 @@ def version() -> None: version = re.sub(r"^v", "", version) print("wit {}".format(version)) + + +def clean(ws, args) -> None: + subdirs_str = glob(str(ws.path)+'/*/') + subdirs = [pathlib.PosixPath(f) for f in subdirs_str] + + 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: + if args.dry_run: + log.info("rm -rf {}".format(folder)) + else: + folder.rmdir()