提交 460d1026 编写于 作者: S Sverre Rabbelier 提交者: Junio C Hamano

git-remote-testgit: fix error handling

If fast-export did not complete successfully the error handling code
itself would error out.

This was broken in commit 23b093ee (Brandon Casey, Wed Jun 9 2010,
Remove python 2.5'isms). Revert that commit an introduce our own copy
of check_call in util.py instead.

Tested by changing 'if retcode' to 'if not retcode' temporarily.
Signed-off-by: NSverre Rabbelier <srabbelier@gmail.com>
Acked-by: NJeff King <peff@peff.net>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 0fb56ce7
......@@ -2,6 +2,8 @@
import subprocess
import sys
from git_remote_helpers.util import check_call
class GitExporter(object):
"""An exporter for testgit repositories.
......@@ -53,6 +55,4 @@ def export_repo(self, base, refs=None):
args = ["sed", "s_refs/heads/_" + self.repo.prefix + "_g"]
child = subprocess.Popen(args, stdin=p1.stdout)
if child.wait() != 0:
raise CalledProcessError
check_call(args, stdin=p1.stdout)
import os
import subprocess
from git_remote_helpers.util import check_call
class GitImporter(object):
"""An importer for testgit repositories.
......@@ -35,6 +37,4 @@ def do_import(self, base):
if os.path.exists(path):
args.append("--import-marks=" + path)
child = subprocess.Popen(args)
if child.wait() != 0:
raise CalledProcessError
check_call(args)
import os
import subprocess
from git_remote_helpers.util import die, warn
from git_remote_helpers.util import check_call, die, warn
class NonLocalGit(object):
......@@ -29,9 +29,7 @@ def clone(self, base):
os.makedirs(path)
args = ["git", "clone", "--bare", "--quiet", self.repo.gitpath, path]
child = subprocess.Popen(args)
if child.wait() != 0:
raise CalledProcessError
check_call(args)
return path
......@@ -45,14 +43,10 @@ def update(self, base):
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
check_call(args)
args = ["git", "--git-dir=" + path, "update-ref", "refs/heads/master", "FETCH_HEAD"]
child = subprocess.Popen(args)
if child.wait() != 0:
raise CalledProcessError
child = check_call(args)
def push(self, base):
"""Pushes from the non-local repo to base.
......@@ -64,6 +58,4 @@ def push(self, base):
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
child = check_call(args)
import os
import subprocess
from git_remote_helpers.util import check_call
def sanitize(rev, sep='\t'):
"""Converts a for-each-ref line to a name/value pair.
"""
......@@ -53,9 +56,7 @@ def get_revs(self):
path = ".cached_revs"
ofile = open(path, "w")
child = subprocess.Popen(args, stdout=ofile)
if child.wait() != 0:
raise CalledProcessError
check_call(args, stdout=ofile)
output = open(path).readlines()
self.revmap = dict(sanitize(i) for i in output)
if "HEAD" in self.revmap:
......
......@@ -11,6 +11,21 @@
import os
import subprocess
try:
from subprocess import CalledProcessError
except ImportError:
# from python2.7:subprocess.py
# Exception classes used by this module.
class CalledProcessError(Exception):
"""This exception is raised when a process run by check_call() returns
a non-zero exit status. The exit status will be stored in the
returncode attribute."""
def __init__(self, returncode, cmd):
self.returncode = returncode
self.cmd = cmd
def __str__(self):
return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
# Whether or not to show debug messages
DEBUG = False
......@@ -128,6 +143,38 @@ def run_command (args, cwd = None, shell = False, add_env = None,
return (exit_code, output, errors)
# from python2.7:subprocess.py
def call(*popenargs, **kwargs):
"""Run command with arguments. Wait for command to complete, then
return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
return subprocess.Popen(*popenargs, **kwargs).wait()
# from python2.7:subprocess.py
def check_call(*popenargs, **kwargs):
"""Run command with arguments. Wait for command to complete. If
the exit code was zero then return, otherwise raise
CalledProcessError. The CalledProcessError object will have the
return code in the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
check_call(["ls", "-l"])
"""
retcode = call(*popenargs, **kwargs)
if retcode:
cmd = kwargs.get("args")
if cmd is None:
cmd = popenargs[0]
raise CalledProcessError(retcode, cmd)
return 0
def file_reader_method (missing_ok = False):
"""Decorator for simplifying reading of files.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册