Merge branch 'master' of github.com:ambv/bitrot
Conflicts: src/bitrot.py
This commit is contained in:
commit
dbdf7cf99b
@ -29,6 +29,7 @@ from __future__ import unicode_literals
|
|||||||
import argparse
|
import argparse
|
||||||
import atexit
|
import atexit
|
||||||
import datetime
|
import datetime
|
||||||
|
import errno
|
||||||
import hashlib
|
import hashlib
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
@ -70,12 +71,12 @@ def get_sqlite3_cursor(path, copy=False):
|
|||||||
conn = sqlite3.connect(path)
|
conn = sqlite3.connect(path)
|
||||||
atexit.register(conn.close)
|
atexit.register(conn.close)
|
||||||
cur = conn.cursor()
|
cur = conn.cursor()
|
||||||
for name, in cur.execute('SELECT name FROM sqlite_master'):
|
names = set(name for name, in cur.execute('SELECT name FROM sqlite_master'))
|
||||||
if name == 'bitrot':
|
if 'bitrot' not in names:
|
||||||
break
|
|
||||||
else:
|
|
||||||
cur.execute('CREATE TABLE bitrot (path TEXT PRIMARY KEY, '
|
cur.execute('CREATE TABLE bitrot (path TEXT PRIMARY KEY, '
|
||||||
'mtime INTEGER, hash TEXT, timestamp TEXT)')
|
'mtime INTEGER, hash TEXT, timestamp TEXT)')
|
||||||
|
if 'bitrot_hash_idx' not in names:
|
||||||
|
cur.execute('CREATE INDEX bitrot_hash_idx ON bitrot (hash)')
|
||||||
return conn
|
return conn
|
||||||
|
|
||||||
|
|
||||||
@ -101,18 +102,23 @@ def run(verbosity=1, test=False):
|
|||||||
for path, _, files in os.walk(current_dir):
|
for path, _, files in os.walk(current_dir):
|
||||||
for f in files:
|
for f in files:
|
||||||
p = os.path.join(path, f)
|
p = os.path.join(path, f)
|
||||||
st = os.lstat(p)
|
try:
|
||||||
if not stat.S_ISREG(st.st_mode) or p == bitrot_db:
|
st = os.lstat(p)
|
||||||
continue
|
except OSError as ex:
|
||||||
paths.append(p)
|
if ex.errno != errno.ENOENT:
|
||||||
total_size += st.st_size
|
raise
|
||||||
|
else:
|
||||||
|
if not stat.S_ISREG(st.st_mode) or p == bitrot_db:
|
||||||
|
continue
|
||||||
|
paths.append(p)
|
||||||
|
total_size += st.st_size
|
||||||
paths.sort()
|
paths.sort()
|
||||||
for p in paths:
|
for p in paths:
|
||||||
st = os.stat(p)
|
st = os.stat(p)
|
||||||
new_mtime = int(st.st_mtime)
|
new_mtime = int(st.st_mtime)
|
||||||
current_size += st.st_size
|
current_size += st.st_size
|
||||||
if verbosity:
|
if verbosity:
|
||||||
size_fmt = '\r{:>6.1%}'.format(current_size/total_size)
|
size_fmt = '\r{:>6.1%}'.format(current_size/(total_size or 1))
|
||||||
if size_fmt != last_reported_size:
|
if size_fmt != last_reported_size:
|
||||||
sys.stdout.write(size_fmt)
|
sys.stdout.write(size_fmt)
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
Reference in New Issue
Block a user