From 360e4673eb983802e754e5b527b612301e6a135c Mon Sep 17 00:00:00 2001 From: Maciej Mionskowski Date: Wed, 24 Jun 2015 09:36:09 +0200 Subject: [PATCH 1/2] Added systemctl rule --- tests/rules/test_systemctl.py | 18 ++++++++++++++++++ thefuck/rules/systemctl.py | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 tests/rules/test_systemctl.py create mode 100644 thefuck/rules/systemctl.py diff --git a/tests/rules/test_systemctl.py b/tests/rules/test_systemctl.py new file mode 100644 index 00000000..8c8901e8 --- /dev/null +++ b/tests/rules/test_systemctl.py @@ -0,0 +1,18 @@ +import pytest +from thefuck.rules.systemctl import match, get_new_command +from tests.utils import Command + + + +def test_match(): + assert match(Command('systemctl nginx start', stderr='Unknown operation \'nginx\'.'), None) + assert match(Command('sudo systemctl nginx start', stderr='Unknown operation \'nginx\'.'), None) + assert not match(Command('systemctl start nginx'), None) + assert not match(Command('systemctl start nginx'), None) + assert not match(Command('sudo systemctl nginx', stderr='Unknown operation \'nginx\'.'), None) + assert not match(Command('systemctl nginx', stderr='Unknown operation \'nginx\'.'), None) + assert not match(Command('systemctl start wtf', stderr='Failed to start wtf.service: Unit wtf.service failed to load: No such file or directory.'), None) + +def test_get_new_command(): + assert get_new_command(Command('systemctl nginx start'), None) == "systemctl start nginx" + assert get_new_command(Command('sudo systemctl nginx start'), None) == "sudo systemctl start nginx" diff --git a/thefuck/rules/systemctl.py b/thefuck/rules/systemctl.py new file mode 100644 index 00000000..6065abc5 --- /dev/null +++ b/thefuck/rules/systemctl.py @@ -0,0 +1,16 @@ +""" +The confusion in systemctl's param order is massive +""" +from thefuck.utils import sudo_support + +@sudo_support +def match(command, settings): + #Catches 'Unknown operation 'service'.' when executing systemctl with misordered arguments + cmd = command.script.split() + return ('systemctl' in command.script) and ('Unknown operation \'' in command.stderr) and (len(cmd) - cmd.index('systemctl') == 3); + +@sudo_support +def get_new_command(command, settings): + cmd = command.script.split() + cmd[len(cmd)-1], cmd[len(cmd)-2] = cmd[len(cmd)-2], cmd[len(cmd)-1] + return ' '.join(cmd) From 28ab6c62f8fb3b5decac32938e2f3436a17e4f12 Mon Sep 17 00:00:00 2001 From: Maciej Mionskowski Date: Wed, 24 Jun 2015 11:07:03 +0200 Subject: [PATCH 2/2] Added systemctl rule to README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c70683b8..cfd86e34 100644 --- a/README.md +++ b/README.md @@ -169,7 +169,7 @@ using the matched rule and runs it. Rules enabled by default are as follows: * `git_push` – adds `--set-upstream origin $branch` to previous failed `git push`; * `git_stash` – stashes you local modifications before rebasing or switching branch; * `go_run` – appends `.go` extension when compiling/running Go programs -* `grep_recursive` – adds `-r` when you trying to grep directory; +* `grep_recursive` – adds `-r` when you trying to grep directory; * `has_exists_script` – prepends `./` when script/binary exists; * `lein_not_task` – fixes wrong `lein` tasks like `lein rpl`; * `ls_lah` – adds -lah to ls; @@ -188,6 +188,7 @@ using the matched rule and runs it. Rules enabled by default are as follows: * `ssh_known_hosts` – removes host from `known_hosts` on warning; * `sudo` – prepends `sudo` to previous command if it failed because of permissions; * `switch_layout` – switches command from your local layout to en; +* `systemctl` – correctly orders parameters of confusing systemctl; * `whois` – fixes `whois` command. Enabled by default only on specific platforms: