From 7c858fadb3458be829d3d43666ccb46c3ed5b8a0 Mon Sep 17 00:00:00 2001 From: David Hart Date: Fri, 5 Jan 2018 21:25:08 +0000 Subject: [PATCH] #762: handle single quotes in git_branch_exists * handle single quotes in git_branch_exists * Fix line length * Fix missing quotes from test --- tests/rules/test_git_branch_exists.py | 23 +++++++++++++++-------- thefuck/rules/git_branch_exists.py | 5 +++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/tests/rules/test_git_branch_exists.py b/tests/rules/test_git_branch_exists.py index 14c17e50..b6e0df6b 100644 --- a/tests/rules/test_git_branch_exists.py +++ b/tests/rules/test_git_branch_exists.py @@ -4,8 +4,8 @@ from thefuck.types import Command @pytest.fixture -def output(branch_name): - return "fatal: A branch named '{}' already exists.".format(branch_name) +def output(src_branch_name): + return "fatal: A branch named '{}' already exists.".format(src_branch_name) @pytest.fixture @@ -17,18 +17,25 @@ def new_command(branch_name): 'git branch -D {0} && git checkout -b {0}', 'git checkout {0}']] -@pytest.mark.parametrize('script, branch_name', [ - ('git branch foo', 'foo'), ('git checkout bar', 'bar')]) +@pytest.mark.parametrize('script, src_branch_name, branch_name', [ + ('git branch foo', 'foo', 'foo'), + ('git checkout bar', 'bar', 'bar'), + ('git checkout -b "let\'s-push-this"', '"let\'s-push-this"', '"let\'s-push-this"')]) def test_match(output, script, branch_name): assert match(Command(script, output)) -@pytest.mark.parametrize('script', ['git branch foo', 'git checkout bar']) +@pytest.mark.parametrize('script', [ + 'git branch foo', + 'git checkout bar', + 'git checkout -b "let\'s-push-this"']) def test_not_match(script): assert not match(Command(script, '')) -@pytest.mark.parametrize('script, branch_name, ', [ - ('git branch foo', 'foo'), ('git checkout bar', 'bar')]) -def test_get_new_command(output, new_command, script, branch_name): +@pytest.mark.parametrize('script, src_branch_name, branch_name', [ + ('git branch foo', 'foo', 'foo'), + ('git checkout bar', 'bar', 'bar'), + ('git checkout -b "let\'s-push-this"', "let's-push-this", "let\\'s-push-this")]) +def test_get_new_command(output, new_command, script, src_branch_name, branch_name): assert get_new_command(Command(script, output)) == new_command diff --git a/thefuck/rules/git_branch_exists.py b/thefuck/rules/git_branch_exists.py index 93e11b52..4a7a8227 100644 --- a/thefuck/rules/git_branch_exists.py +++ b/thefuck/rules/git_branch_exists.py @@ -7,14 +7,15 @@ from thefuck.utils import eager @git_support def match(command): return ("fatal: A branch named '" in command.output - and " already exists." in command.output) + and "' already exists." in command.output) @git_support @eager def get_new_command(command): branch_name = re.findall( - r"fatal: A branch named '([^']*)' already exists.", command.output)[0] + r"fatal: A branch named '(.+)' already exists.", command.output)[0] + branch_name = branch_name.replace("'", r"\'") new_command_templates = [['git branch -d {0}', 'git branch {0}'], ['git branch -d {0}', 'git checkout -b {0}'], ['git branch -D {0}', 'git branch {0}'],