Exemplo n.º 1
0
def get_new_command(command):
    broken = re.findall(r"env: no such command ['`]([^']*)'", command.output)[0]
    matched = [replace_argument(command.script, broken, common_typo)
               for common_typo in COMMON_TYPOS.get(broken, [])]

    app = command.script_parts[0]
    app_commands = cache(which(app))(get_app_commands)(app)
    matched.extend(replace_command(command, broken, app_commands))
    return matched
Exemplo n.º 2
0
@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)
Exemplo n.º 3
0
import re
import subprocess
from thefuck.utils import replace_command, for_app, which, cache
from thefuck.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())
Exemplo n.º 4
0
@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)
Exemplo n.º 5
0
from itertools import dropwhile, islice, takewhile
import subprocess

from thefuck.utils import get_closest, replace_argument, for_app, which, cache


def get_golang_commands():
    proc = subprocess.Popen('go', stderr=subprocess.PIPE)
    lines = [line.decode('utf-8').strip() for line in proc.stderr.readlines()]
    lines = dropwhile(lambda line: line != 'The commands are:', lines)
    lines = islice(lines, 2, None)
    lines = takewhile(lambda line: line, lines)
    return [line.split(' ')[0] for line in lines]


if which('go'):
    get_golang_commands = cache(which('go'))(get_golang_commands)


@for_app('go')
def match(command):
    return 'unknown command' in command.output


def get_new_command(command):
    closest_subcommand = get_closest(command.script_parts[1], get_golang_commands())
    return replace_argument(command.script, command.script_parts[1],
                            closest_subcommand)
Exemplo n.º 6
0
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)
from thefuck.utils import (cache, for_app, replace_argument, replace_command,
                           which)

COMMON_TYPOS = {
    'list': ['versions', 'install --list'],
    'remove': ['uninstall'],
}


@for_app('pyenv')
def match(command):
    return 'pyenv: no such command' in command.output


def get_pyenv_commands():
    proc = Popen(['pyenv', 'commands'], stdout=PIPE)
    return [line.decode('utf-8').strip() for line in proc.stdout.readlines()]


if which('pyenv'):
    get_pyenv_commands = cache(which('pyenv'))(get_pyenv_commands)


@for_app('pyenv')
def get_new_command(command):
    broken = re.findall(r"pyenv: no such command `([^']*)'", command.output)[0]
    matched = [replace_argument(command.script, broken, common_typo)
               for common_typo in COMMON_TYPOS.get(broken, [])]
    matched.extend(replace_command(command, broken, get_pyenv_commands()))
    return matched
COMMON_TYPOS = {
    "list": ["versions", "install --list"],
    "remove": ["uninstall"],
}


@for_app("pyenv")
def match(command):
    return "pyenv: no such command" in command.output


def get_pyenv_commands():
    proc = Popen(["pyenv", "commands"], stdout=PIPE)
    return [line.decode("utf-8").strip() for line in proc.stdout.readlines()]


if which("pyenv"):
    get_pyenv_commands = cache(which("pyenv"))(get_pyenv_commands)


@for_app("pyenv")
def get_new_command(command):
    broken = re.findall(r"pyenv: no such command `([^']*)'", command.output)[0]
    matched = [
        replace_argument(command.script, broken, common_typo)
        for common_typo in COMMON_TYPOS.get(broken, [])
    ]
    matched.extend(replace_command(command, broken, get_pyenv_commands()))
    return matched
from thefuck.utils import cache
from thefuck.utils import for_app
from thefuck.utils import get_closest
from thefuck.utils import replace_argument
from thefuck.utils import which


def get_golang_commands():
    proc = subprocess.Popen("go", stderr=subprocess.PIPE)
    lines = [line.decode("utf-8").strip() for line in proc.stderr.readlines()]
    lines = dropwhile(lambda line: line != "The commands are:", lines)
    lines = islice(lines, 2, None)
    lines = takewhile(lambda line: line, lines)
    return [line.split(" ")[0] for line in lines]


if which("go"):
    get_docker_commands = cache(which("go"))(get_golang_commands)


@for_app("go")
def match(command):
    return "unknown command" in command.output


