mirror of
https://github.com/nvbn/thefuck.git
synced 2025-01-18 20:11:17 +00:00
#942: Improve git_branch_0flag rule - with a new name
This commit is contained in:
parent
fe1942866b
commit
799f4127ca
@ -231,7 +231,7 @@ following rules are enabled by default:
|
||||
* `git_branch_delete_checked_out` – changes `git branch -d` to `git checkout master && git branch -D` when trying to delete a checked out branch;
|
||||
* `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_branch_flag_0_to_flag_dash_v` – undoes `git branch 0v` and runs `git branch -v` in its place;
|
||||
* `git_branch_0flag` – fixes commands such as `git branch 0v` and `git branch 0r` removing the created branch;
|
||||
* `git_checkout` – fixes branch name or creates new branch;
|
||||
* `git_clone_git_clone` – replaces `git clone git clone ...` with `git clone ...`
|
||||
* `git_commit_amend` – offers `git commit --amend` after previous commit;
|
||||
|
70
tests/rules/test_git_branch_0flag.py
Normal file
70
tests/rules/test_git_branch_0flag.py
Normal file
@ -0,0 +1,70 @@
|
||||
import pytest
|
||||
|
||||
from thefuck.rules.git_branch_0flag import get_new_command, match
|
||||
from thefuck.types import Command
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def output_branch_exists():
|
||||
return "fatal: A branch named 'bar' already exists."
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"script",
|
||||
[
|
||||
"git branch 0a",
|
||||
"git branch 0d",
|
||||
"git branch 0f",
|
||||
"git branch 0r",
|
||||
"git branch 0v",
|
||||
"git branch 0d foo",
|
||||
"git branch 0D foo",
|
||||
],
|
||||
)
|
||||
def test_match(script, output_branch_exists):
|
||||
assert match(Command(script, output_branch_exists))
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"script",
|
||||
[
|
||||
"git branch -a",
|
||||
"git branch -r",
|
||||
"git branch -v",
|
||||
"git branch -d foo",
|
||||
"git branch -D foo",
|
||||
],
|
||||
)
|
||||
def test_not_match(script, output_branch_exists):
|
||||
assert not match(Command(script, ""))
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"script, new_command",
|
||||
[
|
||||
("git branch 0a", "git branch -D 0a && git branch -a"),
|
||||
("git branch 0v", "git branch -D 0v && git branch -v"),
|
||||
("git branch 0d foo", "git branch -D 0d && git branch -d foo"),
|
||||
("git branch 0D foo", "git branch -D 0D && git branch -D foo"),
|
||||
("git branch 0l 'maint-*'", "git branch -D 0l && git branch -l 'maint-*'"),
|
||||
("git branch 0u upstream", "git branch -D 0u && git branch -u upstream"),
|
||||
],
|
||||
)
|
||||
def test_get_new_command_branch_exists(script, output_branch_exists, new_command):
|
||||
assert get_new_command(Command(script, output_branch_exists)) == new_command
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def output_not_valid_object():
|
||||
return "fatal: Not a valid object name: 'bar'."
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"script, new_command",
|
||||
[
|
||||
("git branch 0l 'maint-*'", "git branch -l 'maint-*'"),
|
||||
("git branch 0u upstream", "git branch -u upstream"),
|
||||
],
|
||||
)
|
||||
def test_get_new_command_not_valid_object(script, output_not_valid_object, new_command):
|
||||
assert get_new_command(Command(script, output_not_valid_object)) == new_command
|
@ -1,22 +0,0 @@
|
||||
import pytest
|
||||
from thefuck.rules.git_branch_flag_0_to_flag_dash_v import match, get_new_command
|
||||
from thefuck.types import Command
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def output():
|
||||
return ""
|
||||
|
||||
|
||||
def test_match_git_branch_0v(output):
|
||||
assert match(Command('git branch 0v', output))
|
||||
|
||||
|
||||
def test_matches_no__git_branch_0_anything(output):
|
||||
assert not match(Command('git branch -v', ''))
|
||||
assert not match(Command('ls', output))
|
||||
|
||||
|
||||
def test_get_new_command(output):
|
||||
assert get_new_command(Command('git branch 0v', output))\
|
||||
== 'git branch -D 0v && git branch -v'
|
24
thefuck/rules/git_branch_0flag.py
Normal file
24
thefuck/rules/git_branch_0flag.py
Normal file
@ -0,0 +1,24 @@
|
||||
from thefuck.shells import shell
|
||||
from thefuck.specific.git import git_support
|
||||
from thefuck.utils import memoize
|
||||
|
||||
|
||||
@memoize
|
||||
def first_0flag(script_parts):
|
||||
return next((p for p in script_parts if len(p) == 2 and p.startswith("0")), None)
|
||||
|
||||
|
||||
@git_support
|
||||
def match(command):
|
||||
return command.script_parts[1] == "branch" and first_0flag(command.script_parts)
|
||||
|
||||
|
||||
@git_support
|
||||
def get_new_command(command):
|
||||
branch_name = first_0flag(command.script_parts)
|
||||
fixed_flag = branch_name.replace("0", "-")
|
||||
fixed_script = command.script.replace(branch_name, fixed_flag)
|
||||
if "A branch named '" in command.output and "' already exists." in command.output:
|
||||
delete_branch = u"git branch -D {}".format(branch_name)
|
||||
return shell.and_(delete_branch, fixed_script)
|
||||
return fixed_script
|
@ -1,36 +0,0 @@
|
||||
from thefuck.shells import shell
|
||||
from thefuck.specific.git import git_support
|
||||
from thefuck.utils import memoize
|
||||
|
||||
'''
|
||||
keys are fatfingered entry, values are two-element tuples
|
||||
where the first element is "the fix" and the second element
|
||||
is "what you meant to do
|
||||
'''
|
||||
# clunky when there's only one key, but as others get added, I _think_
|
||||
# this will be cleaner
|
||||
flags_and_their_fixes = dict()
|
||||
flags_and_their_fixes["v"] = ('git branch -D 0v', 'git branch -v')
|
||||
|
||||
|
||||
@memoize
|
||||
def _supported_flag_fix(command):
|
||||
flag = command.script_parts[2:][0]
|
||||
|
||||
if len(flag) == 2 and flag.startswith("0"):
|
||||
return flags_and_their_fixes[flag[1]]
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
@git_support
|
||||
def match(command):
|
||||
return (command.script_parts
|
||||
and command.script_parts[1] == 'branch'
|
||||
and _supported_flag_fix(command) is not None)
|
||||
|
||||
|
||||
@git_support
|
||||
def get_new_command(command):
|
||||
fix_parts = _supported_flag_fix(command)
|
||||
return shell.and_(fix_parts[0], fix_parts[1])
|
Loading…
x
Reference in New Issue
Block a user