mirror of
https://github.com/nvbn/thefuck.git
synced 2025-01-31 02:01:13 +00:00
#355 Add touch
rule
This commit is contained in:
parent
6e886c6b4f
commit
3e8db28a73
@ -198,6 +198,7 @@ using the matched rule and runs it. Rules enabled by default are as follows:
|
|||||||
* `switch_lang` – switches command from your local layout to en;
|
* `switch_lang` – switches command from your local layout to en;
|
||||||
* `systemctl` – correctly orders parameters of confusing `systemctl`;
|
* `systemctl` – correctly orders parameters of confusing `systemctl`;
|
||||||
* `test.py` – runs `py.test` instead of `test.py`;
|
* `test.py` – runs `py.test` instead of `test.py`;
|
||||||
|
* `touch` – creates missing directories before "touching";
|
||||||
* `tsuru_login` – runs `tsuru login` if not authenticated or session expired;
|
* `tsuru_login` – runs `tsuru login` if not authenticated or session expired;
|
||||||
* `tsuru_not_command` – fixes wrong `tsuru` commands like `tsuru shell`;
|
* `tsuru_not_command` – fixes wrong `tsuru` commands like `tsuru shell`;
|
||||||
* `tmux` – fixes `tmux` commands;
|
* `tmux` – fixes `tmux` commands;
|
||||||
|
29
tests/test_touch.py
Normal file
29
tests/test_touch.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import pytest
|
||||||
|
from thefuck.rules.touch import match, get_new_command
|
||||||
|
from tests.utils import Command
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def stderr():
|
||||||
|
return "touch: cannot touch '/a/b/c':" \
|
||||||
|
" No such file or directory"
|
||||||
|
|
||||||
|
|
||||||
|
def test_match(stderr):
|
||||||
|
command = Command(
|
||||||
|
'touch /a/b/c', stderr=stderr)
|
||||||
|
assert match(command)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('command', [
|
||||||
|
Command('touch /a/b/c'),
|
||||||
|
Command('touch /a/b/c', stdout=stderr()),
|
||||||
|
Command('ls /a/b/c', stderr=stderr())])
|
||||||
|
def test_not_match(command):
|
||||||
|
assert not match(command)
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_new_command(stderr):
|
||||||
|
command = Command('touch /a/b/c', stderr=stderr)
|
||||||
|
fixed_command = get_new_command(command)
|
||||||
|
assert fixed_command == 'mkdir -p /a/b && touch /a/b/c'
|
13
thefuck/rules/touch.py
Normal file
13
thefuck/rules/touch.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import re
|
||||||
|
from thefuck.utils import for_app
|
||||||
|
from thefuck.shells import and_
|
||||||
|
|
||||||
|
|
||||||
|
@for_app('touch')
|
||||||
|
def match(command):
|
||||||
|
return 'No such file or directory' in command.stderr
|
||||||
|
|
||||||
|
|
||||||
|
def get_new_command(command):
|
||||||
|
path = re.findall(r"touch: cannot touch '(.+)/.+':", command.stderr)[0]
|
||||||
|
return and_(u'mkdir -p {}'.format(path), command.script)
|
Loading…
x
Reference in New Issue
Block a user