Skip to content

Commit

Permalink
Add package_adder argument to assemble() #3034
Browse files Browse the repository at this point in the history
    * Add test for add_to_package

Signed-off-by: Jono Yang <jyang@nexb.com>
  • Loading branch information
JonoYang committed Aug 2, 2022
1 parent 36e7ffc commit 3b45dc6
Show file tree
Hide file tree
Showing 25 changed files with 204 additions and 140 deletions.
8 changes: 3 additions & 5 deletions src/packagedcode/about.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def parse(cls, location):
)

@classmethod
def assemble(cls, package_data, resource, codebase):
def assemble(cls, package_data, resource, codebase, package_adder):
"""
Yield a Package. Note that ABOUT files do not carry dependencies.
"""
Expand All @@ -122,8 +122,7 @@ def assemble(cls, package_data, resource, codebase):

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

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

yield res

Expand Down
8 changes: 4 additions & 4 deletions src/packagedcode/alpine.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def compute_normalized_license(cls, package):
return detected

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

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

@classmethod
def assign_package_to_resources(cls, package, resource, codebase):
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
models.DatafileHandler.assign_package_to_parent_tree(
package=package,
resource=resource,
codebase=codebase,
package_adder=package_adder,
)


Expand Down
20 changes: 12 additions & 8 deletions src/packagedcode/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,12 @@ def parse(cls, location):
)

@classmethod
def assign_package_to_resources(cls, package, resource, codebase):
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
models.DatafileHandler.assign_package_to_parent_tree(
package=package,
resource=resource,
codebase=codebase,
package_adder=package_adder,
)


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

