Commit e5668074 authored by Chris Withers's avatar Chris Withers

merge from 3.9 branch:

- make testrepozo.py runnable from a buildout setup
- fix deprecation warning from repozo.py under Python 2.6
parent b6c0ecef
......@@ -19,6 +19,16 @@ This is a by-hand test. It succeeds iff it doesn't blow up. Run it with
its home directory as the current directory. It will destroy all files
matching Data.* and Copy.* in this directory, and anything in a
subdirectory of name 'backup'.
Usage:
python testrepozo.py [repozo_script]
repozo_script, if provided, is a path to a script that runs repozo,
such as that generated by buildout.
eg:
$ ../../../../bin/py testrepozo.py ../../../../bin/repozo
"""
import os
......@@ -32,8 +42,6 @@ import ZODB
from ZODB import FileStorage
import transaction
PYTHON = sys.executable + ' '
def cleanup():
for fname in glob.glob('Data.*') + glob.glob('Copy.*'):
os.remove(fname)
......@@ -76,7 +84,7 @@ def check(correctpath='Data.fs', when=None):
extra = ''
else:
extra = ' -D ' + when
cmd = PYTHON + '../repozo.py -vRr backup -o Copy.fs' + extra
cmd = PYTHON + REPOZO + ' -vRr backup -o Copy.fs' + extra
os.system(cmd)
f = file(correctpath, 'rb')
g = file('Copy.fs', 'rb')
......@@ -122,9 +130,9 @@ def main():
# Make an incremental backup, half the time with gzip (-z).
if random.random() < 0.5:
os.system(PYTHON + '../repozo.py -vBQr backup -f Data.fs')
os.system(PYTHON + REPOZO + ' -vBQr backup -f Data.fs')
else:
os.system(PYTHON + '../repozo.py -zvBQr backup -f Data.fs')
os.system(PYTHON + REPOZO + ' -zvBQr backup -f Data.fs')
if i % 9 == 0:
copytime = '%04d-%02d-%02d-%02d-%02d-%02d' % (time.gmtime()[:6])
......@@ -148,4 +156,9 @@ def main():
print 'Test passed!'
if __name__ == '__main__':
PYTHON = sys.executable + ' '
if len(sys.argv)>1:
REPOZO = sys.argv[1]
else:
REPOZO = '../repozo.py'
main()
......@@ -65,7 +65,6 @@ Options for -R/--recover:
import os
import sys
import md5
import gzip
import time
import errno
......@@ -82,6 +81,12 @@ COMMASPACE = ', '
READCHUNK = 16 * 1024
VERBOSE = False
if sys.version_info[1]>4:
# the hashlib package is available from Python 2.5
from hashlib import md5
else:
# the md5 package is deprecated in Python 2.6
from md5 import new as md5
def usage(code, msg=''):
outfp = sys.stderr
......@@ -210,7 +215,7 @@ def dofile(func, fp, n=None):
def checksum(fp, n):
# Checksum the first n bytes of the specified file
sum = md5.new()
sum = md5()
def func(data):
sum.update(data)
dofile(func, fp, n)
......@@ -221,7 +226,7 @@ def copyfile(options, dst, start, n):
# Copy bytes from file src, to file dst, starting at offset start, for n
# length of bytes. For robustness, we first write, flush and fsync
# to a temp file, then rename the temp file at the end.
sum = md5.new()
sum = md5()
ifp = open(options.file, 'rb')
ifp.seek(start)
tempname = os.path.join(os.path.dirname(dst), 'tmp.tmp')
......@@ -248,7 +253,7 @@ def concat(files, ofp=None):
# Concatenate a bunch of files from the repository, output to `outfile' if
# given. Return the number of bytes written and the md5 checksum of the
# bytes.
sum = md5.new()
sum = md5()
def func(data):
sum.update(data)
if ofp:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment