# pylint: disable=C0111,R0903

"""Print the branch and git status for the
currently focused window.

Requires:
    * xcwd
    * Python module 'pygit2'
"""

import os
import string
import pygit2

import bumblebee.input
import bumblebee.output
import bumblebee.engine
import bumblebee.util

class Module(bumblebee.engine.Module):
    def __init__(self, engine, config):
        super(Module, self).__init__(engine, config,
            bumblebee.output.Widget(full_text=self.gitinfo)
        )
        self._fmt = self.parameter("format", "{branch}")

    def gitinfo(self, widget):
        info = ""
        directory = None
        data = {
            "branch": "n/a",
        }
        try:
            directory = bumblebee.util.execute("xcwd").strip()
            directory = self._get_git_root(directory)
            repo = pygit2.Repository(directory)
            data["branch"] = repo.head.shorthand
        except Exception as e:
            return e

        return string.Formatter().vformat(self._fmt, (), data)

    def _get_git_root(self, directory):
        while directory != "/":
            if os.path.exists(os.path.join(directory, ".git")):
                return directory
            directory = "/".join(directory.split("/")[0:-1])
        return None

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

Add new module to display git information