Files
renpy/scripts/release_changes.py
2024-06-12 01:35:35 -04:00

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()