1
0
mirror of https://github.com/nvbn/thefuck.git synced 2025-02-21 20:38:54 +00:00

Added cd_mkdir rule

This fixes #50 and #98.

```bash
$ cd foo/bar/baz
cd: foo: No such file or directory
$ fuck
mkdir -p foo/bar/baz && cd foo/bar/baz
```

Added matchers for both Bash and sh error messages. Depending on your
default shell, the messages might be slightly different.
This commit is contained in:
Nils Winkler 2015-04-24 08:52:39 +02:00
parent d0e02bc20c
commit d12a8bcdd8
3 changed files with 34 additions and 0 deletions

View File

@ -156,6 +156,7 @@ using matched rule and run it. Rules enabled by default:
* `brew_unknown_command` – fixes wrong brew commands, for example `brew docto/brew doctor`;
* `cd_parent` – changes `cd..` to `cd ..`;
* `cd_mkdir` – creates directories before cd'ing into them;
* `cp_omitting_directory` – adds `-a` when you `cp` directory;
* `fix_alt_space` – replaces Alt+Space with Space character;
* `git_no_command` – fixes wrong git commands like `git brnch`;

View File

@ -0,0 +1,19 @@
from mock import Mock
from thefuck.rules.cd_mkdir import match, get_new_command
def test_match():
assert match(Mock(script='cd foo', stderr='cd: foo: No such file or directory'),
None)
assert match(Mock(script='cd foo/bar/baz', stderr='cd: foo: No such file or directory'),
None)
assert match(Mock(script='cd foo/bar/baz', stderr='cd: can\'t cd to foo/bar/baz'),
None)
assert not match(Mock(script='cd foo',
stderr=''), None)
assert not match(Mock(script='', stderr=''), None)
def test_get_new_command():
assert get_new_command(Mock(script='cd foo'), None) == 'mkdir -p foo && cd foo'
assert get_new_command(Mock(script='cd foo/bar/baz'), None) == 'mkdir -p foo/bar/baz && cd foo/bar/baz'

14
thefuck/rules/cd_mkdir.py Normal file
View File

@ -0,0 +1,14 @@
import re
from thefuck.utils import sudo_support
@sudo_support
def match(command, settings):
return (command.script.startswith('cd ')
and ('no such file or directory' in command.stderr.lower()
or 'cd: can\'t cd to' in command.stderr.lower()))
@sudo_support
def get_new_command(command, settings):
return re.sub(r'^cd (.*)', 'mkdir -p \\1 && cd \\1', command.script)