59 lines
2.4 KiB
Python
59 lines
2.4 KiB
Python
import re
|
|
|
|
import sublime
|
|
import sublime_plugin
|
|
from git import GitTextCommand
|
|
|
|
|
|
class GitBranchStatusListener(sublime_plugin.EventListener):
|
|
def on_activated(self, view):
|
|
view.run_command("git_branch_status")
|
|
|
|
def on_post_save(self, view):
|
|
view.run_command("git_branch_status")
|
|
|
|
|
|
class GitBranchStatusCommand(GitTextCommand):
|
|
def run(self, view):
|
|
s = sublime.load_settings("Git.sublime-settings")
|
|
if s.get("statusbar_branch"):
|
|
self.run_command(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], self.branch_done, show_status=False, no_save=True)
|
|
else:
|
|
self.view.set_status("git-branch", "")
|
|
if (s.get("statusbar_status")):
|
|
self.run_command(['git', 'status', '--porcelain'], self.status_done, show_status=False, no_save=True)
|
|
else:
|
|
self.view.set_status("git-status", "")
|
|
|
|
def branch_done(self, result):
|
|
self.view.set_status("git-branch", "git branch: " + result.strip())
|
|
|
|
def status_done(self, result):
|
|
lines = [line for line in result.splitlines() if re.match(r'^[ MADRCU?!]{1,2}\s+.*', line)]
|
|
index = [line[0] for line in lines if not line[0].isspace()]
|
|
working = [line[1] for line in lines if not line[1].isspace()]
|
|
self.view.set_status("git-status-index", "index: " + self.status_string(index))
|
|
self.view.set_status("git-status-working", "working: " + self.status_string(working))
|
|
|
|
def status_string(self, statuses):
|
|
s = sublime.load_settings("Git.sublime-settings")
|
|
symbols = s.get("statusbar_status_symbols")
|
|
if not statuses:
|
|
return symbols['clean']
|
|
status = []
|
|
if statuses.count('M'):
|
|
status.append("%d%s" % (statuses.count('M'), symbols['modified']))
|
|
if statuses.count('A'):
|
|
status.append("%d%s" % (statuses.count('A'), symbols['added']))
|
|
if statuses.count('D'):
|
|
status.append("%d%s" % (statuses.count('D'), symbols['deleted']))
|
|
if statuses.count('?'):
|
|
status.append("%d%s" % (statuses.count('?'), symbols['untracked']))
|
|
if statuses.count('U'):
|
|
status.append("%d%s" % (statuses.count('U'), symbols['conflicts']))
|
|
if statuses.count('R'):
|
|
status.append("%d%s" % (statuses.count('R'), symbols['renamed']))
|
|
if statuses.count('C'):
|
|
status.append("%d%s" % (statuses.count('C'), symbols['copied']))
|
|
return symbols['separator'].join(status)
|