mirror of
https://github.com/nvbn/thefuck.git
synced 2025-11-01 15:42:06 +00:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2db0a215b4 | ||
|
|
f6f6e2223c | ||
|
|
d86bf8da40 | ||
|
|
a77ca37be2 | ||
|
|
3fb7a0c123 | ||
|
|
c0c584b13a | ||
|
|
a81d9af621 | ||
|
|
1d878243ca | ||
|
|
cb31a1f7d0 | ||
|
|
17397bf30f | ||
|
|
411aea67f7 | ||
|
|
0b0ad0558a |
@@ -1,8 +1,8 @@
|
||||
# The Fuck [](https://travis-ci.org/nvbn/thefuck)
|
||||
|
||||
Magnificent app which corrects your previous console command,
|
||||
inspired by [@liamosaur](https://twitter.com/liamosaur/status/506975850596536320)
|
||||
twit.
|
||||
inspired by a [@liamosaur](https://twitter.com/liamosaur/)
|
||||
[tweet](https://twitter.com/liamosaur/status/506975850596536320).
|
||||
|
||||
Few examples:
|
||||
|
||||
@@ -190,3 +190,4 @@ py.test
|
||||
```
|
||||
|
||||
## License MIT
|
||||
Project License can be found [here](LICENSE.md).
|
||||
|
||||
2
setup.py
2
setup.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
|
||||
setup(name='thefuck',
|
||||
version=1.13,
|
||||
version=1.14,
|
||||
description="Magnificent app which corrects your previous console command",
|
||||
author='Vladimir Iakovlev',
|
||||
author_email='nvbn.rm@gmail.com',
|
||||
|
||||
@@ -12,17 +12,33 @@ branch
|
||||
"""
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def git_not_command_one_of_this():
|
||||
return """git: 'st' is not a git command. See 'git --help'.
|
||||
|
||||
Did you mean one of these?
|
||||
status
|
||||
reset
|
||||
stage
|
||||
stash
|
||||
stats
|
||||
"""
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def git_command():
|
||||
return "* master"
|
||||
|
||||
|
||||
def test_match(git_not_command, git_command):
|
||||
def test_match(git_not_command, git_command, git_not_command_one_of_this):
|
||||
assert match(Command('git brnch', '', git_not_command), None)
|
||||
assert match(Command('git st', '', git_not_command_one_of_this), None)
|
||||
assert not match(Command('ls brnch', '', git_not_command), None)
|
||||
assert not match(Command('git branch', '', git_command), None)
|
||||
|
||||
|
||||
def test_get_new_command(git_not_command):
|
||||
def test_get_new_command(git_not_command, git_not_command_one_of_this):
|
||||
assert get_new_command(Command('git brnch', '', git_not_command), None)\
|
||||
== 'git branch'
|
||||
assert get_new_command(
|
||||
Command('git st', '', git_not_command_one_of_this), None) == 'git status'
|
||||
|
||||
13
tests/rules/test_mkdir_p.py
Normal file
13
tests/rules/test_mkdir_p.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from thefuck.main import Command
|
||||
from thefuck.rules.mkdir_p import match, get_new_command
|
||||
|
||||
|
||||
def test_match():
|
||||
assert match(Command('mkdir foo/bar/baz', '', 'mkdir: foo/bar: No such file or directory'), None)
|
||||
assert not match(Command('mkdir foo/bar/baz', '', ''), None)
|
||||
assert not match(Command('mkdir foo/bar/baz', '', 'foo bar baz'), None)
|
||||
assert not match(Command('', '', ''), None)
|
||||
|
||||
|
||||
def test_get_new_command():
|
||||
assert get_new_command(Command('mkdir foo/bar/baz', '', ''), None) == 'mkdir -p foo/bar/baz'
|
||||
9
tests/rules/test_python_command.py
Normal file
9
tests/rules/test_python_command.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from thefuck.main import Command
|
||||
from thefuck.rules.python_command import match, get_new_command
|
||||
|
||||
def test_match():
|
||||
assert match(Command('temp.py', '', 'Permission denied'), None)
|
||||
assert not match(Command('', '', ''), None)
|
||||
|
||||
def test_get_new_command():
|
||||
assert get_new_command(Command('./test_sudo.py', '', ''), None) == 'python ./test_sudo.py'
|
||||
@@ -51,7 +51,7 @@ def get_rules(user_dir, settings):
|
||||
.joinpath('rules')\
|
||||
.glob('*.py')
|
||||
user = user_dir.joinpath('rules').glob('*.py')
|
||||
return [load_rule(rule) for rule in list(bundled) + list(user)
|
||||
return [load_rule(rule) for rule in sorted(list(bundled)) + list(user)
|
||||
if rule.name != '__init__.py' and is_rule_enabled(settings, rule)]
|
||||
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ import re
|
||||
def match(command, settings):
|
||||
return ('git' in command.script
|
||||
and " is not a git command. See 'git --help'." in command.stderr
|
||||
and 'Did you mean this?' in command.stderr)
|
||||
and 'Did you mean' in command.stderr)
|
||||
|
||||
|
||||
def get_new_command(command, settings):
|
||||
broken_cmd = re.findall(r"git: '([^']*)' is not a git command",
|
||||
command.stderr)[0]
|
||||
new_cmd = re.findall(r'Did you mean this\?\n\s*([^\n]*)',
|
||||
new_cmd = re.findall(r'Did you mean[^\n]*\n\s*([^\n]*)',
|
||||
command.stderr)[0]
|
||||
return command.script.replace(broken_cmd, new_cmd, 1)
|
||||
|
||||
|
||||
9
thefuck/rules/mkdir_p.py
Normal file
9
thefuck/rules/mkdir_p.py
Normal file
@@ -0,0 +1,9 @@
|
||||
import re
|
||||
|
||||
def match(command, settings):
|
||||
return ('mkdir' in command.script
|
||||
and 'No such file or directory' in command.stderr)
|
||||
|
||||
|
||||
def get_new_command(command, settings):
|
||||
return re.sub('^mkdir (.*)', 'mkdir -p \\1', command.script)
|
||||
13
thefuck/rules/python_command.py
Normal file
13
thefuck/rules/python_command.py
Normal file
@@ -0,0 +1,13 @@
|
||||
# add 'python' suffix to the command if
|
||||
# 1) The script does not have execute permission or
|
||||
# 2) is interpreted as shell script
|
||||
|
||||
def match(command, settings):
|
||||
toks = command.script.split()
|
||||
return (len(toks) > 0
|
||||
and toks[0].endswith('.py')
|
||||
and ('Permission denied' in command.stderr or
|
||||
'command not found' in command.stderr))
|
||||
|
||||
def get_new_command(command, settings):
|
||||
return 'python ' + command.script
|
||||
Reference in New Issue
Block a user