@@ -206,14 +206,23 @@ def set_argparser(parser):
206
206
parser .add_argument ('--no-bz' , dest = 'fetch_bugzilla' , action = 'store_false' ,
207
207
default = True , help = _ ("Don't get Bugzilla links" ))
208
208
209
- parser .add_argument ('--qrepo' , dest = 'py3query_repo' , default = 'rawhide' ,
210
- help = _ ("Repo to use for the query" ))
209
+ parser .add_argument ('--qrepo' , dest = 'py3query_repo' , action = 'append' ,
210
+ help = _ ("Repo(s) to use for the query" ))
211
+
212
+ parser .add_argument ('--repo-groups' , dest = 'repo_groups_file' ,
213
+ default = None , metavar = 'FILE' , action = 'store' ,
214
+ help = _ ("Optional filename of a 'groups.json' file "
215
+ "that will record which package comes from "
216
+ "which repositories" ))
211
217
212
218
def run (self ):
213
- reponame = self .opts .py3query_repo
219
+ reponames = self .opts .py3query_repo
220
+ if not reponames :
221
+ reponames = ['rawhide' ]
214
222
self .base_query = self .base .sack .query ()
215
- self .pkg_query = self .base_query .filter (reponame = reponame )
216
- self .src_query = self .base_query .filter (reponame = reponame + '-source' ).filter (arch = ['src' ])
223
+ self .pkg_query = self .base_query .filter (reponame = list (reponames ))
224
+ source_reponames = [n + '-source' for n in reponames ]
225
+ self .src_query = self .base_query .filter (reponame = source_reponames ).filter (arch = ['src' ])
217
226
218
227
# python_versions: {package: set of Python versions}
219
228
python_versions = collections .defaultdict (set )
@@ -222,7 +231,7 @@ def run(self):
222
231
# dep_versions: {dep name: Python version}
223
232
dep_versions = collections .defaultdict (set )
224
233
for n , seeds in SEED_PACKAGES .items ():
225
- provides = sorted (self .all_provides (reponame , seeds ), key = str )
234
+ provides = sorted (self .all_provides (reponames , seeds ), key = str )
226
235
227
236
# This effectively includes packages that still need
228
237
# Python 3.4 while Rawhide only provides Python 3.5
@@ -238,10 +247,13 @@ def run(self):
238
247
# by_srpm_name: {srpm name: set of packages}
239
248
srpm_names = {}
240
249
by_srpm_name = collections .defaultdict (set )
250
+ # repo_srpms: {repo name: set of srpm names}
251
+ repo_srpms = {}
241
252
for pkg in progressbar (python_versions .keys (), 'Getting SRPMs' ):
242
253
srpm_name = get_srpm_name (pkg )
243
254
srpm_names [pkg ] = srpm_name
244
255
by_srpm_name [srpm_name ].add (pkg )
256
+ repo_srpms .setdefault (pkg .reponame , set ()).add (srpm_name )
245
257
246
258
# deps_of_pkg: {package: set of packages}
247
259
deps_of_pkg = collections .defaultdict (set )
@@ -387,12 +399,21 @@ def key(bug):
387
399
json .dump (json_output , sys .stdout , indent = 2 , sort_keys = True )
388
400
sys .stdout .flush ()
389
401
390
- def all_provides (self , reponame , seeds ):
402
+ # Write out a groups.json
403
+ if self .opts .repo_groups_file :
404
+ output = {repo_name : {'name' : repo_name ,
405
+ 'packages' : sorted (srpm_names )}
406
+ for repo_name , srpm_names in repo_srpms .items ()}
407
+ with open (self .opts .repo_groups_file , 'w' ) as f :
408
+ json .dump (output , f , indent = 2 , sort_keys = True )
409
+
410
+
411
+ def all_provides (self , reponames , seeds ):
391
412
pkgs = set ()
392
413
for seed in seeds :
393
414
query = dnf .subject .Subject (seed , ignore_case = True ).get_best_query (
394
415
self .base .sack , with_provides = False )
395
- query = query .filter (reponame = reponame )
416
+ query = query .filter (reponame = list ( reponames ) )
396
417
pkgs .update (query .run ())
397
418
provides = set ()
398
419
for pkg in sorted (pkgs ):
0 commit comments