Commit 46ec36db 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 2e9ce21b
...@@ -19,6 +19,16 @@ This is a by-hand test. It succeeds iff it doesn't blow up. Run it with ...@@ -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 its home directory as the current directory. It will destroy all files
matching Data.* and Copy.* in this directory, and anything in a matching Data.* and Copy.* in this directory, and anything in a
subdirectory of name 'backup'. 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 import os
...@@ -32,8 +42,6 @@ import ZODB ...@@ -32,8 +42,6 @@ import ZODB
from ZODB import FileStorage from ZODB import FileStorage
import transaction import transaction
PYTHON = sys.executable + ' '
def cleanup(): def cleanup():
for fname in glob.glob('Data.*') + glob.glob('Copy.*'): for fname in glob.glob('Data.*') + glob.glob('Copy.*'):
os.remove(fname) os.remove(fname)
...@@ -76,7 +84,7 @@ def check(correctpath='Data.fs', when=None): ...@@ -76,7 +84,7 @@ def check(correctpath='Data.fs', when=None):
extra = '' extra = ''
else: else:
extra = ' -D ' + when 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) os.system(cmd)
f = file(correctpath, 'rb') f = file(correctpath, 'rb')
g = file('Copy.fs', 'rb') g = file('Copy.fs', 'rb')
...@@ -122,9 +130,9 @@ def main(): ...@@ -122,9 +130,9 @@ def main():
# Make an incremental backup, half the time with gzip (-z). # Make an incremental backup, half the time with gzip (-z).
if random.random() < 0.5: 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: else:
os.system(PYTHON + '../repozo.py -zvBQr backup -f Data.fs') os.system(PYTHON + REPOZO + ' -zvBQr backup -f Data.fs')
if i % 9 == 0: if i % 9 == 0:
copytime = '%04d-%02d-%02d-%02d-%02d-%02d' % (time.gmtime()[:6]) copytime = '%04d-%02d-%02d-%02d-%02d-%02d' % (time.gmtime()[:6])
...@@ -148,4 +156,9 @@ def main(): ...@@ -148,4 +156,9 @@ def main():
print 'Test passed!' print 'Test passed!'
if __name__ == '__main__': if __name__ == '__main__':
PYTHON = sys.executable + ' '
if len(sys.argv)>1:
REPOZO = sys.argv[1]
else:
REPOZO = '../repozo.py'
main() main()
...@@ -65,7 +65,6 @@ Options for -R/--recover: ...@@ -65,7 +65,6 @@ Options for -R/--recover:
import os import os
import sys import sys
import md5
import gzip import gzip
import time import time
import errno import errno
...@@ -82,6 +81,12 @@ COMMASPACE = ', ' ...@@ -82,6 +81,12 @@ COMMASPACE = ', '
READCHUNK = 16 * 1024 READCHUNK = 16 * 1024
VERBOSE = False 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=''): def usage(code, msg=''):
outfp = sys.stderr outfp = sys.stderr
...@@ -210,7 +215,7 @@ def dofile(func, fp, n=None): ...@@ -210,7 +215,7 @@ def dofile(func, fp, n=None):
def checksum(fp, n): def checksum(fp, n):
# Checksum the first n bytes of the specified file # Checksum the first n bytes of the specified file
sum = md5.new() sum = md5()
def func(data): def func(data):
sum.update(data) sum.update(data)
dofile(func, fp, n) dofile(func, fp, n)
...@@ -221,7 +226,7 @@ def copyfile(options, dst, start, 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 # 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 # length of bytes. For robustness, we first write, flush and fsync
# to a temp file, then rename the temp file at the end. # to a temp file, then rename the temp file at the end.
sum = md5.new() sum = md5()
ifp = open(options.file, 'rb') ifp = open(options.file, 'rb')
ifp.seek(start) ifp.seek(start)
tempname = os.path.join(os.path.dirname(dst), 'tmp.tmp') tempname = os.path.join(os.path.dirname(dst), 'tmp.tmp')
...@@ -248,7 +253,7 @@ def concat(files, ofp=None): ...@@ -248,7 +253,7 @@ def concat(files, ofp=None):
# Concatenate a bunch of files from the repository, output to `outfile' if # 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 # given. Return the number of bytes written and the md5 checksum of the
# bytes. # bytes.
sum = md5.new() sum = md5()
def func(data): def func(data):
sum.update(data) sum.update(data)
if ofp: 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