mirror of
https://github.com/nvbn/thefuck.git
synced 2025-02-21 20:38:54 +00:00
Add the pacman_not_found
rule
This commit is contained in:
parent
986bbb30a7
commit
ca8222e764
48
tests/rules/test_pacman_not_found.py
Normal file
48
tests/rules/test_pacman_not_found.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import pytest
|
||||||
|
from mock import patch
|
||||||
|
from thefuck.rules import pacman_not_found
|
||||||
|
from thefuck.rules.pacman_not_found import match, get_new_command
|
||||||
|
from tests.utils import Command
|
||||||
|
|
||||||
|
PKGFILE_OUTPUT_LLC = '''extra/llvm 3.6.0-5 /usr/bin/llc
|
||||||
|
extra/llvm35 3.5.2-13/usr/bin/llc'''
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(not getattr(pacman_not_found, 'enabled_by_default', True),
|
||||||
|
reason='Skip if pacman is not available')
|
||||||
|
@pytest.mark.parametrize('command', [
|
||||||
|
Command(script='yaourt -S llc', stderr='error: target not found: llc'),
|
||||||
|
Command(script='pacman llc', stderr='error: target not found: llc'),
|
||||||
|
Command(script='sudo pacman llc', stderr='error: target not found: llc')])
|
||||||
|
def test_match(command):
|
||||||
|
assert match(command, None)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('command', [
|
||||||
|
Command(script='yaourt -S llc', stderr='error: target not found: llc'),
|
||||||
|
Command(script='pacman llc', stderr='error: target not found: llc'),
|
||||||
|
Command(script='sudo pacman llc', stderr='error: target not found: llc')])
|
||||||
|
@patch('thefuck.archlinux.subprocess')
|
||||||
|
def test_match_mocked(subp_mock, command):
|
||||||
|
subp_mock.check_output.return_value = PKGFILE_OUTPUT_LLC
|
||||||
|
assert match(command, None)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(not getattr(pacman_not_found, 'enabled_by_default', True),
|
||||||
|
reason='Skip if pacman is not available')
|
||||||
|
@pytest.mark.parametrize('command, fixed', [
|
||||||
|
(Command(script='yaourt -S llc', stderr='error: target not found: llc'), ['yaourt -S extra/llvm', 'yaourt -S extra/llvm35']),
|
||||||
|
(Command(script='pacman -S llc', stderr='error: target not found: llc'), ['pacman -S extra/llvm', 'pacman -S extra/llvm35']),
|
||||||
|
(Command(script='sudo pacman -S llc', stderr='error: target not found: llc'), ['sudo pacman -S extra/llvm', 'sudo pacman -S extra/llvm35'])])
|
||||||
|
def test_get_new_command(command, fixed):
|
||||||
|
assert get_new_command(command, None) == fixed
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('command, fixed', [
|
||||||
|
(Command(script='yaourt -S llc', stderr='error: target not found: llc'), ['yaourt -S extra/llvm', 'yaourt -S extra/llvm35']),
|
||||||
|
(Command(script='pacman -S llc', stderr='error: target not found: llc'), ['pacman -S extra/llvm', 'pacman -S extra/llvm35']),
|
||||||
|
(Command(script='sudo pacman -S llc', stderr='error: target not found: llc'), ['sudo pacman -S extra/llvm', 'sudo pacman -S extra/llvm35'])])
|
||||||
|
@patch('thefuck.archlinux.subprocess')
|
||||||
|
def test_get_new_command_mocked(subp_mock, command, fixed):
|
||||||
|
subp_mock.check_output.return_value = PKGFILE_OUTPUT_LLC
|
||||||
|
assert get_new_command(command, None) == fixed
|
@ -11,7 +11,7 @@ def get_pkgfile(command):
|
|||||||
instead.
|
instead.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
command = command.script.strip()
|
command = command.strip()
|
||||||
|
|
||||||
if command.startswith('sudo '):
|
if command.startswith('sudo '):
|
||||||
command = command[5:]
|
command = command[5:]
|
||||||
|
@ -3,11 +3,11 @@ from thefuck import shells
|
|||||||
|
|
||||||
|
|
||||||
def match(command, settings):
|
def match(command, settings):
|
||||||
return 'not found' in command.stderr and get_pkgfile(command)
|
return 'not found' in command.stderr and get_pkgfile(command.script)
|
||||||
|
|
||||||
|
|
||||||
def get_new_command(command, settings):
|
def get_new_command(command, settings):
|
||||||
packages = get_pkgfile(command)
|
packages = get_pkgfile(command.script)
|
||||||
|
|
||||||
formatme = shells.and_('{} -S {}', '{}')
|
formatme = shells.and_('{} -S {}', '{}')
|
||||||
return [formatme.format(pacman, package, command.script)
|
return [formatme.format(pacman, package, command.script)
|
||||||
|
24
thefuck/rules/pacman_not_found.py
Normal file
24
thefuck/rules/pacman_not_found.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
""" Fixes wrong package names with pacman or yaourt.
|
||||||
|
|
||||||
|
For example the `llc` program is in package `llvm` so this:
|
||||||
|
yaourt -S llc
|
||||||
|
should be:
|
||||||
|
yaourt -S llvm
|
||||||
|
"""
|
||||||
|
|
||||||
|
from thefuck.utils import replace_command
|
||||||
|
from thefuck.archlinux import archlinux_env, get_pkgfile
|
||||||
|
|
||||||
|
|
||||||
|
def match(command, settings):
|
||||||
|
return (command.script.startswith(('pacman', 'sudo pacman', 'yaourt'))
|
||||||
|
and 'error: target not found:' in command.stderr)
|
||||||
|
|
||||||
|
|
||||||
|
def get_new_command(command, settings):
|
||||||
|
pgr = command.script.split()[-1]
|
||||||
|
|
||||||
|
return replace_command(command, pgr, get_pkgfile(pgr))
|
||||||
|
|
||||||
|
|
||||||
|
enabled_by_default, _ = archlinux_env()
|
Loading…
x
Reference in New Issue
Block a user