Skip to content

Commit 600808c

Browse files
Support ubuntu copyright file edge cases
Signed-off-by: Ayan Sinha Mahapatra <[email protected]>
1 parent d6b39ed commit 600808c

File tree

2 files changed

+32
-22
lines changed

2 files changed

+32
-22
lines changed

minecode/utils.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,25 @@ def get_package_sha1(package, field="repository_download_url"):
264264
return sha1
265265

266266

267+
def fetch_and_write_file_from_url(url):
268+
"""
269+
Fetches a file from the `url` and returns the location for the
270+
temporary file. Return None if the url is not reachable.
271+
"""
272+
response = requests.get(url)
273+
if not response.ok:
274+
return None
275+
276+
metadata_content = response.text
277+
filename = url.split("/")[-1]
278+
file_name, _, extension = filename.rpartition(".")
279+
temp_metadata_file = get_temp_file(file_name=file_name, extension=extension)
280+
with open(temp_metadata_file, 'a') as metadata_file:
281+
metadata_file.write(metadata_content)
282+
283+
return temp_metadata_file
284+
285+
267286
def validate_sha1(sha1):
268287
"""
269288
Validate a `sha1` string.

minecode/visitors/debian.py

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from minecode.visitors import HttpVisitor
3232
from minecode.visitors import NonPersistentHttpVisitor
3333
from minecode.visitors import URI
34-
from minecode.utils import get_temp_file
34+
from minecode.utils import fetch_and_write_file_from_url
3535
from minecode.utils import get_package_sha1
3636
from packagedb.models import make_relationship
3737
from packagedb.models import PackageContentType
@@ -426,20 +426,13 @@ def get_debian_package_metadata(debian_package):
426426
error = ''
427427

428428
metadata_url = debian_package.package_metadata_url
429-
response = requests.get(metadata_url)
430-
if not response.ok:
431-
msg = f'Package metadata not exist on debian: {metadata_url}'
429+
temp_metadata_file = fetch_and_write_file_from_url(url=metadata_url)
430+
if not temp_metadata_file:
431+
msg = f'Package metadata does not exist on debian: {metadata_url}'
432432
error += msg + '\n'
433433
logger.error(msg)
434434
return None, error
435435

436-
metadata_content = response.text
437-
filename = metadata_url.split("/")[-1]
438-
file_name, _, extension = filename.rpartition(".")
439-
temp_metadata_file = get_temp_file(file_name=file_name, extension=extension)
440-
with open(temp_metadata_file, 'a') as metadata_file:
441-
metadata_file.write(metadata_content)
442-
443436
packages = DebianDscFileHandler.parse(location=temp_metadata_file)
444437
package = list(packages).pop()
445438

@@ -454,20 +447,13 @@ def get_debian_package_copyright(debian_package):
454447
error = ''
455448

456449
metadata_url = debian_package.package_copyright_url
457-
response = requests.get(metadata_url)
458-
if not response.ok:
450+
temp_metadata_file = fetch_and_write_file_from_url(url=metadata_url)
451+
if not temp_metadata_file:
459452
msg = f'Package metadata does not exist on debian: {metadata_url}'
460453
error += msg + '\n'
461454
logger.error(msg)
462455
return None, error
463456

464-
metadata_content = response.text
465-
filename = metadata_url.split("/")[-1]
466-
file_name, _, extension = filename.rpartition(".")
467-
temp_metadata_file = get_temp_file(file_name=file_name, extension=extension)
468-
with open(temp_metadata_file, 'a') as metadata_file:
469-
metadata_file.write(metadata_content)
470-
471457
packages = StandaloneDebianCopyrightFileHandler.parse(location=temp_metadata_file)
472458
package = list(packages).pop()
473459

@@ -636,6 +622,11 @@ def package_metadata_url(self):
636622

637623
@property
638624
def package_copyright_url(self):
625+
# Copyright files for ubuntu are named just `copyright` and placed under a name-version folder
626+
# instead of having the name-version in the copyright file itself
627+
copyright_file_string = "_copyright"
628+
if self.package_url.namespace == "ubuntu":
629+
copyright_file_string = "/copyright"
639630

640631
metadata_version = self.package_archive_version
641632
if not self.source_package_url:
@@ -645,11 +636,11 @@ def package_copyright_url(self):
645636
if self.source_package_url.version:
646637
metadata_version = self.source_package_url.version
647638

648-
copyright_package_url = self.metadata_directory_url + f"{metadata_package_name}_{metadata_version}_copyright"
639+
copyright_package_url = self.metadata_directory_url + f"{metadata_package_name}_{metadata_version}{copyright_file_string}"
649640
response = requests.get(copyright_package_url)
650641
if not response.ok:
651642
base_version_metadata = metadata_version.split('+')[0]
652-
copyright_package_url = self.metadata_directory_url + f"{metadata_package_name}_{base_version_metadata}_copyright"
643+
copyright_package_url = self.metadata_directory_url + f"{metadata_package_name}_{base_version_metadata}{copyright_file_string}"
653644

654645
return copyright_package_url
655646

0 commit comments

Comments
 (0)