0.3.0: --sum command-line argument

This commit is contained in:
Łukasz Langa 2013-02-26 15:44:51 +01:00
parent ddbe88eee4
commit 0201bcd853
2 changed files with 36 additions and 7 deletions

View File

@ -36,6 +36,11 @@ under 10 minutes. Both tests on HFS+.
Change Log
----------
0.3.0
~~~~~
* ``--sum`` command-line argument for easy comparison of multiple databases
0.2.1
~~~~~

View File

@ -37,7 +37,7 @@ import sys
CHUNK_SIZE = 16384
DOT_THRESHOLD = 200
VERSION = (0, 2, 1)
VERSION = (0, 3, 0)
def sha1(path):
@ -152,21 +152,45 @@ def run(verbosity=1):
sys.exit(1)
def stable_sum():
current_dir = b'.' # sic, relative path
bitrot_db = os.path.join(current_dir, b'.bitrot.db')
digest = hashlib.sha512()
conn = get_sqlite3_cursor(bitrot_db)
cur = conn.cursor()
cur.execute('SELECT hash FROM bitrot ORDER BY path')
row = cur.fetchone()
while row:
digest.update(row[0])
row = cur.fetchone()
return digest.hexdigest()
def run_from_command_line():
parser = argparse.ArgumentParser(prog='bitrot')
parser.add_argument('-q', '--quiet', action='store_true',
help='don\'t print anything besides checksum errors')
parser.add_argument('-s', '--sum', action='store_true',
help='using only the data already gathered, return a SHA-512 sum '
'of hashes of all the entries in the database. No timestamps '
'are used in calculation.')
parser.add_argument('-v', '--verbose', action='store_true',
help='list new, updated and missing entries')
parser.add_argument('--version', action='version',
version='%(prog)s {}.{}.{}'.format(*VERSION))
args = parser.parse_args()
verbosity = 1
if args.quiet:
verbosity = 0
elif args.verbose:
verbosity = 2
run(verbosity=verbosity)
if args.sum:
try:
print(stable_sum())
except RuntimeError as e:
print(unicode(e).encode('utf8'), file=sys.stderr)
else:
verbosity = 1
if args.quiet:
verbosity = 0
elif args.verbose:
verbosity = 2
run(verbosity=verbosity)
if __name__ == '__main__':