Ejemplo n.º 1
0
    def _recursive_update(self, dependencies):
        packages_list = set()
        for candidate in self.packages:
            packages_list.add(candidate.name)

        for dependency in dependencies:
            # If not present, download and recurse
            if dependency[0][0] not in packages_list:
                filename = self._download_single_deb(dependency[0][0])
                if filename:
                    version = re.findall('.*_(.*)_', filename)[0]
                    debfile = apt.debfile.DebPackage(self.deb_dir + filename, self.cache)
                    self.packages.add(Package(debfile.pkgname,
                                              version,
                                              self.deb_dir + filename,
                                              dependencies=debfile.depends))
                    self._recursive_update(debfile.depends)
            # If present, update and recurse
            # Beware of multiple versions
            else:
                working_set = set()
                latest = None
                for package in self.packages:
                    if package.name == dependency[0][0]:
                        if self.cache.has_key(package.name):
                            working_set.add(package)
                        else:
                            print("Package '" + package.name + "' not found in cache.")
                if len(working_set) > 0:
                    for package in working_set:
                        if latest is None:
                            latest = package
                        else:
                            if apt_pkg.version_compare(package.version, latest.version) > 0:
                                latest = package

                    debfile = apt.debfile.DebPackage(latest.filename, self.cache)
                    status = debfile.compare_to_version_in_cache(use_installed=False)
                    if status == 1:
                        uri = self.cache[latest.name].candidate.uri
                        print("Updating '" + latest.name + "' from " + latest.version + " to " + self.cache[latest.name].candidate.version + " :")
                        subprocess.call(["curl", "-O", "-#", uri])
                        filename = uri.split("/")[-1]
                        updated_debfile = apt.debfile.DebPackage(self.deb_dir + filename, self.cache)
                        self.packages.add(Package(updated_debfile.pkgname,
                                                  self.cache[latest.name].candidate.version,
                                                  self.deb_dir + filename,
                                                  dependencies=updated_debfile.depends))
                        self._recursive_update(updated_debfile.depends)
Ejemplo n.º 2
0
    def update_dependencies(self, filename=None):
        # TODO : feed the update with a file containing packages, and only
        #        download top level packages
        if filename:
            with open(filename, 'r') as f:
                packages_list = f.read().split("\n")
                packages_list.pop()
            self._get_missing_packages(packages_list)
            self.build_package_list()

        packages_to_update = self.top_level_packages

        for deb_filename in packages_to_update:
            debfile = apt.debfile.DebPackage(deb_filename, self.cache)

            # TODO : Change this (dirty)

            if self.cache.has_key(debfile.pkgname):
                status = debfile.compare_to_version_in_cache(use_installed=False)
                if status == 1:
                    uri = self.cache[debfile.pkgname].candidate.uri
                    print("Updating '" + debfile.pkgname + "' to " + self.cache[debfile.pkgname].candidate.version + " :")
                    subprocess.call(["curl", "-O", "-#", uri])
                    filename = uri.split("/")[-1]
                    updated_debfile = apt.debfile.DebPackage(self.deb_dir + filename, self.cache)
                    self.packages.add(Package(updated_debfile.pkgname,
                                              self.cache[debfile.pkgname].candidate.version,
                                              self.deb_dir + filename,
                                              dependencies=updated_debfile.depends))
            else:
                print("Package '" + debfile.pkgname + "' not found in cache.")


            self._recursive_update(debfile.depends)

        self._refresh_parents()