Skip to content

Commit 3b45dc6

Browse files
committed
Add package_adder argument to assemble() #3034
* Add test for add_to_package Signed-off-by: Jono Yang <[email protected]>
1 parent 36e7ffc commit 3b45dc6

25 files changed

+204
-140
lines changed

src/packagedcode/about.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def parse(cls, location):
107107
)
108108

109109
@classmethod
110-
def assemble(cls, package_data, resource, codebase):
110+
def assemble(cls, package_data, resource, codebase, package_adder):
111111
"""
112112
Yield a Package. Note that ABOUT files do not carry dependencies.
113113
"""
@@ -122,8 +122,7 @@ def assemble(cls, package_data, resource, codebase):
122122

123123
# NOTE: we do not attach files to the Package level. Instead we
124124
# update `for_package` in the file
125-
resource.for_packages.append(package_uid)
126-
resource.save(codebase)
125+
package_adder(package_uid, resource, codebase)
127126

128127
if not package.license_expression:
129128
package.license_expression = cls.compute_normalized_license(package)
@@ -151,8 +150,7 @@ def assemble(cls, package_data, resource, codebase):
151150
# path is found and processed: remove it, so we can
152151
# check if we found all of them
153152
del file_references_by_path[res.path]
154-
res.for_packages.append(package_uid)
155-
res.save(codebase)
153+
package_adder(package_uid, res, codebase)
156154

157155
yield res
158156

src/packagedcode/alpine.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def compute_normalized_license(cls, package):
6464
return detected
6565

6666
@classmethod
67-
def assemble(cls, package_data, resource, codebase):
67+
def assemble(cls, package_data, resource, codebase, package_adder):
6868
# get the root resource of the rootfs
6969
levels_up = len('lib/apk/db/installed'.split('/'))
7070
root_resource = get_ancestor(
@@ -107,8 +107,7 @@ def assemble(cls, package_data, resource, codebase):
107107
# path is found and processed: remove it, so we can check if we
108108
# found all of them
109109
del file_references_by_path[res.path]
110-
res.for_packages.append(package_uid)
111-
res.save(codebase)
110+
package_adder(package_uid, res, codebase)
112111
resources.append(res)
113112

114113
# if we have left over file references, add these to extra data
@@ -139,11 +138,12 @@ def compute_normalized_license(cls, package):
139138
return detected
140139

141140
@classmethod
142-
def assign_package_to_resources(cls, package, resource, codebase):
141+
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
143142
models.DatafileHandler.assign_package_to_parent_tree(
144143
package=package,
145144
resource=resource,
146145
codebase=codebase,
146+
package_adder=package_adder,
147147
)
148148

149149

src/packagedcode/build.py

+12-8
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,12 @@ def parse(cls, location):
5050
)
5151

5252
@classmethod
53-
def assign_package_to_resources(cls, package, resource, codebase):
53+
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
5454
models.DatafileHandler.assign_package_to_parent_tree(
5555
package=package,
5656
resource=resource,
5757
codebase=codebase,
58+
package_adder=package_adder,
5859
)
5960

6061

@@ -75,7 +76,7 @@ class BaseStarlarkManifestHandler(models.DatafileHandler):
7576
"""
7677

7778
@classmethod
78-
def assemble(cls, package_data, resource, codebase):
79+
def assemble(cls, package_data, resource, codebase, package_adder):
7980
"""
8081
Given a ``package_data`` PackageData found in the ``resource`` datafile
8182
of the ``codebase``, assemble package their files and dependencies
@@ -100,6 +101,7 @@ def assemble(cls, package_data, resource, codebase):
100101
package=package,
101102
resource=resource,
102103
codebase=codebase,
104+
package_adder=package_adder
103105
)
104106

105107
yield package
@@ -175,14 +177,13 @@ def parse(cls, location):
175177
)
176178

177179
@classmethod
178-
def assign_package_to_resources(cls, package, resource, codebase, skip_name=None):
180+
def assign_package_to_resources(cls, package, resource, codebase, package_adder, skip_name=None):
179181
package_uid = package.package_uid
180182
if not package_uid:
181183
return
182184
parent = resource.parent(codebase)
183185
for res in walk_build(resource=parent, codebase=codebase, skip_name=skip_name):
184-
res.for_packages.append(package_uid)
185-
res.save(codebase)
186+
package_adder(package_uid, res, codebase)
186187

187188

188189
def walk_build(resource, codebase, skip_name):
@@ -235,11 +236,12 @@ class BazelBuildHandler(BaseStarlarkManifestHandler):
235236
documentation_url = 'https://bazel.build/'
236237

237238
@classmethod
238-
def assign_package_to_resources(cls, package, resource, codebase, skip_name='BUILD'):
239+
def assign_package_to_resources(cls, package, resource, codebase, package_adder, skip_name='BUILD'):
239240
return super().assign_package_to_resources(
240241
package=package,
241242
resource=resource,
242243
codebase=codebase,
244+
package_adder=package_adder,
243245
skip_name=skip_name,
244246
)
245247

@@ -252,11 +254,12 @@ class BuckPackageHandler(BaseStarlarkManifestHandler):
252254
documentation_url = 'https://buck.build/'
253255

