diff --git a/tests/test_utils.py b/tests/test_utils.py index 1acee00d..b724bca2 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -27,8 +27,8 @@ def test_sudo_support(return_value, command, called, result): @pytest.mark.parametrize('called, command, stderr', [ - ('git co', "git 'checkout'", "19:22:36.299340 git.c:282 trace: alias expansion: co => 'checkout'"), - ('git com file', "git 'commit' '--verbose' file", "19:23:25.470911 git.c:282 trace: alias expansion: com => 'commit' '--verbose'")]) + ('git co', 'git checkout', "19:22:36.299340 git.c:282 trace: alias expansion: co => 'checkout'"), + ('git com file', 'git commit --verbose file', "19:23:25.470911 git.c:282 trace: alias expansion: com => 'commit' '--verbose'")]) def test_git_support(called, command, stderr): @git_support def fn(command, settings): return command.script diff --git a/thefuck/utils.py b/thefuck/utils.py index 7d7e670b..c27f337b 100644 --- a/thefuck/utils.py +++ b/thefuck/utils.py @@ -1,5 +1,6 @@ from difflib import get_close_matches from functools import wraps +from shlex import split import os import pickle import re @@ -10,11 +11,9 @@ from .types import Command DEVNULL = open(os.devnull, 'w') if six.PY2: - import pipes - quote = pipes.quote + from pipes import quote else: - import shlex - quote = shlex.quote + from shlex import quote def which(program): @@ -84,7 +83,12 @@ def git_support(fn): search = re.search("trace: alias expansion: ([^ ]*) => ([^\n]*)", command.stderr) alias = search.group(1) - expansion = search.group(2) + + # by default git quotes everthing, for example: + # 'commit' '--amend' + # which is surprising and does not allow to easily test for + # eg. 'git commit' + expansion = ' '.join(map(quote, split(search.group(2)))) new_script = command.script.replace(alias, expansion) command = Command._replace(command, script=new_script)