# pylint: disable=C0111,R0903 """Print the branch and git status for the currently focused window. Requires: * xcwd * Python module 'pygit2' """ import os import pygit2 import core.module import core.widget import util.cli class Module(core.module.Module): def __init__(self, config, theme): super().__init__(config, theme, []) self.__error = False def hidden(self): return self.__error def update(self): state = {} new_widgets = [] try: directory = util.cli.execute("xcwd").strip() directory = self.__get_git_root(directory) repo = pygit2.Repository(directory) new_widgets.append( core.widget.Widget(name="git.main", full_text=repo.head.shorthand) ) for filepath, flags in repo.status().items(): if ( flags == pygit2.GIT_STATUS_WT_NEW or flags == pygit2.GIT_STATUS_INDEX_NEW ): state["new"] = True if ( flags == pygit2.GIT_STATUS_WT_DELETED or flags == pygit2.GIT_STATUS_INDEX_DELETED ): state["deleted"] = True if ( flags == pygit2.GIT_STATUS_WT_MODIFIED or flags == pygit2.GIT_STATUS_INDEX_MODIFIED ): state["modified"] = True self.__error = False if "new" in state: new_widgets.append(core.widget.Widget(name="git.new")) if "modified" in state: new_widgets.append(core.widget.Widget(name="git.modified")) if "deleted" in state: new_widgets.append(core.widget.Widget(name="git.deleted")) self.widgets().clear() self.widget(new_widgets) except Exception as e: self.__error = True def state(self, widget): return widget.name.split(".")[1] def __get_git_root(self, directory): while len(directory) > 1: if os.path.exists(os.path.join(directory, ".git")): return directory directory = "/".join(directory.split("/")[0:-1]) return "/" # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4