From 639e9bda7a5a69e75c3de3e0b840c1940017968d Mon Sep 17 00:00:00 2001 From: Nyanotech <33802077+nyanotech@users.noreply.github.com> Date: Thu, 16 Jul 2020 21:34:22 +0000 Subject: [PATCH] Add rule to remove a doubled-up "git clone" in a git clone command. (#1106) Some git hosts will copy the entire clone command, while others just copy the url, so typing "git clone ", then pasting a git url that already has a "git clone " on the front is a somewhat common issue. --- README.md | 1 + tests/rules/test_git_clone_git_clone.py | 24 ++++++++++++++++++++++++ thefuck/rules/git_clone_git_clone.py | 12 ++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 tests/rules/test_git_clone_git_clone.py create mode 100644 thefuck/rules/git_clone_git_clone.py diff --git a/README.md b/README.md index 0d2d7f56..5ac8b83e 100644 --- a/README.md +++ b/README.md @@ -207,6 +207,7 @@ following rules are enabled by default: * `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_clone_git_clone` – replaces `git clone git clone ...` with `git clone ...` * `git_commit_amend` – offers `git commit --amend` after previous commit; * `git_commit_reset` – offers `git reset HEAD~` after previous commit; * `git_diff_no_index` – adds `--no-index` to previous `git diff` on untracked files; diff --git a/tests/rules/test_git_clone_git_clone.py b/tests/rules/test_git_clone_git_clone.py new file mode 100644 index 00000000..2efc6899 --- /dev/null +++ b/tests/rules/test_git_clone_git_clone.py @@ -0,0 +1,24 @@ +from thefuck.rules.git_clone_git_clone import match, get_new_command +from thefuck.types import Command + + +output_clean = """ +fatal: Too many arguments. + +usage: git clone [] [--] [] +""" + + +def test_match(): + assert match(Command('git clone git clone foo', output_clean)) + + +def test_not_match(): + assert not match(Command('', '')) + assert not match(Command('git branch', '')) + assert not match(Command('git clone foo', '')) + assert not match(Command('git clone foo bar baz', output_clean)) + + +def test_get_new_command(): + assert get_new_command(Command('git clone git clone foo', output_clean)) == 'git clone foo' diff --git a/thefuck/rules/git_clone_git_clone.py b/thefuck/rules/git_clone_git_clone.py new file mode 100644 index 00000000..38bab253 --- /dev/null +++ b/thefuck/rules/git_clone_git_clone.py @@ -0,0 +1,12 @@ +from thefuck.specific.git import git_support + + +@git_support +def match(command): + return (' git clone ' in command.script + and 'fatal: Too many arguments.' in command.output) + + +@git_support +def get_new_command(command): + return command.script.replace(' git clone ', ' ', 1)