From 3c4f9d50a945a13c813884c795c78e8634940cf7 Mon Sep 17 00:00:00 2001 From: mcarton Date: Fri, 15 May 2015 18:03:17 +0200 Subject: [PATCH] Add a `no_such_file` rule --- README.md | 1 + thefuck/rules/no_such_file.py | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 thefuck/rules/no_such_file.py diff --git a/README.md b/README.md index 6b507ee4..9cf7237f 100644 --- a/README.md +++ b/README.md @@ -161,6 +161,7 @@ using the matched rule and runs it. Rules enabled by default are as follows: * `lein_not_task` – fixes wrong `lein` tasks like `lein rpl`; * `mkdir_p` – adds `-p` when you trying to create directory without parent; * `no_command` – fixes wrong console commands, for example `vom/vim`; +* `no_such_file` – creates missing directories with `mv` and `cp` commands; * `man_no_space` – fixes man commands without spaces, for example `mandiff`; * `pacman` – installs app with `pacman` or `yaourt` if it is not installed; * `pip_unknown_command` – fixes wrong pip commands, for example `pip instatl/pip install`; diff --git a/thefuck/rules/no_such_file.py b/thefuck/rules/no_such_file.py new file mode 100644 index 00000000..157a41a6 --- /dev/null +++ b/thefuck/rules/no_such_file.py @@ -0,0 +1,26 @@ +import re + + +patterns = ( + r"mv: cannot move '[^']*' to '([^']*)': No such file or directory", + r"cp: cannot create regular file '([^']*)': No such file or directory", +) + + +def match(command, settings): + for pattern in patterns: + if re.search(pattern, command.stderr): + return True + + return False + + +def get_new_command(command, settings): + for pattern in patterns: + file = re.findall(pattern, command.stderr) + + if file: + file = file[0] + dir = file[0:file.rfind('/')] + + return 'mkdir -p {} && {}'.format(dir, command.script)