From 1da2e7efd9a377ba39b20903ae2e53f25a98d421 Mon Sep 17 00:00:00 2001 From: Rob Browning Date: Tue, 31 Dec 2019 11:47:47 -0600 Subject: [PATCH] damage-cmd: adjust for python 3 and enable test-fsck Signed-off-by: Rob Browning Tested-by: Rob Browning --- Makefile | 2 +- cmd/damage-cmd.py | 54 +++++++++++++++++++++++------------------------ 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/Makefile b/Makefile index 74b41c1..89bbffb 100644 --- a/Makefile +++ b/Makefile @@ -170,6 +170,7 @@ runtests-python: all t/tmp cmdline_tests := \ t/test-argv \ t/test-compression.sh \ + t/test-fsck.sh \ t/test-index-clear.sh \ t/test-ls \ t/test-ls-remote \ @@ -191,7 +192,6 @@ ifeq "2" "$(bup_python_majver)" t/test-fuse.sh \ t/test-drecurse.sh \ t/test-cat-file.sh \ - t/test-fsck.sh \ t/test-index-check-device.sh \ t/test-meta.sh \ t/test-on.sh \ diff --git a/cmd/damage-cmd.py b/cmd/damage-cmd.py index ca2e98c..07f0e03 100755 --- a/cmd/damage-cmd.py +++ b/cmd/damage-cmd.py @@ -9,15 +9,13 @@ from __future__ import absolute_import import sys, os, random from bup import options -from bup.compat import range +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 range(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 = """ @@ -40,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)) -- 2.39.2