ohmyzsh/plugins/git-prompt/gitstatus.py
Brosseau Valentin d5ed39a148 Fix to make the script works with any language
Hi,

The script fail when the language of the system is not set at "en_US.UTF-8" . I have made change to force the lang to en_US.UTF-8 when this script run.

I also notice the behead_re and  diverge_re regexp are wrong. (extra # and space at the begining)

Now the gitstatus.py return the correct informations.
2014-12-31 11:44:17 +01:00

87 lines
2.5 KiB
Python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from subprocess import Popen, PIPE
import re
import os
# change those symbols to whatever you prefer
symbols = {
'ahead of': '',
'behind': '',
'staged': '',
'changed': '',
'untracked': '',
'clean': '',
'unmerged': '',
'sha1': ':'
}
def get_env_en():
new_env = dict(os.environ)
new_env['LANG'] = 'en_US.UTF-8'
return new_env
output, error = Popen(
['git', 'status'], stdout=PIPE, stderr=PIPE, universal_newlines=True, env=get_env_en()).communicate()
if error:
import sys
sys.exit(0)
lines = output.splitlines()
behead_re = re.compile(
r"^Your branch is (ahead of|behind) '(.*)' by (\d+) commit")
diverge_re = re.compile(r"^ and have (\d+) and (\d+) different")
status = ''
staged = re.compile(r'^# Changes to be committed:$', re.MULTILINE)
changed = re.compile(r'^# Changed but not updated:$', re.MULTILINE)
untracked = re.compile(r'^# Untracked files:$', re.MULTILINE)
unmerged = re.compile(r'^# Unmerged paths:$', re.MULTILINE)
def execute(*command):
out, err = Popen(stdout=PIPE,env=get_env_en(), stderr=PIPE, *command).communicate()
if not err:
nb = len(out.splitlines())
else:
nb = '?'
return nb
if staged.search(output):
nb = execute(
['git', 'diff', '--staged', '--name-only', '--diff-filter=ACDMRT'])
status += '%s%s' % (symbols['staged'], nb)
if unmerged.search(output):
nb = execute(['git', 'diff', '--staged', '--name-only', '--diff-filter=U'])
status += '%s%s' % (symbols['unmerged'], nb)
if changed.search(output):
nb = execute(['git', 'diff', '--name-only', '--diff-filter=ACDMRT'])
status += '%s%s' % (symbols['changed'], nb)
if untracked.search(output):
status += symbols['untracked']
if status == '':
status = symbols['clean']
remote = ''
bline = lines[0]
if bline.find('Not currently on any branch') != -1:
branch = symbols['sha1'] + Popen([
'git',
'rev-parse',
'--short',
'HEAD'], stdout=PIPE, env=get_env_en()).communicate()[0][:-1]
else:
branch = bline.split(' ')[-1]
bstatusline = lines[1]
match = behead_re.match(bstatusline)
if match:
remote = symbols[match.groups()[0]]
remote += match.groups()[2]
elif lines[2:]:
div_match = diverge_re.match(lines[2])
if div_match:
remote = "{behind}{1}{ahead of}{0}".format(
*div_match.groups(), **symbols)
print('\n'.join([branch, remote, status]))