diff --git a/README.md b/README.md index d05ce4ca..76560f15 100644 --- a/README.md +++ b/README.md @@ -222,6 +222,7 @@ Enabled by default only on specific platforms: * `apt_invalid_operation` – fixes invalid `apt` and `apt-get` calls, like `apt-get isntall vim`; * `brew_install` – fixes formula name for `brew install`; * `brew_unknown_command` – fixes wrong brew commands, for example `brew docto/brew doctor`; +* `brew_update_formula` – turns `brew update ` into `brew upgrade `; * `brew_upgrade` – appends `--all` to `brew upgrade` as per Homebrew's new behaviour; * `pacman` – installs app with `pacman` if it is not installed (uses `yaourt` if available); * `pacman_not_found` – fixes package name with `pacman` or `yaourt`. diff --git a/tests/rules/test_brew_update_formula.py b/tests/rules/test_brew_update_formula.py new file mode 100644 index 00000000..4c492d07 --- /dev/null +++ b/tests/rules/test_brew_update_formula.py @@ -0,0 +1,30 @@ +import pytest +from tests.utils import Command +from thefuck.rules.brew_update_formula import get_new_command, match + + +@pytest.fixture +def stderr(): + return ("Error: This command updates brew itself, and does not take formula" + " names.\nUse 'brew upgrade '.") + + +@pytest.fixture +def new_command(formula): + return 'brew upgrade {}'.format(formula) + + +@pytest.mark.parametrize('script', ['brew update foo', 'brew update bar zap']) +def test_match(stderr, script): + assert match(Command(script=script, stderr=stderr)) + + +@pytest.mark.parametrize('script', ['brew upgrade foo', 'brew update']) +def test_not_match(script): + assert not match(Command(script=script, stderr='')) + + +@pytest.mark.parametrize('script, formula, ', [ + ('brew update foo', 'foo'), ('brew update bar zap', 'bar zap')]) +def test_get_new_command(stderr, new_command, script, formula): + assert get_new_command(Command(script=script, stderr=stderr)) == new_command diff --git a/thefuck/rules/brew_update_formula.py b/thefuck/rules/brew_update_formula.py new file mode 100644 index 00000000..58a0e570 --- /dev/null +++ b/thefuck/rules/brew_update_formula.py @@ -0,0 +1,12 @@ +from thefuck.utils import for_app + + +@for_app('brew', at_least=2) +def match(command): + return ('update' in command.script + and "Error: This command updates brew itself" in command.stderr + and "Use 'brew upgrade '" in command.stderr) + + +def get_new_command(command): + return command.script.replace('update', 'upgrade')