MCPcopy Create free account
hub / github.com/aboutcode-org/scancode-toolkit / assemble

Method assemble

src/packagedcode/cocoapods.py:134–208  ·  view source on GitHub ↗

Assemble pod packages and dependencies and handle the specific cases where there are more than one podspec in the same directory. This is designed to process .podspec, Podfile and Podfile.lock

(cls, package_data, resource, codebase, package_adder)

Source from the content-addressed store, hash-verified

132
133 @classmethod
134 def assemble(cls, package_data, resource, codebase, package_adder):
135 """
136 Assemble pod packages and dependencies and handle the specific cases where
137 there are more than one podspec in the same directory.
138 This is designed to process .podspec, Podfile and Podfile.lock
139 """
140 if codebase.has_single_resource:
141 yield from models.DatafileHandler.assemble(package_data, resource, codebase)
142 else:
143 # do we have more than one podspec?
144 parent = resource.parent(codebase)
145 sibling_podspecs = [
146 r for r in parent.children(codebase)
147 if r.name.endswith('.podspec')
148 ]
149
150 siblings_counts = len(sibling_podspecs)
151 has_single_podspec = siblings_counts == 1
152 has_multiple_podspec = siblings_counts > 1
153
154 datafile_name_patterns = (
155 'Podfile.lock',
156 'Podfile',
157 )
158
159 if has_single_podspec:
160 # we can treat all podfile/spec as being for one package
161 datafile_name_patterns = (sibling_podspecs[0].name,) + datafile_name_patterns
162
163 yield from models.DatafileHandler.assemble_from_many_datafiles(
164 datafile_name_patterns=datafile_name_patterns,
165 directory=parent,
166 codebase=codebase,
167 package_adder=package_adder,
168 )
169
170 elif has_multiple_podspec:
171 # treat each of podspec and podfile alone without meraging
172 # as we cannot determine easily which podfile is for which
173 # podspec
174 podspec = sibling_podspecs.pop()
175 datafile_name_patterns = (podspec.name,) + datafile_name_patterns
176
177 yield from models.DatafileHandler.assemble_from_many_datafiles(
178 datafile_name_patterns=datafile_name_patterns,
179 directory=parent,
180 codebase=codebase,
181 package_adder=package_adder,
182 )
183
184 for resource in sibling_podspecs:
185 datafile_path = resource.path
186 for package_data in resource.package_data:
187 package_data = models.PackageData.from_dict(package_data)
188 package = models.Package.from_package_data(
189 package_data=package_data,
190 datafile_path=datafile_path,
191 )

Callers

nothing calls this directly

Calls 7

parentMethod · 0.80
from_package_dataMethod · 0.80
childrenMethod · 0.45
popMethod · 0.45
from_dictMethod · 0.45

Tested by

no test coverage detected