diff --git a/devices/util/lofar_git.py b/devices/util/lofar_git.py new file mode 100644 index 0000000000000000000000000000000000000000..7ba42cb0189529705787828bf81c800bfb5aeba9 --- /dev/null +++ b/devices/util/lofar_git.py @@ -0,0 +1,39 @@ +import git # pip3 install gitpython +import os + +def get_repo(starting_directory: str = os.path.dirname(__file__)) -> git.Repo: + """ Try finding the repository by traversing up the tree. + + By default, the repository containing this module is returned. + """ + + directory = starting_directory + + try: + return git.Repo(directory) + except git.InvalidGitRepositoryError: + pass + + # We now have to traverse up the tree + while directory != "/" and os.path.exists(directory): + # Go to parent + directory = os.path.abspath(directory + os.path.sep + "..") + + try: + return git.Repo(directory) + except git.InvalidGitRepositoryError: + pass + + raise git.InvalidGitRepositoryError("Could not find git repository root in {}".format(starting_directory)) + + +def get_version(repo: git.Repo = None) -> str: + """ Return a version string for the current commit. """ + + if repo is None: + repo = get_repo() + + return "{} [{}{}]".format(repo.active_branch, repo.commit(), " (dirty)" if repo.is_dirty() else "") + +if __name__ == "__main__": + print(get_version())