Exemple #1
0
 def test_get_packages(self):
     self.configure_streams()
     packages = []
     self.driver.get_packages(
         self.connection,
         gen_repository("test", url="http://host/centos/os/x86_64/"),
         packages.append)
     self.connection.open_stream.assert_any_call(
         "http://host/centos/os/x86_64/repodata/repomd.xml")
     self.connection.open_stream.assert_any_call(
         "http://host/centos/os/x86_64/repodata/groups.xml.gz")
     self.connection.open_stream.assert_any_call(
         "http://host/centos/os/x86_64/repodata/primary.xml.gz")
     self.assertEqual(2, len(packages))
     package = packages[0]
     self.assertEqual("test1", package.name)
     self.assertEqual("1.1.1.1-1.el7", package.version)
     self.assertEqual(100, package.filesize)
     self.assertEqual(
         FileChecksum(
             None, None, 'e8ed9e0612e813491ed5e7c10502a39e'
             '43ec665afd1321541dea211202707a65'), package.checksum)
     self.assertEqual("Packages/test1.rpm", package.filename)
     self.assertItemsEqual(['test2 (= 0:1.1.1.1-1.el7)'],
                           (str(x) for x in package.requires))
     self.assertItemsEqual(
         ["file (any)", "/usr/bin/test1 (any)", "/usr/bin/test1-bin (any)"],
         (str(x) for x in package.provides))
     self.assertItemsEqual(["test-old (any)"],
                           (str(x) for x in package.obsoletes))
     self.assertTrue(package.mandatory)
     self.assertFalse(packages[1].mandatory)
Exemple #2
0
 def load_package_from_file(self, repository, filepath):
     fullpath = utils.get_path_from_url(repository.url + filepath)
     _, size, checksum = next(
         iter(
             utils.get_size_and_checksum_for_files([fullpath],
                                                   _checksum_collector)))
     pkg = createrepo.yumbased.YumLocalPackage(filename=fullpath)
     hdr = pkg.returnLocalHeader()
     return Package(
         repository=repository,
         name=hdr["name"],
         version=RpmPackageVersion(hdr['epoch'], hdr['version'],
                                   hdr['release']),
         filesize=int(hdr['size']),
         filename=filepath,
         checksum=FileChecksum(*checksum),
         mandatory=False,
         requires=self._parse_package_relations(pkg.requires),
         obsoletes=self._parse_package_relations(pkg.obsoletes),
         provides=self._get_provides_from_rpm(pkg),
         group=hdr["group"],
     )
    def get_packages(self, connection, repository, consumer):
        index = self._get_url_of_metafile(repository, "Packages.gz")
        stream = GzipDecompress(connection.open_stream(index))
        self.logger.info("loading packages from %s ...", repository)
        pkg_iter = deb822.Packages.iter_paragraphs(stream)
        counter = 0
        for dpkg in pkg_iter:
            try:
                consumer(
                    Package(
                        repository=repository,
                        name=dpkg["package"],
                        version=Version(dpkg['version']),
                        filesize=int(dpkg.get('size', -1)),
                        filename=dpkg["filename"],
                        checksum=FileChecksum(
                            md5=dpkg.get("md5sum"),
                            sha1=dpkg.get("sha1"),
                            sha256=dpkg.get("sha256"),
                        ),
                        mandatory=self._is_mandatory(dpkg),
                        # Recommends are installed by default (since Lucid)
                        requires=self._get_relations(dpkg, "depends",
                                                     "pre-depends",
                                                     "recommends"),
                        # The deb does not have obsoletes section
                        obsoletes=[],
                        provides=self._get_relations(dpkg, "provides"),
                        group=dpkg.get("section"),
                    ))
            except KeyError as e:
                self.logger.error("Malformed index %s - %s: %s", repository,
                                  six.text_type(dpkg), six.text_type(e))
                raise
            counter += 1

        self.logger.info("loaded: %d packages from %s.", counter, repository)
    def load_package_from_file(self, repository, filename):
        filepath = utils.get_path_from_url(repository.url + filename)
        _, size, checksum = next(
            iter(
                utils.get_size_and_checksum_for_files([filepath],
                                                      _checksum_collector)))
        with closing(debfile.DebFile(filepath)) as deb:
            debcontrol = deb822.Packages(
                deb.control.get_content(debfile.CONTROL_FILE))

        return Package(
            repository=repository,
            name=debcontrol["package"],
            version=Version(debcontrol['version']),
            filesize=int(debcontrol.get('size', size)),
            filename=filename,
            checksum=FileChecksum(*checksum),
            mandatory=self._is_mandatory(debcontrol),
            requires=self._get_relations(debcontrol, "depends", "pre-depends",
                                         "recommends"),
            provides=self._get_relations(debcontrol, "provides"),
            obsoletes=[],
            group=debcontrol.get('section'),
        )
Exemple #5
0
 def _get_checksum(self, pkg_tag):
     """Gets checksum from package tag."""
     checksum = dict.fromkeys(("md5", "sha1", "sha256"), None)
     checksum_tag = pkg_tag.find("./main:checksum", _NAMESPACES)
     checksum[checksum_tag.attrib["type"]] = checksum_tag.text
     return FileChecksum(**checksum)