Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rule for branch dash 0 #942

Merged
merged 8 commits into from
Jul 1, 2021
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ following rules are enabled by default:
* `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_branch_flag_0_to_flag_dash_v` – undoes `git branch 0v` and runs `git branch -v` in its place;
* `git_checkout` – fixes branch name or creates new branch;
* `git_commit_amend` – offers `git commit --amend` after previous commit;
* `git_commit_reset` – offers `git reset HEAD~` after previous commit;
Expand Down
22 changes: 22 additions & 0 deletions tests/rules/test_git_branch_flag_0_to_flag_dash_v.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
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'
36 changes: 36 additions & 0 deletions thefuck/rules/git_branch_flag_0_to_flag_dash_v.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
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])