tilde-wiki/tildewiki/git_wrapper.py

43 lines
1.4 KiB
Python

import git as gitpython
def reset_from_origin(repo_path:str) -> None:
repo = gitpython.Repo(repo_path)
repo.remotes['origin'].fetch()
repo.git.reset('--hard', 'origin/master')
def create_repo(to_clone, local_path, author_name, author_email):
origin = gitpython.Repo(to_clone)
new_repo = origin.clone(local_path)
with new_repo.config_writer() as cw:
cw.add_section('user')
cw.set('user', 'name', author_name)
cw.set('user', 'email', author_email)
def dirty(repo_path:str):
repo = gitpython.Repo(repo_path)
status = repo.git.status()
return 'nothing to commit, working directory clean' not in status
def make_commit(repo_path, author_name, author_email):
"""Given a path to a repository, adds everything and commits it. If there
are no unstaged changes, does nothing."""
if not dirty(repo_path):
return
repo = gitpython.Repo(repo_path)
index = repo.index
repo.git.add(['--all'])
actor = gitpython.Actor(author_name, author_email)
index.commit('wiki update', author=actor, committer=actor)
def push_hard(local_repo_path, remote_repo_path):
local_repo = gitpython.Repo(local_repo_path)
local_repo.remotes['origin'].push()
remote = gitpython.Repo(remote_repo_path)
remote.git.reset(['--hard', 'HEAD'])
def pull_from_origin(repo_path):
repo = gitpython.Repo(repo_path)
repo.remotes['origin'].pull()