diff --git a/bench/cli.py b/bench/cli.py index 21c8701b..7eef2288 100755 --- a/bench/cli.py +++ b/bench/cli.py @@ -93,7 +93,7 @@ def get_frappe_commands(bench_path='.'): python = get_env_cmd('python', bench_path=bench_path) sites_path = os.path.join(bench_path, 'sites') if not os.path.exists(sites_path): - log("WARN: Command not being executed in bench directory", level=3) + log("Command not being executed in bench directory", level=3) return [] try: output = get_cmd_output("{python} -m frappe.utils.bench_helper get-frappe-commands".format(python=python), cwd=sites_path) diff --git a/bench/commands/__init__.py b/bench/commands/__init__.py index 8772a0a2..4572a42b 100755 --- a/bench/commands/__init__.py +++ b/bench/commands/__init__.py @@ -47,7 +47,7 @@ bench_command.add_command(switch_to_develop) from bench.commands.utils import (start, restart, set_nginx_port, set_ssl_certificate, set_ssl_certificate_key, set_url_root, set_mariadb_host, set_default_site, download_translations, shell, backup_site, backup_all_sites, release, renew_lets_encrypt, - disable_production, bench_src, prepare_beta_release, set_redis_cache_host, set_redis_queue_host, set_redis_socketio_host) + disable_production, bench_src, prepare_beta_release, set_redis_cache_host, set_redis_queue_host, set_redis_socketio_host, find_benches) bench_command.add_command(start) bench_command.add_command(restart) bench_command.add_command(set_nginx_port) @@ -68,6 +68,7 @@ bench_command.add_command(renew_lets_encrypt) bench_command.add_command(disable_production) bench_command.add_command(bench_src) bench_command.add_command(prepare_beta_release) +bench_command.add_command(find_benches) from bench.commands.setup import setup bench_command.add_command(setup) diff --git a/bench/commands/utils.py b/bench/commands/utils.py index 9ba55bb8..e71c7ea3 100644 --- a/bench/commands/utils.py +++ b/bench/commands/utils.py @@ -190,3 +190,11 @@ def bench_src(): """Prints bench source folder path, which can be used as: cd `bench src` """ import bench print(os.path.dirname(bench.__path__[0])) + + +@click.command('find') +@click.argument('location', default='') +def find_benches(location): + """Finds benches recursively from location""" + from bench.utils import find_benches + find_benches(directory=location) diff --git a/bench/utils.py b/bench/utils.py index d25668c2..f592beb4 100755 --- a/bench/utils.py +++ b/bench/utils.py @@ -31,8 +31,8 @@ def log(message, level=0): levels = { 0: '\033[94m', # normal 1: '\033[92m', # success - 2: '\033[91m', # fail - 3: '\033[93m' # warn/suggest + 2: '\033[91mERROR: ', # fail + 3: '\033[93mWARN: ' # warn/suggest } start = levels.get(level) or '' end = '\033[0m' @@ -872,3 +872,31 @@ def run_playbook(playbook_name, extra_vars=None, tag=None): args.extend(['-t', tag]) subprocess.check_call(args, cwd=os.path.join(os.path.dirname(bench.__path__[0]), 'playbooks')) + +def find_benches(directory=None): + if not directory: + directory = os.path.expanduser("~") + elif os.path.exists(directory): + directory = os.path.abspath(directory) + else: + log("Directory doesn't exist", level=2) + sys.exit(1) + + if is_bench_directory(directory): + if os.path.curdir == directory: + print("You are in a bench directory!") + else: + print("{0} is a bench directory!".format(directory)) + return + + benches = [] + for sub in os.listdir(directory): + sub = os.path.join(directory, sub) + if os.path.isdir(sub) and not os.path.islink(sub): + if is_bench_directory(sub): + print("{} found!".format(sub)) + benches.append(sub) + else: + benches.extend(find_benches(sub)) + + return benches