git-commit-vandalism/git_remote_helpers/git/non_local.py

70 lines
1.9 KiB
Python
Raw Normal View History

import os
import subprocess
from git_remote_helpers.util import die, warn
class NonLocalGit(object):
"""Handler to interact with non-local repos.
"""
def __init__(self, repo):
"""Creates a new non-local handler for the specified repo.
"""
self.repo = repo
def clone(self, base):
"""Clones the non-local repo to base.
Does nothing if a clone already exists.
"""
path = os.path.join(self.repo.get_base_path(base), '.git')
# already cloned
if os.path.exists(path):
return path
os.makedirs(path)
args = ["git", "clone", "--bare", "--quiet", self.repo.gitpath, path]
child = subprocess.Popen(args)
if child.wait() != 0:
raise CalledProcessError
return path
def update(self, base):
"""Updates checkout of the non-local repo in base.
"""
path = os.path.join(self.repo.get_base_path(base), '.git')
if not os.path.exists(path):
die("could not find repo at %s", path)
args = ["git", "--git-dir=" + path, "fetch", "--quiet", self.repo.gitpath]
child = subprocess.Popen(args)
if child.wait() != 0:
raise CalledProcessError
args = ["git", "--git-dir=" + path, "update-ref", "refs/heads/master", "FETCH_HEAD"]
child = subprocess.Popen(args)
if child.wait() != 0:
raise CalledProcessError
def push(self, base):
"""Pushes from the non-local repo to base.
"""
path = os.path.join(self.repo.get_base_path(base), '.git')
if not os.path.exists(path):
die("could not find repo at %s", path)
args = ["git", "--git-dir=" + path, "push", "--quiet", self.repo.gitpath]
child = subprocess.Popen(args)
if child.wait() != 0:
raise CalledProcessError