@classmethod
def assemble(cls, package_data, resource, codebase):
def assemble(cls, package_data, resource, codebase, package_adder):
"""
Given a ``package_data`` PackageData found in the ``resource`` datafile
of the ``codebase``, assemble package their files and dependencies
Expand All @@ -100,6 +101,7 @@ def assemble(cls, package_data, resource, codebase):
package=package,
resource=resource,
codebase=codebase,
package_adder=package_adder
)

yield package
Expand Down Expand Up @@ -175,14 +177,13 @@ def parse(cls, location):
)

@classmethod
def assign_package_to_resources(cls, package, resource, codebase, skip_name=None):
def assign_package_to_resources(cls, package, resource, codebase, package_adder, skip_name=None):
package_uid = package.package_uid
if not package_uid:
return
parent = resource.parent(codebase)
for res in walk_build(resource=parent, codebase=codebase, skip_name=skip_name):
res.for_packages.append(package_uid)
res.save(codebase)
package_adder(package_uid, res, codebase)


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

@classmethod
def assign_package_to_resources(cls, package, resource, codebase, skip_name='BUILD'):
def assign_package_to_resources(cls, package, resource, codebase, package_adder, skip_name='BUILD'):
return super().assign_package_to_resources(
package=package,
resource=resource,
codebase=codebase,
package_adder=package_adder,
skip_name=skip_name,
)

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

@classmethod
def assign_package_to_resources(cls, package, resource, codebase, skip_name='BUCK'):
def assign_package_to_resources(cls, package, resource, codebase, package_adder, skip_name='BUCK'):
return super().assign_package_to_resources(
package=package,
resource=resource,
codebase=codebase,
package_adder=package_adder,
skip_name=skip_name,
)

Expand Down Expand Up @@ -377,9 +380,10 @@ def compute_normalized_license(cls, package):
return models.compute_normalized_license(declared_license)

@classmethod
def assign_package_to_resources(cls, package, resource, codebase):
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
models.DatafileHandler.assign_package_to_parent_tree(
package_=package,
resource=resource,
codebase=codebase,
package_adder=package_adder,
)
3 changes: 2 additions & 1 deletion src/packagedcode/build_gradle.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,12 @@ def parse(cls, location):

# TODO: handle complex cases of nested builds with many packages
@classmethod
def assign_package_to_resources(cls, package, resource, codebase):
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
models.DatafileHandler.assign_package_to_parent_tree(
package=package,
resource=resource,
codebase=codebase,
package_adder=package_adder,
)


Expand Down
6 changes: 4 additions & 2 deletions src/packagedcode/cargo.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,14 +85,15 @@ def parse(cls, location):
)

@classmethod
def assemble(cls, package_data, resource, codebase):
def assemble(cls, package_data, resource, codebase, package_adder):
"""
Assemble Cargo.toml and possible Cargo.lock datafiles
"""
yield from cls.assemble_from_many_datafiles(
datafile_name_patterns=('Cargo.toml', 'cargo.toml', 'Cargo.lock', 'cargo.lock'),
directory=resource.parent(codebase),
codebase=codebase,
package_adder=package_adder,
)


Expand Down Expand Up @@ -144,14 +145,15 @@ def parse(cls, location):
)

@classmethod
def assemble(cls, package_data, resource, codebase):
def assemble(cls, package_data, resource, codebase, package_adder):
"""
Assemble Cargo.toml and possible Cargo.lock datafiles
"""
yield from cls.assemble_from_many_datafiles(
datafile_name_patterns=('Cargo.toml', 'Cargo.lock',),
directory=resource.parent(codebase),
codebase=codebase,
package_adder=package_adder,
)


Expand Down
3 changes: 2 additions & 1 deletion src/packagedcode/chef.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,14 +142,15 @@ def format(self, tokens, outfile):
class BaseChefMetadataHandler(models.DatafileHandler):

@classmethod
def assemble(cls, package_data, resource, codebase):
def assemble(cls, package_data, resource, codebase, package_adder):
"""
Assemble Package from Chef metadata.rb, then from metadata.json files.
"""
yield from cls.assemble_from_many_datafiles(
datafile_name_patterns=('metadata.rb', 'metadata.json',),
directory=resource.parent(codebase),
codebase=codebase,
package_adder=package_adder,
)


Expand Down
12 changes: 10 additions & 2 deletions src/packagedcode/cocoapods.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def get_first_three_md5_hash_characters(podname):
class BasePodHandler(models.DatafileHandler):

@classmethod
def assemble(cls, package_data, resource, codebase):
def assemble(cls, package_data, resource, codebase, package_adder):
"""
Assemble pod packages and dependencies and handle the specific cases where
there are more than one podspec in the same directory.
Expand Down Expand Up @@ -147,6 +147,7 @@ def assemble(cls, package_data, resource, codebase):
datafile_name_patterns=datafile_name_patterns,
directory=parent,
codebase=codebase,
package_adder=package_adder,
)

elif has_multiple_podspec:
Expand All @@ -160,6 +161,7 @@ def assemble(cls, package_data, resource, codebase):
datafile_name_patterns=datafile_name_patterns,
directory=parent,
codebase=codebase,
package_adder=package_adder,
)

for resource in sibling_podspecs:
Expand All @@ -170,7 +172,12 @@ def assemble(cls, package_data, resource, codebase):
package_data=package_data,
datafile_path=datafile_path,
)
cls.assign_package_to_resources(package, resource, codebase)
cls.assign_package_to_resources(
package=package,
resource=resource,
codebase=codebase,
package_adder=package_adder,
)
yield package
yield resource

Expand All @@ -180,6 +187,7 @@ def assemble(cls, package_data, resource, codebase):
datafile_name_patterns=datafile_name_patterns,
directory=parent,
codebase=codebase,
package_adder=package_adder,
)


Expand Down
3 changes: 2 additions & 1 deletion src/packagedcode/conda.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,12 @@ def get_conda_root(cls, resource, codebase):
return resource.parent(codebase)

@classmethod
def assign_package_to_resources(cls, package, resource, codebase):
def assign_package_to_resources(cls, package, resource, codebase, package_adder):
return models.DatafileHandler.assign_package_to_resources(
package=package,
resource=cls.get_conda_root(resource, codebase),
codebase=codebase,
package_adder=package_adder,
)

@classmethod
Expand Down
Loading

0 comments on commit 3b45dc6

Please sign in to comment.