]> arthur.barton.de Git - bup.git/blobdiff - cmd/damage-cmd.py
Fix bup-web error formatting when port unsupplied
[bup.git] / cmd / damage-cmd.py
index 49dbed07146cac337498de6c960044024af26e76..07f0e03b25f3255d8ca522b4e661c61fd1fd91ff 100755 (executable)
@@ -1,14 +1,21 @@
-#!/usr/bin/env python
+#!/bin/sh
+"""": # -*-python-*-
+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 = """
@@ -31,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))