diff --git a/tests/rules/test_apt_invalid_operation.py b/tests/rules/test_apt_invalid_operation.py index 7b9fcde3..bc7b8c9b 100644 --- a/tests/rules/test_apt_invalid_operation.py +++ b/tests/rules/test_apt_invalid_operation.py @@ -116,6 +116,8 @@ def test_get_operations(set_help, app, help_text, operations): apt_get_help, 'apt-get install vim'), ('apt saerch vim', invalid_operation('saerch'), apt_help, 'apt search vim'), + ('apt uninstall vim', invalid_operation('uninstall'), + apt_help, 'apt remove vim'), ]) def test_get_new_command(set_help, output, script, help_text, result): set_help(help_text) diff --git a/tests/rules/test_dnf_no_such_command.py b/tests/rules/test_dnf_no_such_command.py index 6229828f..fad9b079 100644 --- a/tests/rules/test_dnf_no_such_command.py +++ b/tests/rules/test_dnf_no_such_command.py @@ -184,6 +184,8 @@ def test_get_operations(set_help): 'dnf install vim'), ('dnf saerch vim', invalid_command('saerch'), 'dnf search vim'), + ('dnf uninstall vim', invalid_command('uninstall'), + 'dnf remove vim'), ]) def test_get_new_command(set_help, output, script, result): set_help(help_text) diff --git a/tests/rules/test_git_checkout.py b/tests/rules/test_git_checkout.py index 20fff03c..c54be16c 100644 --- a/tests/rules/test_git_checkout.py +++ b/tests/rules/test_git_checkout.py @@ -39,6 +39,11 @@ def test_not_match(command): (b'', []), (b'* master', ['master']), (b' remotes/origin/master', ['master']), + (b' remotes/origin/test/1', ['test/1']), + (b' remotes/origin/test/1/2/3', ['test/1/2/3']), + (b' test/1', ['test/1']), + (b' test/1/2/3', ['test/1/2/3']), + (b' remotes/origin/HEAD -> origin/master', []), (b' just-another-branch', ['just-another-branch']), (b'* master\n just-another-branch', ['master', 'just-another-branch']), (b'* master\n remotes/origin/master\n just-another-branch', diff --git a/thefuck/rules/apt_invalid_operation.py b/thefuck/rules/apt_invalid_operation.py index 076109ba..c2564c03 100644 --- a/thefuck/rules/apt_invalid_operation.py +++ b/thefuck/rules/apt_invalid_operation.py @@ -53,5 +53,10 @@ def _get_operations(app): @sudo_support def get_new_command(command): invalid_operation = command.output.split()[-1] - operations = _get_operations(command.script_parts[0]) - return replace_command(command, invalid_operation, operations) + + if invalid_operation == 'uninstall': + return [command.script.replace('uninstall', 'remove')] + + else: + operations = _get_operations(command.script_parts[0]) + return replace_command(command, invalid_operation, operations) diff --git a/thefuck/rules/git_checkout.py b/thefuck/rules/git_checkout.py index b500652f..6345cbc3 100644 --- a/thefuck/rules/git_checkout.py +++ b/thefuck/rules/git_checkout.py @@ -18,10 +18,12 @@ def get_branches(): stdout=subprocess.PIPE) for line in proc.stdout.readlines(): line = line.decode('utf-8') + if '->' in line: # Remote HEAD like b' remotes/origin/HEAD -> origin/master' + continue if line.startswith('*'): line = line.split(' ')[1] - if '/' in line: - line = line.split('/')[-1] + if line.strip().startswith('remotes/'): + line = '/'.join(line.split('/')[2:]) yield line.strip() diff --git a/thefuck/rules/sudo.py b/thefuck/rules/sudo.py index 4723de0b..a2980216 100644 --- a/thefuck/rules/sudo.py +++ b/thefuck/rules/sudo.py @@ -21,7 +21,7 @@ patterns = ['permission denied', 'edspermissionerror', 'you don\'t have write permissions', 'use `sudo`', - 'SudoRequiredError', + 'sudorequirederror', 'error: insufficient privileges']