X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fdamage-cmd.py;h=07f0e03b25f3255d8ca522b4e661c61fd1fd91ff;hb=57368bb37dae3047d737892f7b4d1c6ac725bc53;hp=22bc8f094c3eae3a95f4ccd8a339fc449f2426dd;hpb=7e0fcaa5b28eb1aa022a59e5056679e7854070b9;p=bup.git diff --git a/cmd/damage-cmd.py b/cmd/damage-cmd.py index 22bc8f0..07f0e03 100755 --- a/cmd/damage-cmd.py +++ b/cmd/damage-cmd.py @@ -4,16 +4,18 @@ bup_python="$(dirname "$0")/bup-python" || exit $? exec "$bup_python" "$0" ${1+"$@"} """ # end of bup preamble + +from __future__ import absolute_import import sys, os, random + from bup import options -from bup.helpers import * +from bup.compat import argv_bytes, bytes_from_uint, range +from bup.helpers import log +from bup.io import path_msg def randblock(n): - l = [] - for i in xrange(n): - l.append(chr(random.randrange(0,256))) - return ''.join(l) + return b''.join(bytes_from_uint(random.randrange(0,256)) for i in range(n)) optspec = """ @@ -36,27 +38,27 @@ if opt.seed != None: random.seed(opt.seed) for name in extra: - log('Damaging "%s"...\n' % name) - f = open(name, 'r+b') - st = os.fstat(f.fileno()) - size = st.st_size - if opt.percent or opt.size: - ms1 = int(float(opt.percent or 0)/100.0*size) or size - ms2 = opt.size or size - maxsize = min(ms1, ms2) - else: - maxsize = 1 - chunks = opt.num or 10 - chunksize = size/chunks - for r in range(chunks): - sz = random.randrange(1, maxsize+1) - if sz > size: - sz = size - if opt.equal: - ofs = r*chunksize + name = argv_bytes(name) + log('Damaging "%s"...\n' % path_msg(name)) + with open(name, 'r+b') as f: + st = os.fstat(f.fileno()) + size = st.st_size + if opt.percent or opt.size: + ms1 = int(float(opt.percent or 0)/100.0*size) or size + ms2 = opt.size or size + maxsize = min(ms1, ms2) else: - ofs = random.randrange(0, size - sz + 1) - log(' %6d bytes at %d\n' % (sz, ofs)) - f.seek(ofs) - f.write(randblock(sz)) - f.close() + maxsize = 1 + chunks = opt.num or 10 + chunksize = size // chunks + for r in range(chunks): + sz = random.randrange(1, maxsize+1) + if sz > size: + sz = size + if opt.equal: + ofs = r*chunksize + else: + ofs = random.randrange(0, size - sz + 1) + log(' %6d bytes at %d\n' % (sz, ofs)) + f.seek(ofs) + f.write(randblock(sz))