git-commit-vandalism/git_remote_helpers/git/non_local.py
Jeff King b4b872994b git_remote_helpers: push all refs during a non-local export
When a remote helper exports to a non-local git repo, the
steps are roughly:

  1. fast-export into a local staging area; the set of
     interesting refs is defined by what is in the fast-export
     stream

  2. git push from the staging area to the non-local repo

In the second step, we should explicitly push all refs, not
just matching ones. This will let us push refs that do not
yet exist in the remote repo.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2011-07-19 11:17:47 -07:00

70 lines
1.9 KiB
Python

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, "--all"]
child = subprocess.Popen(args)
if child.wait() != 0:
raise CalledProcessError