From 411aea67f771fb2a9ba0bf253b750d05deb2c242 Mon Sep 17 00:00:00 2001 From: Sudeep Juvekar Date: Mon, 20 Apr 2015 10:49:39 -0400 Subject: [PATCH] A special case for 'Permission denied' error msg when trying to execute a python scripy. The script does not have execute permission and/or does not start with !#/usr/... In that case, pre-pend the command with 'python' keyword. Change-Id: Idf73ee9cf0a523f51c78672188a457b2fcedc1e6 --- tests/rules/test_python_command.py | 9 +++++++++ thefuck/main.py | 2 +- thefuck/rules/python_command.py | 12 ++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/rules/test_python_command.py create mode 100644 thefuck/rules/python_command.py diff --git a/tests/rules/test_python_command.py b/tests/rules/test_python_command.py new file mode 100644 index 00000000..804b9b6f --- /dev/null +++ b/tests/rules/test_python_command.py @@ -0,0 +1,9 @@ +from thefuck.main import Command +from thefuck.rules.sudo import match, get_new_command + +def test_match(): + assert match(Command('', '', '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' diff --git a/thefuck/main.py b/thefuck/main.py index adb0084d..36c0a9a2 100644 --- a/thefuck/main.py +++ b/thefuck/main.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)] diff --git a/thefuck/rules/python_command.py b/thefuck/rules/python_command.py new file mode 100644 index 00000000..99169de9 --- /dev/null +++ b/thefuck/rules/python_command.py @@ -0,0 +1,12 @@ +# 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 (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