From 411aea67f771fb2a9ba0bf253b750d05deb2c242 Mon Sep 17 00:00:00 2001 From: Sudeep Juvekar Date: Mon, 20 Apr 2015 10:49:39 -0400 Subject: [PATCH 1/4] 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 From 17397bf30ff94e5fda0c1bcdaca75bdcac458641 Mon Sep 17 00:00:00 2001 From: Sudeep Juvekar Date: Mon, 20 Apr 2015 10:49:39 -0400 Subject: [PATCH 2/4] 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rules/test_python_command.py b/tests/rules/test_python_command.py index 804b9b6f..2247839f 100644 --- a/tests/rules/test_python_command.py +++ b/tests/rules/test_python_command.py @@ -1,5 +1,5 @@ from thefuck.main import Command -from thefuck.rules.sudo import match, get_new_command +from thefuck.rules.python_command import match, get_new_command def test_match(): assert match(Command('', '', 'Permission denied'), None) From cb31a1f7d08776b5a9e42bc944b2e12a23c1613e Mon Sep 17 00:00:00 2001 From: Sudeep Juvekar Date: Mon, 20 Apr 2015 10:49:39 -0400 Subject: [PATCH 3/4] 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 --- thefuck/rules/python_command.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/thefuck/rules/python_command.py b/thefuck/rules/python_command.py index 99169de9..3fc47827 100644 --- a/thefuck/rules/python_command.py +++ b/thefuck/rules/python_command.py @@ -4,7 +4,8 @@ def match(command, settings): toks = command.script.split() - return (toks[0].endswith('.py') + return (len(toks) > 0 + and toks[0].endswith('.py') and ('Permission denied' in command.stderr or 'command not found' in command.stderr)) From 1d878243ca50dcfe371ef30eec1bad4bd6b2e4a5 Mon Sep 17 00:00:00 2001 From: Sudeep Juvekar Date: Mon, 20 Apr 2015 10:49:39 -0400 Subject: [PATCH 4/4] 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rules/test_python_command.py b/tests/rules/test_python_command.py index 2247839f..e8071263 100644 --- a/tests/rules/test_python_command.py +++ b/tests/rules/test_python_command.py @@ -2,7 +2,7 @@ from thefuck.main import Command from thefuck.rules.python_command import match, get_new_command def test_match(): - assert match(Command('', '', 'Permission denied'), None) + assert match(Command('temp.py', '', 'Permission denied'), None) assert not match(Command('', '', ''), None) def test_get_new_command():