2828from packages .utils import find_evr , get_or_create_package
2929from patchman .signals import pbar_start , pbar_update
3030from util import (
31- extract , fetch_content , get_setting_of_type , get_url , run_concurrently ,
31+ extract , fetch_concurrently , fetch_content , get_setting_of_type , get_url ,
32+ run_concurrently ,
3233)
3334from util .logging import clear_forked_pbar , error_message , warning_message
3435
@@ -47,7 +48,7 @@ def update_debian_errata(concurrent_processing=True, max_workers=25):
4748 advisories = dsas + dlas
4849 fetch_dscs_from_debian_package_file_maps ()
4950 accepted_codenames = get_accepted_debian_codenames ()
50- errata = parse_debian_errata (advisories , accepted_codenames )
51+ errata = parse_debian_errata (advisories , accepted_codenames , concurrent_processing , max_workers )
5152 create_debian_errata (errata , accepted_codenames , concurrent_processing , max_workers )
5253
5354
@@ -109,7 +110,7 @@ def parse_debian_package_file_map(data, repo):
109110 parsing_dsc = False
110111
111112
112- def parse_debian_errata (advisories , accepted_codenames ):
113+ def parse_debian_errata (advisories , accepted_codenames , concurrent_processing = True , max_workers = 25 ):
113114 """ Parse Debian DSA/DLA files for security advisories
114115 """
115116 distro_pattern = re .compile (r'^\t\[(.+?)\] - .*' )
@@ -145,7 +146,7 @@ def parse_debian_errata(advisories, accepted_codenames):
145146 e ['packages' ][release ].append (None )
146147 # add the last one
147148 errata = add_errata_by_codename (errata , e , accepted_codenames )
148- fetch_debian_dsc_package_lists (dsc_fetches )
149+ fetch_debian_dsc_package_lists (dsc_fetches , concurrent_processing , max_workers )
149150 return errata
150151
151152
@@ -232,13 +233,23 @@ def process_debian_erratum(erratum, accepted_codenames):
232233 error_message (text = exc )
233234
234235
235- def fetch_debian_dsc_package_lists (dsc_fetches ):
236+ def fetch_debian_dsc_package_lists (dsc_fetches , concurrent_processing = True , max_workers = 25 ):
236237 """ Fetch DSC package lists with a progress bar
237238 """
238- pbar_start .send (sender = None , ptext = f'Fetching { len (dsc_fetches )} Debian DSC files' , plen = len (dsc_fetches ))
239- for i , (package , version ) in enumerate (dsc_fetches ):
240- fetch_debian_dsc_package_list (package , version )
241- pbar_update .send (sender = None , index = i + 1 )
239+ flen = len (dsc_fetches )
240+ pbar_start .send (sender = None , ptext = f'Fetching { flen } Debian DSC files' , plen = flen )
241+ if concurrent_processing :
242+ for i , _ in enumerate (fetch_concurrently (fetch_dsc_worker , dsc_fetches , max_workers )):
243+ pbar_update .send (sender = None , index = i + 1 )
244+ else :
245+ for i , (package , version ) in enumerate (dsc_fetches ):
246+ fetch_debian_dsc_package_list (package , version )
247+ pbar_update .send (sender = None , index = i + 1 )
248+
249+
250+ def fetch_dsc_worker (item , session ):
251+ package , version = item
252+ fetch_debian_dsc_package_list (package , version , session = session )
242253
243254
244255def get_debian_dsc_package_list (package , version ):
@@ -251,14 +262,14 @@ def get_debian_dsc_package_list(package, version):
251262 return package_list
252263
253264
254- def fetch_debian_dsc_package_list (package , version ):
265+ def fetch_debian_dsc_package_list (package , version , session = None ):
255266 """ Fetch the package list from a DSC file for a given source package/version
256267 """
257268 if not DSCs .get (package ) or not DSCs [package ].get (version ):
258269 warning_message (text = f'No DSC found for { package } { version } ' )
259270 return
260271 source_url = DSCs [package ][version ]['url' ]
261- res = get_url (source_url )
272+ res = get_url (source_url , session = session )
262273 data = res .content
263274 dsc = Dsc (data .decode ())
264275 package_list = dsc .get ('package-list' )
0 commit comments