From 8da4dce5f251f96ab2141273757950aeaa3e2ef3 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Fri, 27 Jan 2017 19:38:34 -0500 Subject: [PATCH] Add git_tag_force rule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds `--force` to `git tag` when needed. For example: $ git tag alert fatal: tag 'alert' already exists $ fuck git tag --force alert [enter/↑/↓/ctrl+c] Updated tag 'alert' (was dec6956) $ --- README.md | 1 + tests/rules/test_git_tag_force.py | 18 ++++++++++++++++++ thefuck/rules/git_tag_force.py | 13 +++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 tests/rules/test_git_tag_force.py create mode 100644 thefuck/rules/git_tag_force.py diff --git a/README.md b/README.md index 292431fd..28c23132 100644 --- a/README.md +++ b/README.md @@ -189,6 +189,7 @@ using the matched rule and runs it. Rules enabled by default are as follows: * `git_remote_seturl_add` – runs `git remote add` when `git remote set_url` on nonexistant remote; * `git_stash` – stashes you local modifications before rebasing or switching branch; * `git_stash_pop` – adds your local modifications before popping stash, then resets; +* `git_tag_force` – adds `--force` to `git tag ` when the tag already exists; * `git_two_dashes` – adds a missing dash to commands like `git commit -amend` or `git rebase -continue`; * `go_run` – appends `.go` extension when compiling/running Go programs; * `gradle_no_task` – fixes not found or ambiguous `gradle` task; diff --git a/tests/rules/test_git_tag_force.py b/tests/rules/test_git_tag_force.py new file mode 100644 index 00000000..46c96fc6 --- /dev/null +++ b/tests/rules/test_git_tag_force.py @@ -0,0 +1,18 @@ +import pytest +from thefuck.rules.git_tag_force import match, get_new_command +from tests.utils import Command + + +@pytest.fixture +def stderr(): + return '''fatal: tag 'alert' already exists''' + + +def test_match(stderr): + assert match(Command('git tag alert', stderr=stderr)) + assert not match(Command('git tag alert')) + + +def test_get_new_command(stderr): + assert get_new_command(Command('git tag alert', stderr=stderr)) \ + == "git tag --force alert" diff --git a/thefuck/rules/git_tag_force.py b/thefuck/rules/git_tag_force.py new file mode 100644 index 00000000..6f6de7f2 --- /dev/null +++ b/thefuck/rules/git_tag_force.py @@ -0,0 +1,13 @@ +from thefuck.utils import replace_argument +from thefuck.specific.git import git_support + + +@git_support +def match(command): + return ('tag' in command.script_parts + and 'already exists' in command.stderr) + + +@git_support +def get_new_command(command): + return replace_argument(command.script, 'tag', 'tag --force')