diff --git a/tools/versions.py b/tools/versions.py index a709852d2..69bbc5794 100755 --- a/tools/versions.py +++ b/tools/versions.py @@ -195,30 +195,44 @@ def do_autoupdate(args: Namespace) -> None: for name in names: if name not in upstream_vers: raise ValueError(f'{name} is not tracked in Anitya; upstream version is unknown') - if name in ports: - raise ValueError(f'{name} upstream does not use Meson; cannot update automatically') + if name in ports and not args.port: + raise ValueError(f'{name} upstream does not use Meson; cannot update automatically. Use -p/--port to update everything but the packagefiles.') else: - names = [ - name for name in cur_vers - if name not in ports and name in upstream_vers - ] + names = [name for name in cur_vers if name in upstream_vers] + if not args.port: + names = [name for name in names if name not in ports] # update failures = 0 for name in names: cur_ver, upstream_ver = cur_vers[name], upstream_vers[name] - if cur_ver != upstream_ver: - try: - print(f'Updating {name}...') + try: + if cur_ver != upstream_ver: + if name in ports: + # manual packagefiles changes will also be needed + print(f'Updating {name}.wrap and releases.json...') + else: + print(f'Updating {name}...') update_wrap(name, cur_ver, upstream_ver) releases[name]['versions'].insert(0, f'{upstream_ver}-1') - with open('releases.json.new', 'w') as f: - json.dump(releases, f, indent=2, sort_keys=True) - f.write('\n') - os.rename('releases.json.new', 'releases.json') - except Exception as e: - print(e, file=sys.stderr) - failures += 1 + elif name in ports and args.revision: + # only allow for ports, since official wraps can't have + # downstream changes + print(f'Updating {name} revision...') + cur_rev = int(releases[name]['versions'][0].split('-')[1]) + releases[name]['versions'].insert( + 0, f'{cur_vers[name]}-{cur_rev + 1}' + ) + else: + continue + + with open('releases.json.new', 'w') as f: + json.dump(releases, f, indent=2, sort_keys=True) + f.write('\n') + os.rename('releases.json.new', 'releases.json') + except Exception as e: + print(e, file=sys.stderr) + failures += 1 if failures: raise Exception(f"Couldn't update {failures} wraps") @@ -325,16 +339,26 @@ def main() -> None: autoupdate = subparsers.add_parser( 'autoupdate', + aliases=['au'], help='automatically update non-port wraps', description='Attempt to automatically update wraps that support Meson upstream.' ) autoupdate.add_argument( 'names', metavar='name', nargs='*', help='wrap to update' ) + autoupdate.add_argument( + '-p', '--port', action='store_true', + help='allow updating wraps with Meson support added in wrapdb' + ) + autoupdate.add_argument( + '-r', '--revision', action='store_true', + help="update port's revision if version is current" + ) autoupdate.set_defaults(func=do_autoupdate) list = subparsers.add_parser( 'list', + aliases=['ls'], help='list wraps and their versions', description='List wraps and their versions.', )