Make Manifest.create() do some basic validation of ebuild
authorZac Medico <zmedico@gentoo.org>
Sun, 4 Nov 2007 18:01:46 +0000 (18:01 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 4 Nov 2007 18:01:46 +0000 (18:01 -0000)
file names like portdbapi.cp_list() would do. (trunk r8423)

svn path=/main/branches/2.1.2/; revision=8424

pym/portage_manifest.py

index cdccbd9fa3b473f64719f844aedfc98bb7d6f174..ccd32ec67a72c792305661f99a909671fe942833 100644 (file)
@@ -443,11 +443,22 @@ class Manifest(object):
                self.__init__(self.pkgdir, self.distdir,
                        fetchlist_dict=self.fetchlist_dict, from_scratch=True,
                        manifest1_compat=self.compat)
+               cpvlist = []
+               pn = os.path.basename(self.pkgdir.rstrip(os.path.sep))
+               cat = self._pkgdir_category()
                for pkgdir, pkgdir_dirs, pkgdir_files in os.walk(self.pkgdir):
                        break
                for f in pkgdir_files:
                        if f.endswith(".ebuild"):
                                mytype = "EBUILD"
+                               pf = f[:-7]
+                               ps = portage_versions.pkgsplit(pf)
+                               cpv = "%s/%s" % (cat, pf)
+                               if not ps:
+                                       raise portage_exception.PortagePackageException(cpv)
+                               if ps[0] != pn:
+                                       raise portage_exception.PortagePackageException(cpv)
+                               cpvlist.append(cpv)
                        elif manifest2MiscfileFilter(f):
                                mytype = "MISC"
                        else:
@@ -464,7 +475,6 @@ class Manifest(object):
                                continue
                        self.fhashdict["AUX"][f] = perform_multiple_checksums(
                                os.path.join(self.pkgdir, "files", f.lstrip(os.sep)), self.hashes)
-               cpvlist = [os.path.join(self._pkgdir_category(), x[:-7]) for x in os.listdir(self.pkgdir) if x.endswith(".ebuild")]
                distlist = set()
                for cpv in cpvlist:
                        distlist.update(self._getCpvDistfiles(cpv))