@@ -143,21 +143,36 @@ def resolve_dependencies(
143143 if PYPI_SIMPLE_URL not in index_urls :
144144 index_urls = tuple ([PYPI_SIMPLE_URL ]) + tuple (index_urls )
145145
146- for req_file in requirement_files :
147- deps = dependencies .get_dependencies_from_requirements (requirements_file = req_file )
148- for extra_data in dependencies .get_extra_data_from_requirements (requirements_file = req_file ):
149- index_urls = (* index_urls , * tuple (extra_data .get ("extra_index_urls" ) or []))
150- direct_dependencies .extend (deps )
151- package_data = [
152- pkg_data .to_dict () for pkg_data in PipRequirementsFileHandler .parse (location = req_file )
153- ]
154- files .append (
155- dict (
156- type = "file" ,
157- path = req_file ,
158- package_data = package_data ,
146+ known_files = {* requirement_files }
147+ visited_files = set ()
148+ while True :
149+ unvisited_files = known_files - visited_files
150+ for req_file in unvisited_files :
151+ deps = dependencies .get_dependencies_from_requirements (requirements_file = req_file )
152+ os .path .dirname (req_file )
153+ for extra_data in dependencies .get_extra_data_from_requirements (
154+ requirements_file = req_file
155+ ):
156+ index_urls = (* index_urls , * tuple (extra_data .get ("extra_index_urls" ) or []))
157+ recursive_files = extra_data .get ("requirements" ) or []
158+ direct_dependencies .extend (deps )
159+ recursive_files = [os .path .join (os .path .dirname (req_file ), f ) for f in recursive_files ]
160+ package_data = [
161+ pkg_data .to_dict ()
162+ for pkg_data in PipRequirementsFileHandler .parse (location = req_file )
163+ ]
164+ files .append (
165+ dict (
166+ type = "file" ,
167+ path = req_file ,
168+ package_data = package_data ,
169+ )
159170 )
160- )
171+ visited_files .add (req_file )
172+ known_files .update (recursive_files )
173+
174+ if known_files == visited_files :
175+ break
161176
162177 for specifier in specifiers :
163178 dep = dependencies .get_dependency (specifier = specifier )
0 commit comments