def get_new_command(command):
    closest_subcommand = get_closest(command.script_parts[1],
                                     get_golang_commands())
    return replace_argument(command.script, command.script_parts[1],
                            closest_subcommand)
Exemplo n.º 10
0
                            stderr=subprocess.PIPE)

    # Old version docker returns its output to stdout, while newer version returns to stderr.
    lines = proc.stdout.readlines() or proc.stderr.readlines()
    lines = [line.decode('utf-8') for line in lines]

    # Only newer versions of docker have management commands in the help text.
    if 'Management Commands:\n' in lines:
        management_commands = _parse_commands(lines, 'Management Commands:')
    else:
        management_commands = []
    regular_commands = _parse_commands(lines, 'Commands:')
    return management_commands + regular_commands


if which('docker'):
    get_docker_commands = cache(which('docker'))(get_docker_commands)


@sudo_support
def get_new_command(command):
    if 'Usage:' in command.output and len(command.script_parts) > 1:
        management_subcommands = _parse_commands(command.output.split('\n'),
                                                 'Commands:')
        return replace_command(command, command.script_parts[2],
                               management_subcommands)

    wrong_command = re.findall(r"docker: '(\w+)' is not a docker command.",
                               command.output)[0]
    return replace_command(command, wrong_command, get_docker_commands())
Exemplo n.º 11
0
@sudo_support
@for_app('yum')
def match(command):
    return 'No such command: ' in command.output


def _get_operations():
    proc = subprocess.Popen('yum', stdout=subprocess.PIPE)

    lines = proc.stdout.readlines()
    lines = [line.decode('utf-8') for line in lines]
    lines = dropwhile(lambda line: not line.startswith("List of Commands:"),
                      lines)
    lines = islice(lines, 2, None)
    lines = list(takewhile(lambda line: line.strip(), lines))
    return [line.strip().split(' ')[0] for line in lines]


if which('yum'):
    _get_operations = cache(which('yum'))(_get_operations)


@sudo_support
def get_new_command(command):
    invalid_operation = command.script_parts[1]

    if invalid_operation == 'uninstall':
        return [command.script.replace('uninstall', 'remove')]

    return replace_command(command, invalid_operation, _get_operations())
Exemplo n.º 12
0
                            stderr=subprocess.PIPE)

    # Old version docker returns its output to stdout, while newer version returns to stderr.
    lines = proc.stdout.readlines() or proc.stderr.readlines()
    lines = [line.decode("utf-8") for line in lines]

    # Only newer versions of docker have management commands in the help text.
    if "Management Commands:\n" in lines:
        management_commands = _parse_commands(lines, "Management Commands:")
    else:
        management_commands = []
    regular_commands = _parse_commands(lines, "Commands:")
    return management_commands + regular_commands


if which("docker"):
    get_docker_commands = cache(which("docker"))(get_docker_commands)


@sudo_support
def get_new_command(command):
    if "Usage:" in command.output and len(command.script_parts) > 1:
        management_subcommands = _parse_commands(command.output.split("\n"),
                                                 "Commands:")
        return replace_command(command, command.script_parts[2],
                               management_subcommands)

    wrong_command = re.findall(r"docker: '(\w+)' is not a docker command.",
                               command.output)[0]
    return replace_command(command, wrong_command, get_docker_commands())
@sudo_support
@for_app("yum")
def match(command):
    return "No such command: " in command.output


def _get_operations():
    proc = subprocess.Popen("yum", stdout=subprocess.PIPE)

    lines = proc.stdout.readlines()
    lines = [line.decode("utf-8") for line in lines]
    lines = dropwhile(lambda line: not line.startswith("List of Commands:"),
                      lines)
    lines = islice(lines, 2, None)
    lines = list(takewhile(lambda line: line.strip(), lines))
    return [line.strip().split(" ")[0] for line in lines]


if which("yum"):
    _get_operations = cache(which("yum"))(_get_operations)


@sudo_support
def get_new_command(command):
    invalid_operation = command.script_parts[1]

    if invalid_operation == "uninstall":
        return [command.script.replace("uninstall", "remove")]

    return replace_command(command, invalid_operation, _get_operations())
Exemplo n.º 14
0
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)
Exemplo n.º 15
0
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)