254256
@classmethod
255-
def assign_package_to_resources(cls, package, resource, codebase, skip_name='BUCK'):
257+
def assign_package_to_resources(cls, package, resource, codebase, package_adder, skip_name='BUCK'):
256258
return super().assign_package_to_resources(
257259
package=package,
258260
resource=resource,
259261
codebase=codebase,
262+
package_adder=package_adder,
260263
skip_name=skip_name,
261264
)
262265

@@ -377,9 +380,10 @@ def compute_normalized_license(cls, package):
377380
return models.compute_normalized_license(declared_license)
378381

379382
@classmethod
380-
def assign_package_to_resources(cls, package, resource, codebase):
383+
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
381384
models.DatafileHandler.assign_package_to_parent_tree(
382385
package_=package,
383386
resource=resource,
384387
codebase=codebase,
388+
package_adder=package_adder,
385389
)

src/packagedcode/build_gradle.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,12 @@ def parse(cls, location):
6565

6666
# TODO: handle complex cases of nested builds with many packages
6767
@classmethod
68-
def assign_package_to_resources(cls, package, resource, codebase):
68+
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
6969
models.DatafileHandler.assign_package_to_parent_tree(
7070
package=package,
7171
resource=resource,
7272
codebase=codebase,
73+
package_adder=package_adder,
7374
)
7475

7576

src/packagedcode/cargo.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,15 @@ def parse(cls, location):
8585
)
8686

8787
@classmethod
88-
def assemble(cls, package_data, resource, codebase):
88+
def assemble(cls, package_data, resource, codebase, package_adder):
8989
"""
9090
Assemble Cargo.toml and possible Cargo.lock datafiles
9191
"""
9292
yield from cls.assemble_from_many_datafiles(
9393
datafile_name_patterns=('Cargo.toml', 'cargo.toml', 'Cargo.lock', 'cargo.lock'),
9494
directory=resource.parent(codebase),
9595
codebase=codebase,
96+
package_adder=package_adder,
9697
)
9798

9899

@@ -144,14 +145,15 @@ def parse(cls, location):
144145
)
145146

146147
@classmethod
147-
def assemble(cls, package_data, resource, codebase):
148+
def assemble(cls, package_data, resource, codebase, package_adder):
148149
"""
149150
Assemble Cargo.toml and possible Cargo.lock datafiles
150151
"""
151152
yield from cls.assemble_from_many_datafiles(
152153
datafile_name_patterns=('Cargo.toml', 'Cargo.lock',),
153154
directory=resource.parent(codebase),
154155
codebase=codebase,
156+
package_adder=package_adder,
155157
)
156158

157159

src/packagedcode/chef.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,15 @@ def format(self, tokens, outfile):
142142
class BaseChefMetadataHandler(models.DatafileHandler):
143143

144144
@classmethod
145-
def assemble(cls, package_data, resource, codebase):
145+
def assemble(cls, package_data, resource, codebase, package_adder):
146146
"""
147147
Assemble Package from Chef metadata.rb, then from metadata.json files.
148148
"""
149149
yield from cls.assemble_from_many_datafiles(
150150
datafile_name_patterns=('metadata.rb', 'metadata.json',),
151151
directory=resource.parent(codebase),
152152
codebase=codebase,
153+
package_adder=package_adder,
153154
)
154155

155156

src/packagedcode/cocoapods.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def get_first_three_md5_hash_characters(podname):
114114
class BasePodHandler(models.DatafileHandler):
115115

116116
@classmethod
117-
def assemble(cls, package_data, resource, codebase):
117+
def assemble(cls, package_data, resource, codebase, package_adder):
118118
"""
119119
Assemble pod packages and dependencies and handle the specific cases where
120120
there are more than one podspec in the same directory.
@@ -147,6 +147,7 @@ def assemble(cls, package_data, resource, codebase):
147147
datafile_name_patterns=datafile_name_patterns,
148148
directory=parent,
149149
codebase=codebase,
150+
package_adder=package_adder,
150151
)
151152

152153
elif has_multiple_podspec:
@@ -160,6 +161,7 @@ def assemble(cls, package_data, resource, codebase):
160161
datafile_name_patterns=datafile_name_patterns,
161162
directory=parent,
162163
codebase=codebase,
164+
package_adder=package_adder,
163165
)
164166

165167
for resource in sibling_podspecs:
@@ -170,7 +172,12 @@ def assemble(cls, package_data, resource, codebase):
170172
package_data=package_data,
171173
datafile_path=datafile_path,
172174
)
173-
cls.assign_package_to_resources(package, resource, codebase)
175+
cls.assign_package_to_resources(
176+
package=package,
177+
resource=resource,
178+
codebase=codebase,
179+
package_adder=package_adder,
180+
)
174181
yield package
175182
yield resource
176183

@@ -180,6 +187,7 @@ def assemble(cls, package_data, resource, codebase):
180187
datafile_name_patterns=datafile_name_patterns,
181188
directory=parent,
182189
codebase=codebase,
190+
package_adder=package_adder,
183191
)
184192

185193

src/packagedcode/conda.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,12 @@ def get_conda_root(cls, resource, codebase):
7070
return resource.parent(codebase)
7171

7272
@classmethod
73-
def assign_package_to_resources(cls, package, resource, codebase):
73+
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
7474
return models.DatafileHandler.assign_package_to_resources(
7575
package=package,
7676
resource=cls.get_conda_root(resource, codebase),
7777
codebase=codebase,
78+
package_adder=package_adder,
7879
)
7980

8081
@classmethod

0 commit comments

Comments
 (0)