git-p4.py: support Python 2.4
Python 2.4 lacks the following features:
subprocess.check_call
struct.pack_into
Take a cue from 460d1026
and provide an implementation of the
CalledProcessError exception. Then replace the calls to
subproccess.check_call with calls to subprocess.call that check the return
status and raise a CalledProcessError exception if necessary.
The struct.pack_into in t/9802 can be converted into a single struct.pack
call which is available in Python 2.4.
Signed-off-by: Brandon Casey <bcasey@nvidia.com>
Acked-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
598354c0ad
commit
a235e85cc8
2
INSTALL
2
INSTALL
@ -131,7 +131,7 @@ Issues of note:
|
||||
use English. Under autoconf the configure script will do this
|
||||
automatically if it can't find libintl on the system.
|
||||
|
||||
- Python version 2.5 or later is needed to use the git-p4
|
||||
- Python version 2.4 or later is needed to use the git-p4
|
||||
interface to Perforce.
|
||||
|
||||
- Some platform specific issues are dealt with Makefile rules,
|
||||
|
27
git-p4.py
27
git-p4.py
@ -12,6 +12,21 @@ import optparse, sys, os, marshal, subprocess, shelve
|
||||
import tempfile, getopt, os.path, time, platform
|
||||
import re, shutil
|
||||
|
||||
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)
|
||||
|
||||
verbose = False
|
||||
|
||||
# Only labels/tags matching this will be imported/exported
|
||||
@ -152,13 +167,17 @@ def system(cmd):
|
||||
expand = isinstance(cmd,basestring)
|
||||
if verbose:
|
||||
sys.stderr.write("executing %s\n" % str(cmd))
|
||||
subprocess.check_call(cmd, shell=expand)
|
||||
retcode = subprocess.call(cmd, shell=expand)
|
||||
if retcode:
|
||||
raise CalledProcessError(retcode, cmd)
|
||||
|
||||
def p4_system(cmd):
|
||||
"""Specifically invoke p4 as the system command. """
|
||||
real_cmd = p4_build_cmd(cmd)
|
||||
expand = isinstance(real_cmd, basestring)
|
||||
subprocess.check_call(real_cmd, shell=expand)
|
||||
retcode = subprocess.call(real_cmd, shell=expand)
|
||||
if retcode:
|
||||
raise CalledProcessError(retcode, real_cmd)
|
||||
|
||||
def p4_integrate(src, dest):
|
||||
p4_system(["integrate", "-Dt", wildcard_encode(src), wildcard_encode(dest)])
|
||||
@ -3104,7 +3123,9 @@ class P4Clone(P4Sync):
|
||||
init_cmd = [ "git", "init" ]
|
||||
if self.cloneBare:
|
||||
init_cmd.append("--bare")
|
||||
subprocess.check_call(init_cmd)
|
||||
retcode = subprocess.call(init_cmd)
|
||||
if retcode:
|
||||
raise CalledProcessError(retcode, init_cmd)
|
||||
|
||||
if not P4Sync.run(self, depotPaths):
|
||||
return False
|
||||
|
@ -105,12 +105,13 @@ build_gendouble() {
|
||||
cat >gendouble.py <<-\EOF
|
||||
import sys
|
||||
import struct
|
||||
import array
|
||||
|
||||
s = array.array("c", '\0' * 26)
|
||||
struct.pack_into(">L", s, 0, 0x00051607) # AppleDouble
|
||||
struct.pack_into(">L", s, 4, 0x00020000) # version 2
|
||||
s.tofile(sys.stdout)
|
||||
s = struct.pack(">LL18s",
|
||||
0x00051607, # AppleDouble
|
||||
0x00020000, # version 2
|
||||
"" # pad to 26 bytes
|
||||
)
|
||||
sys.stdout.write(s)
|
||||
EOF
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user