Source code for abed.git_util
"""
Functions for dealing with Git
In this file functions are defined for dealing with the Git repository:
creating the initial repository, committing changes to the task file or the
auto file, and checking if the working directory is clean.
"""
from git import Repo
from .conf import settings
from .constants import CONFIG_FILENAME, TASKS_FILENAME, AUTO_FILENAME
from .io import info
[docs]def git_init():
"""Initializes the Git repository for Abed
This function initializes a Git repository in the current directory, adds
the task file, the auto file, and the settings file, and commits them to
the Git repository.
"""
repo = Repo.init(".")
repo.index.add([CONFIG_FILENAME])
repo.index.add([TASKS_FILENAME])
repo.index.add([AUTO_FILENAME])
repo.index.commit("initialized abed skeleton")
[docs]def git_commit_file(filename, message):
"""Commit changes to a given file if necessary
This function commits changes to a given file to the git repository, using
the provided message as the commit message. It also prints the message to
the user with the :func:`info()` function, with the addition of the word
"Git". Note that changes will only be committed if necessary.
Parameters
----------
filename : str
The filename of the file to commit.
message : str
The commit message.
"""
repo = Repo(".")
diffidx = repo.index.diff(None, [filename])
if not diffidx:
return
repo.index.add([filename])
repo.index.commit(message)
info("Git - " + message)
[docs]def git_commit_tbd():
"""Wrapper around :func:`git_commit_file()` for the TBD file """
git_commit_file(settings.TASK_FILE, "Automatic commit of TBD task file")
[docs]def git_commit_auto():
"""Wrapper around :func:`git_commit_file()` for the auto file """
git_commit_file(settings.AUTO_FILE, "Automatic commit of auto log file")
[docs]def git_ok():
"""Check if the Git working directory is clean"""
repo = Repo(".")
return not repo.is_dirty()