Update create-filelist with PR 86
https://pagure.io/quick-fedora-mirror/pull-request/86 Signed-off-by: Aurélien Bompard <aurelien@bompard.org>
This commit is contained in:
parent
065567feb8
commit
2a5c65051b
1 changed files with 19 additions and 11 deletions
|
@ -26,6 +26,9 @@ except ImportError:
|
||||||
SUPPORTED_IMAGE_FORMATS = []
|
SUPPORTED_IMAGE_FORMATS = []
|
||||||
|
|
||||||
|
|
||||||
|
CHECKSUM_ALGORITHMS = ("sha1", "md5", "sha256", "sha512")
|
||||||
|
|
||||||
|
|
||||||
class SEntry(object):
|
class SEntry(object):
|
||||||
"""A simpler DirEntry-like object."""
|
"""A simpler DirEntry-like object."""
|
||||||
|
|
||||||
|
@ -61,16 +64,16 @@ class SEntry(object):
|
||||||
self.ftype = ftype + perm
|
self.ftype = ftype + perm
|
||||||
|
|
||||||
|
|
||||||
def sha1(fname):
|
def get_checksum(algo, fname):
|
||||||
"""Return the SHA1 checksum of a file in hex."""
|
"""Return the checksum of a file in hex."""
|
||||||
fh = open(fname, 'rb')
|
fh = open(fname, 'rb')
|
||||||
sha1 = hashlib.sha1()
|
hasher = getattr(hashlib, algo)()
|
||||||
block = fh.read(2 ** 16)
|
block = fh.read(2 ** 16)
|
||||||
while len(block) > 0:
|
while len(block) > 0:
|
||||||
sha1.update(block)
|
hasher.update(block)
|
||||||
block = fh.read(2 ** 16)
|
block = fh.read(2 ** 16)
|
||||||
|
|
||||||
return sha1.hexdigest()
|
return hasher.hexdigest()
|
||||||
|
|
||||||
|
|
||||||
def recursedir(path='.', skip=[], alwaysskip=['.~tmp~'], in_restricted=False):
|
def recursedir(path='.', skip=[], alwaysskip=['.~tmp~'], in_restricted=False):
|
||||||
|
@ -117,6 +120,15 @@ def recursedir(path='.', skip=[], alwaysskip=['.~tmp~'], in_restricted=False):
|
||||||
yield se
|
yield se
|
||||||
|
|
||||||
|
|
||||||
|
def write_checksum_section(algo, files, output):
|
||||||
|
print('\n[Checksums {}]'.format(algo.upper()), file=output)
|
||||||
|
|
||||||
|
# It's OK if the checksum section is empty, but we should include it anyway
|
||||||
|
# as the client expects it.
|
||||||
|
for f in sorted(files):
|
||||||
|
print('{0}\t{1}'.format(get_checksum(algo, f), f), file=output)
|
||||||
|
|
||||||
|
|
||||||
def parseopts():
|
def parseopts():
|
||||||
null = open(os.devnull, 'w')
|
null = open(os.devnull, 'w')
|
||||||
p = argparse.ArgumentParser(
|
p = argparse.ArgumentParser(
|
||||||
|
@ -194,12 +206,8 @@ def main():
|
||||||
entry.size, entry.path[2:]),
|
entry.size, entry.path[2:]),
|
||||||
file=opts.timelist)
|
file=opts.timelist)
|
||||||
|
|
||||||
print('\n[Checksums SHA1]', file=opts.timelist)
|
for algo in CHECKSUM_ALGORITHMS:
|
||||||
|
write_checksum_section(algo, checksums, opts.timelist)
|
||||||
# It's OK if the checksum section is empty, but we should include it anyway
|
|
||||||
# as the client expects it.
|
|
||||||
for f in sorted(checksums):
|
|
||||||
print('{0}\t{1}'.format(sha1(f), f), file=opts.timelist)
|
|
||||||
|
|
||||||
print('\n[End]', file=opts.timelist)
|
print('\n[End]', file=opts.timelist)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue