from theheck.utils import which apt_available = bool(which('apt-get'))
def match(command): if 'not found' in command.output or 'not installed' in command.output: executable = _get_executable(command) return not which(executable) and get_package(executable) else: return False
from theheck.utils import which dnf_available = bool(which('dnf'))
def match(command): return (not which(command.script_parts[0]) and 'not found' in command.output and bool( get_close_matches(command.script_parts[0], get_all_executables())))
npm_commands = {'require': 'add'} @eager def _get_all_tasks(): proc = Popen(['yarn', '--help'], stdout=PIPE) should_yield = False for line in proc.stdout.readlines(): line = line.decode().strip() if 'Commands:' in line: should_yield = True continue if should_yield and '- ' in line: yield line.split(' ')[-1] if which('yarn'): _get_all_tasks = cache(which('yarn'))(_get_all_tasks) def get_new_command(command): misspelled_task = regex.findall(command.output)[0] if misspelled_task in npm_commands: yarn_command = npm_commands[misspelled_task] return replace_argument(command.script, misspelled_task, yarn_command) else: tasks = _get_all_tasks() return replace_command(command, misspelled_task, tasks)
def match(command): if 'command not found' in command.output: command_name = _get_command_name(command) return which(command_name)
@for_app('gem') def match(command): return ('ERROR: While executing gem ... (Gem::CommandLineError)' in command.output and 'Unknown command' in command.output) def _get_unknown_command(command): return re.findall(r'Unknown command (.*)$', command.output)[0] @eager def _get_all_commands(): proc = subprocess.Popen(['gem', 'help', 'commands'], stdout=subprocess.PIPE) for line in proc.stdout.readlines(): line = line.decode() if line.startswith(' '): yield line.strip().split(' ')[0] if which('gem'): _get_all_commands = cache(which('gem'))(_get_all_commands) def get_new_command(command): unknown_command = _get_unknown_command(command) all_commands = _get_all_commands() return replace_command(command, unknown_command, all_commands)
import re import subprocess from theheck.utils import replace_command, for_app, which, cache from theheck.specific.sudo import sudo_support @sudo_support @for_app('docker') def match(command): return 'is not a docker command' in command.output def get_docker_commands(): proc = subprocess.Popen('docker', stdout=subprocess.PIPE) lines = [line.decode('utf-8') for line in proc.stdout.readlines()] lines = dropwhile(lambda line: not line.startswith('Commands:'), lines) lines = islice(lines, 1, None) lines = list(takewhile(lambda line: line != '\n', lines)) return [line.strip().split(' ')[0] for line in lines] if which('docker'): get_docker_commands = cache(which('docker'))(get_docker_commands) @sudo_support def get_new_command(command): wrong_command = re.findall(r"docker: '(\w+)' is not a docker command.", command.output)[0] return replace_command(command, wrong_command, get_docker_commands())
def match(command): return (not which(command.script_parts[0]) and 'not found' in command.output and os.path.isfile('gradlew'))