diff --git a/chromite/lib/binpkg.py b/chromite/lib/binpkg.py index 40a29dbcd2..48adccb209 100644 --- a/chromite/lib/binpkg.py +++ b/chromite/lib/binpkg.py @@ -51,9 +51,10 @@ class PackageIndex(object): uri = self.header['URI'] for pkg in self.packages: - cpv, sha1 = pkg['CPV'], pkg['SHA1'] - path = pkg.get('PATH', cpv + '.tbz2') - db[sha1] = urlparse.urljoin(uri, path) + cpv, sha1 = pkg['CPV'], pkg.get('SHA1') + if sha1: + path = pkg.get('PATH', cpv + '.tbz2') + db[sha1] = urlparse.urljoin(uri, path) def _ReadPkgIndex(self, pkgfile): """Read a list of key/value pairs from the Packages file into a dictionary. @@ -180,9 +181,9 @@ class PackageIndex(object): uploads = [] base_uri = self.header['URI'] for pkg in self.packages: - sha1 = pkg['SHA1'] + sha1 = pkg.get('SHA1') uri = db.get(sha1) - if uri and uri.startswith(base_uri): + if sha1 and uri and uri.startswith(base_uri): pkg['PATH'] = uri[len(base_uri):].lstrip('/') else: uploads.append(pkg) diff --git a/prebuilt_unittest.py b/prebuilt_unittest.py index 9d26692ccf..4c7255e3c5 100755 --- a/prebuilt_unittest.py +++ b/prebuilt_unittest.py @@ -221,6 +221,15 @@ class TestPopulateDuplicateDB(unittest.TestCase): self.assertEqual(db['2'], 'http://www.example.com/foo.tgz') self.assertEqual(db['3'], 'http://www.example.com/private.tbz2') + def testMissingSHA1(self): + db = {} + pkgindex = SimplePackageIndex() + del pkgindex.packages[0]['SHA1'] + pkgindex._PopulateDuplicateDB(db) + self.assertEqual(len(db), 2) + self.assertEqual(db['2'], 'http://www.example.com/foo.tgz') + self.assertEqual(db['3'], 'http://www.example.com/private.tbz2') + def testFailedPopulate(self): db = {} pkgindex = SimplePackageIndex(header=False) @@ -228,9 +237,6 @@ class TestPopulateDuplicateDB(unittest.TestCase): pkgindex = SimplePackageIndex() del pkgindex.packages[0]['CPV'] self.assertRaises(KeyError, pkgindex._PopulateDuplicateDB, db) - pkgindex = SimplePackageIndex() - del pkgindex.packages[0]['SHA1'] - self.assertRaises(KeyError, pkgindex._PopulateDuplicateDB, db) class TestResolveDuplicateUploads(unittest.TestCase): @@ -261,6 +267,18 @@ class TestResolveDuplicateUploads(unittest.TestCase): uploads = pkgindex.ResolveDuplicateUploads([dup_pkgindex]) self.assertEqual(pkgindex.packages, expected_pkgindex.packages) + def testMissingSHA1(self): + db = {} + pkgindex = SimplePackageIndex() + dup_pkgindex = SimplePackageIndex() + expected_pkgindex = SimplePackageIndex() + del pkgindex.packages[0]['SHA1'] + del expected_pkgindex.packages[0]['SHA1'] + for pkg in expected_pkgindex.packages[1:]: + pkg.setdefault('PATH', pkg['CPV'] + '.tbz2') + uploads = pkgindex.ResolveDuplicateUploads([dup_pkgindex]) + self.assertEqual(pkgindex.packages, expected_pkgindex.packages) + class TestWritePackageIndex(unittest.TestCase):