diff options
author | Robin Jarry <robin@jarry.cc> | 2024-06-18 21:06:19 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2024-06-18 21:08:22 +0200 |
commit | 74cea6b5191d6d34cd4282840e05aa0970120341 (patch) | |
tree | d69c00aa9d5dec9303b2a82a9e239b63455eb86b /contrib | |
parent | 3b9397e6592d9bb9e9ae5e7aea31a96789e6130b (diff) | |
download | aerc-74cea6b5191d6d34cd4282840e05aa0970120341.tar.gz |
release.sh: better list dependency changes
Instead of a dumb diff, add a script to render a pretty list of changed
dependency versions.
Separate the new and removed dependencies from the version updates.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'contrib')
-rwxr-xr-x | contrib/depends-diff.py | 100 | ||||
-rwxr-xr-x | contrib/release.sh | 2 |
2 files changed, 101 insertions, 1 deletions
diff --git a/contrib/depends-diff.py b/contrib/depends-diff.py new file mode 100755 index 00000000..3bccf3de --- /dev/null +++ b/contrib/depends-diff.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: MIT +# Copyright (c) 2024 Robin Jarry + +import argparse +import re +import subprocess + +DEP_CHANGE_RE = re.compile( + r""" + ^ + (?P<diff>[\+\-])\s* + (?P<name>\S+)\s* + (?P<version>v\S+)\s* + (?://\s*indirect)? + $ + """, + re.VERBOSE, +) +REPLACE_RE = re.compile( + r""" + ^ + (?P<diff>[\+\-])\s* + replace + (?P<name>\S+)\s* + =>\s* + (?P<replacement>\S+)\s* + (?P<version>v\S+)\s* + $ + """, + re.VERBOSE, +) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "git_range", + metavar="GIT_RANGE", + help="The git revision range (see gitrevisions(7)).", + ) + args = parser.parse_args() + + old_deps = {} + new_deps = {} + + with subprocess.Popen( + ["git", "diff", "-U0", "--ignore-all-space", args.git_range, "--", "go.mod"], + stdout=subprocess.PIPE, + encoding="utf-8", + ) as proc: + for line in proc.stdout: + match = DEP_CHANGE_RE.match(line.strip()) + if not match: + match = REPLACE_RE.match(line.strip()) + if not match: + continue + diff, name, replacement, version = match.groups() + if diff == "+": + new_deps[replacement] = version + del new_deps[name] + continue + diff, name, version = match.groups() + if diff == "+": + new_deps[name] = version + else: + old_deps[name] = version + + print("## New") + print() + added = new_deps.keys() - old_deps.keys() + if added: + for a in sorted(added): + print("+", a, new_deps[a]) + else: + print("none") + + print() + print("## Updated") + print() + updated = old_deps.keys() & new_deps.keys() + if updated: + for u in sorted(updated): + print("*", u, old_deps[u], "=>", new_deps[u]) + else: + print("none") + + print() + print("## Removed") + print() + removed = old_deps.keys() - new_deps.keys() + if removed: + for r in sorted(removed): + print("-", r) + else: + print("none") + + +if __name__ == "__main__": + main() diff --git a/contrib/release.sh b/contrib/release.sh index 21d3d028..80049252 100755 --- a/contrib/release.sh +++ b/contrib/release.sh @@ -103,7 +103,7 @@ $(changelog '#') # Changed dependencies for downstream packagers -$(git diff -U0 $prev_tag.. go.mod) +$(contrib/depends-diff.py $prev_tag..) Thanks to all contributors! |