allow rpminfo.size to be null

This commit is contained in:
Mike McLean 2026-01-13 12:47:03 -05:00
commit 3c78edde1c
5 changed files with 12 additions and 8 deletions

View file

@ -1205,8 +1205,8 @@ def get_rpm_ident(hdr):
def get_rpm_ident_fields(hdr):
"""Extract rpm header fields used for identification"""
# these base fields should always exist
fields = ('name', 'version', 'release', 'epoch', 'arch', 'buildtime', 'size')
# size and buildtime aren't actually used for identification, but they are
fields = ('name', 'version', 'release', 'epoch', 'arch', 'buildtime')
# the buildtime field isn't actually used for identification, but is
# required if the rpm is external
data = get_header_fields(hdr, fields)
# digest fields may vary

View file

@ -7763,13 +7763,15 @@ def add_external_rpm(rpminfo, external_repo, strict=True):
# [!] Calling function should perform access checks
# key required fields and types
rpminfo = rpminfo.copy()
rpminfo.setdefault('size', None)
dtypes = (
('name', str),
('version', str),
('release', str),
('epoch', (int, type(None))),
('arch', str),
('size', int),
('size', (int, type(None))),
('buildtime', int))
data = {}
for field, allowed in dtypes:

View file

@ -25,6 +25,8 @@ CREATE INDEX rpminfo_sigmd5 ON rpminfo(sigmd5);
CREATE INDEX rpminfo_sha1header ON rpminfo(sha1header);
CREATE INDEX rpminfo_sha256header ON rpminfo(sha256header);
CREATE INDEX rpminfo_sha3_256header ON rpminfo(sha3_256header);
-- rpminfo.size can be null
ALTER TABLE rpminfo ALTER COLUMN size DROP NOT NULL;
COMMIT;

View file

@ -807,7 +807,7 @@ CREATE TABLE rpminfo (
sha1header TEXT,
sha256header TEXT,
sha3_256header TEXT,
size BIGINT NOT NULL,
size BIGINT,
buildtime BIGINT NOT NULL,
metadata_only BOOLEAN NOT NULL DEFAULT FALSE,
extra TEXT,

View file

@ -89,22 +89,22 @@ class TestAddExternalRPM(unittest.TestCase):
def test_add_ext_rpm_bad_data(self):
rpminfo = self.rpminfo.copy()
del rpminfo['size']
del rpminfo['buildtime']
with self.assertRaises(koji.GenericError) as ex:
kojihub.add_external_rpm(rpminfo, self.repo)
self.assertEqual(f"size field missing: {rpminfo}", str(ex.exception))
self.assertEqual(f"buildtime field missing: {rpminfo}", str(ex.exception))
self.get_rpm.assert_not_called()
self.nextval.assert_not_called()
self.assertEqual(len(self.inserts), 0)
rpminfo = self.rpminfo.copy()
rpminfo['size'] = ['invalid type']
rpminfo['buildtime'] = ['invalid type']
with self.assertRaises(koji.GenericError) as ex:
kojihub.add_external_rpm(rpminfo, self.repo)
self.assertEqual(f"Invalid value for size: {rpminfo['size']}",
self.assertEqual(f"Invalid value for buildtime: {rpminfo['buildtime']}",
str(ex.exception))
self.get_rpm.assert_not_called()