Skip to content

Commit ea12650

Browse files
committed
tools/versions: always allow autoupdate --revision
--revision currently a) refuses to bump the revision of projects with upstream Meson support or whose current version is not tracked by Anitya and b) bumps the version instead of the revision if a new version is available. Both behaviors are based on faulty assumptions. We might plausibly want to bump a wrap's revision after changing the wrap file, regardless of the project's status in other respects. And it's reasonable to want to fix something in a Meson port without taking responsibility for updating it to the latest version. Change the semantics of --revision to always bump the revisions of the specified wraps, even if --port is not specified. If no wraps are specified, bump all wraps for consistency. Rework the help text to describe the various things autoupdate can do, rather than only emphasizing projects with upstream Meson support.
1 parent 7222876 commit ea12650

File tree

1 file changed

+40
-20
lines changed

1 file changed

+40
-20
lines changed

tools/versions.py

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -187,15 +187,49 @@ def update_wrap(name: str, old_ver: str, new_ver: str) -> None:
187187
f.write(''.join(lines))
188188

189189

190+
def write_releases(releases: dict[str, WrapInfo]) -> None:
191+
'''Write modified releases.json.'''
192+
with open('releases.json.new', 'w') as f:
193+
json.dump(releases, f, indent=2, sort_keys=True)
194+
f.write('\n')
195+
os.rename('releases.json.new', 'releases.json')
196+
197+
198+
def update_revisions(args: Namespace) -> None:
199+
# run queries
200+
releases = get_releases()
201+
cur_vers = get_wrap_versions()
202+
203+
# decide what to update
204+
names: list[str] = args.names
205+
if names:
206+
for name in names:
207+
if name not in cur_vers:
208+
raise ValueError(f'{name} is not a valid wrap in releases.json')
209+
else:
210+
names = [name for name in cur_vers]
211+
212+
# update
213+
for name in names:
214+
print(f'Updating {name} revision...')
215+
cur_rev = int(releases[name]['versions'][0].split('-')[1])
216+
releases[name]['versions'].insert(0, f'{cur_vers[name]}-{cur_rev + 1}')
217+
write_releases(releases)
218+
219+
190220
def do_autoupdate(args: Namespace) -> None:
221+
# --revision is distinct functionality; handle it separately
222+
if args.revision:
223+
return update_revisions(args)
224+
191225
# run queries
192226
releases = get_releases()
193227
cur_vers = get_wrap_versions()
194228
upstream_vers = get_upstream_versions()
195229
ports = get_port_wraps()
196230

197231
# decide what to update
198-
names = args.names
232+
names: list[str] = args.names
199233
if names:
200234
for name in names:
201235
if name not in upstream_vers:
@@ -220,21 +254,7 @@ def do_autoupdate(args: Namespace) -> None:
220254
print(f'Updating {name}...')
221255
update_wrap(name, cur_ver, upstream_ver)
222256
releases[name]['versions'].insert(0, f'{upstream_ver}-1')
223-
elif name in ports and args.revision:
224-
# only allow for ports, since official wraps can't have
225-
# downstream changes
226-
print(f'Updating {name} revision...')
227-
cur_rev = int(releases[name]['versions'][0].split('-')[1])
228-
releases[name]['versions'].insert(
229-
0, f'{cur_vers[name]}-{cur_rev + 1}'
230-
)
231-
else:
232-
continue
233-
234-
with open('releases.json.new', 'w') as f:
235-
json.dump(releases, f, indent=2, sort_keys=True)
236-
f.write('\n')
237-
os.rename('releases.json.new', 'releases.json')
257+
write_releases(releases)
238258
except Exception as e:
239259
print(e, file=sys.stderr)
240260
failures += 1
@@ -352,19 +372,19 @@ def main() -> None:
352372
autoupdate = subparsers.add_parser(
353373
'autoupdate',
354374
aliases=['au'],
355-
help='automatically update non-port wraps',
356-
description='Attempt to automatically update wraps that support Meson upstream.'
375+
help='automatically update wraps',
376+
description="Automatically update wraps that support Meson upstream, update metadata only (releases.json and *.wrap) for wraps that don't, or increment wrap revision in releases.json."
357377
)
358378
autoupdate.add_argument(
359379
'names', metavar='name', nargs='*', help='wrap to update'
360380
)
361381
autoupdate.add_argument(
362382
'-p', '--port', action='store_true',
363-
help='allow updating wraps with Meson support added in wrapdb'
383+
help='allow updating metadata for wraps without upstream Meson support',
364384
)
365385
autoupdate.add_argument(
366386
'-r', '--revision', action='store_true',
367-
help="update port's revision if version is current"
387+
help='increment wrap revision and do nothing else'
368388
)
369389
autoupdate.set_defaults(func=do_autoupdate)
370390

0 commit comments

Comments
 (0)