diff --git a/cleanup.py b/cleanup.py index 469707ee..3f022289 100644 --- a/cleanup.py +++ b/cleanup.py @@ -1,9 +1,37 @@ from __future__ import print_function +import os import subprocess import sys +class WorkingDirectory(object): + """Context manager for changing current working directory.""" + def __init__(self, new, original=None): + self.working_directory = new + self.original_directory = os.getcwd() if original is None else original + + def __enter__(self): + os.chdir(self.working_directory) + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + os.chdir(self.original_directory) + + +def module_path(module=__file__, parent=False): + try: + path = module.__file__ + except AttributeError: + path = module + directory = os.path.dirname(path) + if parent: + directory = os.path.join(directory, os.pardir) + absolute = os.path.abspath(directory) + normalized = os.path.normpath(absolute) + return normalized + + def git_clean(remove_directories=False, force=False, dry_run=False, interactive=False, quiet=False, exclude=None, ignore_rules=False, clean_ignored=False, paths=None): """Execute git clean commands.""" @@ -78,21 +106,27 @@ def clean_folders(*paths): def clean(*paths): """Clean up bytecode and obsolete folders.""" - print('-- Cleaning bytecode --') - try: - result = clean_bytecode() - except SystemExit as error: - print(error) - else: - print(result or 'No bytecode to clean\n') - if paths: - print('-- Cleaning folders: {} --'.format(paths)) + with WorkingDirectory(module_path()) as cwd: + if cwd.working_directory != cwd.original_directory: + print('Changing to directory:', cwd.working_directory) + print('\n-- Cleaning bytecode --') try: - result = clean_folders(*paths) + result = clean_bytecode() except SystemExit as error: print(error) else: - print(result or 'No folders to clean\n') + print(result or 'No bytecode to clean') + if paths: + print('\n-- Cleaning folders: {} --'.format(paths)) + try: + result = clean_folders(*paths) + except SystemExit as error: + print(error) + else: + print(result or 'No folders to clean\n') + if cwd.working_directory != cwd.original_directory: + print('Returning to directory: ', cwd.original_directory) + print('\n-- Cleanup finished --\n') if __name__ == '__main__':