mirror of
https://github.com/nvbn/thefuck.git
synced 2025-01-18 20:11:17 +00:00
Merge branch 'git-branch-exists' of https://github.com/scorphus/thefuck into scorphus-git-branch-exists
This commit is contained in:
commit
1aa2ec1795
@ -157,6 +157,7 @@ using the matched rule and runs it. Rules enabled by default are as follows:
|
||||
* `fix_file` – opens a file with an error in your `$EDITOR`;
|
||||
* `git_add` – fixes *"pathspec 'foo' did not match any file(s) known to git."*;
|
||||
* `git_branch_delete` – changes `git branch -d` to `git branch -D`;
|
||||
* `git_branch_exists` – offers `git branch -d foo`, `git branch -D foo` or `git checkout foo` when creating a branch that already exists;
|
||||
* `git_branch_list` – catches `git branch list` in place of `git branch` and removes created branch;
|
||||
* `git_checkout` – fixes branch name or creates new branch;
|
||||
* `git_diff_staged` – adds `--staged` to previous `git diff` with unexpected output;
|
||||
|
33
tests/rules/test_git_branch_exists.py
Normal file
33
tests/rules/test_git_branch_exists.py
Normal file
@ -0,0 +1,33 @@
|
||||
import pytest
|
||||
from thefuck.rules.git_branch_exists import match, get_new_command
|
||||
from tests.utils import Command
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def stderr(branch_name):
|
||||
return "fatal: A branch named '{}' already exists.".format(branch_name)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def new_command(branch_name):
|
||||
return [cmd.format(branch_name) for cmd in [
|
||||
'git branch -d {0} && git branch {0}',
|
||||
'git branch -D {0} && git branch {0}', 'git checkout {0}']]
|
||||
|
||||
|
||||
@pytest.mark.parametrize('script, branch_name', [
|
||||
('git branch foo', 'foo'),
|
||||
('git branch bar', 'bar')])
|
||||
def test_match(stderr, script, branch_name):
|
||||
assert match(Command(script=script, stderr=stderr))
|
||||
|
||||
|
||||
@pytest.mark.parametrize('script', ['git branch foo', 'git branch bar'])
|
||||
def test_not_match(script):
|
||||
assert not match(Command(script=script, stderr=''))
|
||||
|
||||
|
||||
@pytest.mark.parametrize('script, branch_name, ', [
|
||||
('git branch foo', 'foo'), ('git branch bar', 'bar')])
|
||||
def test_get_new_command(stderr, new_command, script, branch_name):
|
||||
assert get_new_command(Command(script=script, stderr=stderr)) == new_command
|
21
thefuck/rules/git_branch_exists.py
Normal file
21
thefuck/rules/git_branch_exists.py
Normal file
@ -0,0 +1,21 @@
|
||||
import re
|
||||
from thefuck.shells import shell
|
||||
from thefuck.specific.git import git_support
|
||||
|
||||
|
||||
@git_support
|
||||
def match(command):
|
||||
return ('branch' in command.script
|
||||
and "fatal: A branch named '" in command.stderr
|
||||
and " already exists." in command.stderr)
|
||||
|
||||
|
||||
@git_support
|
||||
def get_new_command(command):
|
||||
branch_name = re.findall(
|
||||
r"fatal: A branch named '([^']*)' already exists.", command.stderr)[0]
|
||||
return_ = [shell.and_(*cmd_list).format(branch_name) for cmd_list in [
|
||||
['git branch -d {0}', 'git branch {0}'],
|
||||
['git branch -D {0}', 'git branch {0}'],
|
||||
['git checkout {0}']]]
|
||||
return return_
|
Loading…
x
Reference in New Issue
Block a user