3030
3131import requests
3232
33- from utils import read_wrap , wrap_path
33+ from utils import Releases , read_wrap , wrap_path
3434
3535WRAP_URL_TEMPLATE = (
3636 'https://github.com/mesonbuild/wrapdb/blob/master/subprojects/{0}.wrap'
@@ -60,12 +60,6 @@ class AnityaPackage(T.TypedDict):
6060 version : str
6161
6262
63- class WrapInfo (T .TypedDict ):
64- versions : list [str ]
65- dependency_names : list [str ]
66- program_names : list [str ]
67-
68-
6963@cache
7064def get_upstream_versions () -> dict [str , str ]:
7165 '''Query Anitya and return a dict: wrap_name -> upstream_version.'''
@@ -107,32 +101,27 @@ def sub(name: str, old: str, new: str) -> None:
107101
108102
109103@cache
110- def get_releases (commit = None ) -> dict [str , WrapInfo ]:
111- '''Parse and return releases.json for the specified commit or the working
112- tree.'''
113- if commit is not None :
114- data = subprocess .check_output (
115- ['git' , 'cat-file' , 'blob' , f'{ commit } :releases.json' ], text = True
116- )
117- else :
118- with open ('releases.json' ) as f :
119- data = f .read ()
120- return json .loads (data )
104+ def get_commit_releases (commit : str ) -> Releases :
105+ '''Parse and return releases.json for the specified commit.'''
106+ data = subprocess .check_output (
107+ ['git' , 'cat-file' , 'blob' , f'{ commit } :releases.json' ], text = True
108+ )
109+ return Releases (json .loads (data ))
121110
122111
123112def get_wrap_versions () -> dict [str , str ]:
124113 '''Return a dict: wrap_name -> wrapdb_version.'''
125114 return {
126115 name : info ['versions' ][0 ].split ('-' )[0 ]
127- for name , info in get_releases ().items ()
116+ for name , info in Releases . load ().items ()
128117 if name not in DEPRECATED_WRAPS
129118 }
130119
131120
132121def get_port_wraps () -> set [str ]:
133122 '''Return the names of wraps that have a patch directory.'''
134123 ports = set ()
135- for name , info in get_releases ().items ():
124+ for name , info in Releases . load ().items ():
136125 wrap = read_wrap (name )
137126 if wrap .has_option ('wrap-file' , 'patch_directory' ):
138127 ports .add (name )
@@ -190,17 +179,9 @@ def update_wrap(name: str, old_ver: str, new_ver: str) -> None:
190179 f .write ('' .join (lines ))
191180
192181
193- def write_releases (releases : dict [str , WrapInfo ]) -> None :
194- '''Write modified releases.json.'''
195- with open ('releases.json.new' , 'w' ) as f :
196- json .dump (releases , f , indent = 2 , sort_keys = True )
197- f .write ('\n ' )
198- os .rename ('releases.json.new' , 'releases.json' )
199-
200-
201182def update_revisions (args : Namespace ) -> None :
202183 # run queries
203- releases = get_releases ()
184+ releases = Releases . load ()
204185 cur_vers = get_wrap_versions ()
205186
206187 # decide what to update
@@ -217,7 +198,7 @@ def update_revisions(args: Namespace) -> None:
217198 print (f'Updating { name } revision...' )
218199 cur_rev = int (releases [name ]['versions' ][0 ].split ('-' )[1 ])
219200 releases [name ]['versions' ].insert (0 , f'{ cur_vers [name ]} -{ cur_rev + 1 } ' )
220- write_releases ( releases )
201+ releases . save ( )
221202
222203
223204def do_autoupdate (args : Namespace ) -> None :
@@ -226,7 +207,7 @@ def do_autoupdate(args: Namespace) -> None:
226207 return update_revisions (args )
227208
228209 # run queries
229- releases = get_releases ()
210+ releases = Releases . load ()
230211 cur_vers = get_wrap_versions ()
231212 upstream_vers = get_upstream_versions ()
232213 ports = get_port_wraps ()
@@ -257,7 +238,7 @@ def do_autoupdate(args: Namespace) -> None:
257238 print (f'Updating { name } ...' )
258239 update_wrap (name , cur_ver , upstream_ver )
259240 releases [name ]['versions' ].insert (0 , f'{ upstream_ver } -1' )
260- write_releases ( releases )
241+ releases . save ( )
261242 except Exception as e :
262243 print (e , file = sys .stderr )
263244 failures += 1
@@ -266,8 +247,8 @@ def do_autoupdate(args: Namespace) -> None:
266247
267248
268249def do_commit (args : Namespace ) -> None :
269- old_releases = get_releases ('HEAD' )
270- new_releases = get_releases ()
250+ old_releases = get_commit_releases ('HEAD' )
251+ new_releases = Releases . load ()
271252
272253 # we don't validate any invariants checked by sanity_checks.py
273254 changed_wraps = [
0 commit comments