Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Magnificent app which corrects your previous console command,
inspired by a [@liamosaur](https://twitter.com/liamosaur/)
[tweet](https://twitter.com/liamosaur/status/506975850596536320).

The Fuck is too slow? [Try experimental instant mode!](#experimental-instant-mode)
The Fuck is too slow? [Try experimental instant mode!](#experimental-instant-mode)

[![gif with examples][examples-link]][examples-link]

Expand Down Expand Up @@ -278,6 +278,7 @@ using the matched rule and runs it. Rules enabled by default are as follows:
* `tsuru_not_command` – fixes wrong `tsuru` commands like `tsuru shell`;
* `tmux` – fixes `tmux` commands;
* `unknown_command` – fixes hadoop hdfs-style "unknown command", for example adds missing '-' to the command on `hdfs dfs ls`;
* `unsudo` – removes `sudo` from previous command if a process refuses to run on super user privilege.
* `vagrant_up` – starts up the vagrant instance;
* `whois` – fixes `whois` command;
* `workon_doesnt_exists` – fixes `virtualenvwrapper` env name os suggests to create new.
Expand Down
22 changes: 22 additions & 0 deletions tests/rules/test_unsudo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import pytest
from thefuck.rules.unsudo import match, get_new_command
from thefuck.types import Command


@pytest.mark.parametrize('output', [
'you cannot perform this operation as root'])
def test_match(output):
assert match(Command('sudo ls', output))


def test_not_match():
assert not match(Command('', ''))
assert not match(Command('sudo ls', 'Permission denied'))
assert not match(Command('ls', 'you cannot perform this operation as root'))


@pytest.mark.parametrize('before, after', [
('sudo ls', 'ls'),
('sudo pacaur -S helloworld', 'pacaur -S helloworld')])
def test_get_new_command(before, after):
assert get_new_command(Command(before, '')) == after
15 changes: 15 additions & 0 deletions thefuck/rules/unsudo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
patterns = ['you cannot perform this operation as root']


def match(command):
if command.script_parts and command.script_parts[0] != 'sudo':
return False

for pattern in patterns:
if pattern in command.output.lower():
return True
return False


def get_new_command(command):
return ' '.join(command.script_parts[1:])