#87 Add ability to fix branch names in git_checkout rule

This commit is contained in:
nvbn
2015-07-20 19:25:29 +03:00
parent ee87d1c547
commit 4f5659caad
5 changed files with 50 additions and 13 deletions
+23 -5
View File
@@ -1,4 +1,5 @@
import re
import subprocess
from thefuck import shells, utils
@@ -9,11 +10,28 @@ def match(command, settings):
and "Did you forget to 'git add'?" not in command.stderr)
def get_branches():
proc = subprocess.Popen(
['git', 'branch', '-a', '--no-color', '--no-column'],
stdout=subprocess.PIPE)
for line in proc.stdout.readlines():
line = line.decode('utf-8')
if line.startswith('*'):
line = line.split(' ')[1]
if '/' in line:
line = line.split('/')[-1]
yield line.strip()
@utils.git_support
def get_new_command(command, settings):
missing_file = re.findall(
r"error: pathspec '([^']*)' "
"did not match any file\(s\) known to git.", command.stderr)[0]
formatme = shells.and_('git branch {}', '{}')
return formatme.format(missing_file, command.script)
r"error: pathspec '([^']*)' "
"did not match any file\(s\) known to git.", command.stderr)[0]
closest_branch = utils.get_closest(missing_file, get_branches(),
fallback_to_first=False)
if closest_branch:
return command.script.replace(missing_file, closest_branch, 1)
else:
return shells.and_('git branch {}', '{}').format(
missing_file, command.script)
+3 -2
View File
@@ -113,10 +113,11 @@ def memoize(fn):
memoize.disabled = False
def get_closest(word, possibilities, n=3, cutoff=0.6):
def get_closest(word, possibilities, n=3, cutoff=0.6, fallback_to_first=True):
"""Returns closest match or just first from possibilities."""
possibilities = list(possibilities)
try:
return get_close_matches(word, possibilities, n, cutoff)[0]
except IndexError:
return possibilities[0]
if fallback_to_first:
return possibilities[0]