/
git_wrapper.py
42 lines (34 loc) · 1.39 KB
/
git_wrapper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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()