mirror of
https://github.com/nvbn/thefuck.git
synced 2025-02-21 04:18:55 +00:00
Add command not found handler
This commit is contained in:
parent
9b135b67d0
commit
8e5cc9d73a
10
README.md
10
README.md
@ -26,6 +26,16 @@ To push the current branch and set the remote as upstream, use
|
||||
➜ fuck
|
||||
Counting objects: 9, done.
|
||||
...
|
||||
|
||||
➜ puthon
|
||||
No command 'puthon' found, did you mean:
|
||||
Command 'python' from package 'python-minimal' (main)
|
||||
Command 'python' from package 'python3' (main)
|
||||
zsh: command not found: puthon
|
||||
|
||||
➜ fuck
|
||||
Python 3.4.2 (default, Oct 8 2014, 13:08:17)
|
||||
...
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
2
setup.py
2
setup.py
@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
|
||||
setup(name='thefuck',
|
||||
version=1.0,
|
||||
version=1.1,
|
||||
description="Magnificent app which corrects your previous console command",
|
||||
author='Vladimir Iakovlev',
|
||||
author_email='nvbn.rm@gmail.com',
|
||||
|
44
tests/rules/test_no_command.py
Normal file
44
tests/rules/test_no_command.py
Normal file
@ -0,0 +1,44 @@
|
||||
from unittest.mock import patch
|
||||
import pytest
|
||||
from subprocess import PIPE
|
||||
from thefuck.rules.no_command import match, get_new_command
|
||||
from thefuck.main import Command
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def command_found():
|
||||
return b'''No command 'aptget' found, did you mean:
|
||||
Command 'apt-get' from package 'apt' (main)
|
||||
aptget: command not found
|
||||
'''
|
||||
|
||||
@pytest.fixture
|
||||
def command_not_found():
|
||||
return b'''No command 'vom' found, but there are 19 similar ones
|
||||
vom: command not found
|
||||
'''
|
||||
|
||||
|
||||
def test_match(command_found, command_not_found):
|
||||
with patch('thefuck.rules.no_command.Popen') as Popen:
|
||||
Popen.return_value.stderr.read.return_value = command_found
|
||||
assert match(Command('aptget install vim', '', ''))
|
||||
Popen.assert_called_once_with('/usr/lib/command-not-found aptget',
|
||||
shell=True, stderr=PIPE)
|
||||
Popen.return_value.stderr.read.return_value = command_not_found
|
||||
assert not match(Command('ls', '', ''))
|
||||
|
||||
with patch('thefuck.rules.no_command.Popen') as Popen:
|
||||
Popen.return_value.stderr.read.return_value = command_found
|
||||
assert match(Command('sudo aptget install vim', '', ''))
|
||||
Popen.assert_called_once_with('/usr/lib/command-not-found aptget',
|
||||
shell=True, stderr=PIPE)
|
||||
|
||||
|
||||
def test_get_new_command(command_found):
|
||||
with patch('thefuck.rules.no_command._get_output',
|
||||
return_value=command_found.decode()):
|
||||
assert get_new_command(Command('aptget install vim', '', ''))\
|
||||
== 'apt-get install vim'
|
||||
assert get_new_command(Command('sudo aptget install vim', '', '')) \
|
||||
== 'sudo apt-get install vim'
|
@ -2,6 +2,7 @@ from collections import namedtuple
|
||||
from imp import load_source
|
||||
from pathlib import Path
|
||||
from os.path import expanduser
|
||||
from os import environ
|
||||
from subprocess import Popen, PIPE
|
||||
import sys
|
||||
|
||||
|
23
thefuck/rules/no_command.py
Normal file
23
thefuck/rules/no_command.py
Normal file
@ -0,0 +1,23 @@
|
||||
from subprocess import Popen, PIPE
|
||||
import re
|
||||
|
||||
|
||||
def _get_output(command):
|
||||
name = command.script.split(' ')[command.script.startswith('sudo')]
|
||||
check_script = '/usr/lib/command-not-found {}'.format(name)
|
||||
result = Popen(check_script, shell=True, stderr=PIPE)
|
||||
return result.stderr.read().decode()
|
||||
|
||||
|
||||
def match(command):
|
||||
output = _get_output(command)
|
||||
return "No command" in output and "from package" in output
|
||||
|
||||
|
||||
def get_new_command(command):
|
||||
output = _get_output(command)
|
||||
broken_name = re.findall(r"No command '([^']*)' found",
|
||||
output)[0]
|
||||
fixed_name = re.findall(r"Command '([^']*)' from package",
|
||||
output)[0]
|
||||
return command.script.replace(broken_name, fixed_name)
|
Loading…
x
Reference in New Issue
Block a user