Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Oh My Zsh
Commits
01261d47
Commit
01261d47
authored
Mar 08, 2014
by
Robby Russell
Browse files
Merge pull request #2556 from chrisjones-brack3t/fix/git-prompt-1-9
git-prompt (gitstatus.py) plugin fix
parents
0e10ebb9
c397000b
Changes
1
Hide whitespace changes
Inline
Side-by-side
plugins/git-prompt/gitstatus.py
View file @
01261d47
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from
subprocess
import
Popen
,
PIPE
import
re
# change those symbols to whatever you prefer
symbols
=
{
'ahead of'
:
'↑'
,
'behind'
:
'↓'
,
'staged'
:
'♦'
,
'changed'
:
'‣'
,
'untracked'
:
'…'
,
'clean'
:
'⚡'
,
'unmerged'
:
'≠'
,
'sha1'
:
':'
}
from
subprocess
import
Popen
,
PIPE
symbols
=
{
'ahead of'
:
'↑'
,
'behind'
:
'↓'
,
'staged'
:
'♦'
,
'changed'
:
'‣'
,
'untracked'
:
'…'
,
'clean'
:
'⚡'
,
'unmerged'
:
'≠'
,
'sha1'
:
':'
}
output
,
error
=
Popen
([
'git'
,
'status'
],
stdout
=
PIPE
,
stderr
=
PIPE
).
communicate
()
output
,
error
=
Popen
(
[
'git'
,
'status'
],
stdout
=
PIPE
,
stderr
=
PIPE
).
communicate
()
if
error
:
import
sys
sys
.
exit
(
0
)
import
sys
sys
.
exit
(
0
)
lines
=
output
.
splitlines
()
import
re
behead_re
=
re
.
compile
(
r
"^# Your branch is (ahead of|behind) '(.*)' by (\d+) commit"
)
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
=
''
...
...
@@ -23,46 +33,50 @@ 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
,
stderr
=
PIPE
,
*
command
).
communicate
()
if
not
err
:
nb
=
len
(
out
.
splitlines
())
else
:
nb
=
'?'
return
nb
out
,
err
=
Popen
(
stdout
=
PIPE
,
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
)
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
)
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
)
nb
=
execute
([
'git'
,
'diff'
,
'--name-only'
,
'--diff-filter=ACDMRT'
])
status
+=
'%s%s'
%
(
symbols
[
'changed'
],
nb
)
if
untracked
.
search
(
output
):
## nb = len(Popen(['git','ls-files','--others','--exclude-standard'],stdout=PIPE).communicate()[0].splitlines())
## status += "%s" % (symbols['untracked']*(nb//3 + 1), )
status
+=
symbols
[
'untracked'
]
status
+=
symbols
[
'untracked'
]
if
status
==
''
:
status
=
symbols
[
'clean'
]
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
).
communicate
()[
0
][:
-
1
]
branch
=
symbols
[
'sha1'
]
+
Popen
([
'git'
,
'rev-parse'
,
'--short'
,
'HEAD'
],
stdout
=
PIPE
).
communicate
()[
0
][:
-
1
]
else
:
branch
=
bline
.
split
(
' '
)[
3
]
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
])
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
]))
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment