84 lines
2.1 KiB
Python
Executable File
84 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import zipfile
|
|
import re
|
|
import pathlib
|
|
import collections
|
|
|
|
|
|
def index_file(index, fn):
|
|
|
|
m = re.search(r'((atom-)?\w+).zip', str(fn))
|
|
if not m:
|
|
return
|
|
|
|
base = m.group(1)
|
|
|
|
zf = zipfile.ZipFile(fn)
|
|
for zi in zf.infolist():
|
|
_basedir, _, filename = zi.filename.partition("/")
|
|
index[base + "/" + filename] = zi.compress_size
|
|
|
|
|
|
|
|
|
|
def index_directory(dn):
|
|
rv = collections.defaultdict(int)
|
|
|
|
p = pathlib.Path(dn)
|
|
|
|
if not p.exists():
|
|
p = pathlib.Path(__file__).parent / "../dl" / dn
|
|
|
|
|
|
for i in p.iterdir():
|
|
index_file(rv, i)
|
|
|
|
return rv
|
|
|
|
|
|
def main():
|
|
ap = argparse.ArgumentParser()
|
|
ap.add_argument("old", help="Either a path to a directory containing the Ren'Py downloads, or a version.")
|
|
ap.add_argument("new", help="Either a path to a directory containing the Ren'Py downloads, or a version.")
|
|
ap.add_argument("prefix", default="", nargs='?', help="If given, only show results with this prefix.")
|
|
ap.add_argument("--all", action="store_true", help="If given, show files that didn't change.")
|
|
ap.add_argument("--dirs", action="store_true", help="If given, show directories.")
|
|
ap.add_argument("--changed", action="store_true", help="If given, show files that have changed size.")
|
|
|
|
args = ap.parse_args()
|
|
|
|
old_index = index_directory(args.old)
|
|
new_index = index_directory(args.new)
|
|
|
|
all_files = list(set(old_index) | set(new_index))
|
|
all_files.sort()
|
|
|
|
print("{:>12s} {:>12s}".format("Old Size", "New Size"))
|
|
print()
|
|
|
|
for fn in all_files:
|
|
old_size = old_index[fn]
|
|
new_size = new_index[fn]
|
|
|
|
if args.changed:
|
|
if old_size == new_size:
|
|
continue
|
|
elif not args.all:
|
|
if bool(old_size) == bool(new_size):
|
|
continue
|
|
|
|
if not args.dirs:
|
|
if fn.endswith("/"):
|
|
continue
|
|
|
|
if not fn.startswith(args.prefix):
|
|
continue
|
|
|
|
print(f"{old_size:12,d} {new_size:12,d} {fn}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|