コード例 #1
0
ファイル: output.py プロジェクト: pombredanne/portage-3
	def verbose_size(self, pkg, repoadd_set, pkg_info):
		"""Determines the size of the downloads required

		@param pkg: _emerge.Package.Package instance
		@param repoadd_set: set of repos to add
		@param pkg_info: dictionary
		Modifies class globals: self.myfetchlist, self.counters.totalsize,
			self.verboseadd, repoadd_set.
		"""
		mysize = 0
		if pkg.type_name in ("binary", "ebuild") and pkg_info.merge:
			db = pkg.root_config.trees[
				pkg.root_config.pkg_tree_map[pkg.type_name]].dbapi
			kwargs = {}
			if pkg.type_name == "ebuild":
				kwargs["useflags"] = pkg_info.use
				kwargs["myrepo"] = pkg.repo
			myfilesdict = None
			try:
				myfilesdict = db.getfetchsizes(pkg.cpv,
					**portage._native_kwargs(kwargs))
			except InvalidDependString as e:
				# FIXME: validate SRC_URI earlier
				depstr, = db.aux_get(pkg.cpv,
					["SRC_URI"], myrepo=pkg.repo)
				show_invalid_depstring_notice(
					pkg, depstr, _unicode(e))
				raise
			except SignatureException:
				# missing/invalid binary package SIZE signature
				pass
			if myfilesdict is None:
				myfilesdict = "[empty/missing/bad digest]"
			else:
				for myfetchfile in myfilesdict:
					if myfetchfile not in self.myfetchlist:
						mysize += myfilesdict[myfetchfile]
						self.myfetchlist.add(myfetchfile)
				if pkg_info.ordered:
					self.counters.totalsize += mysize
			self.verboseadd += _format_size(mysize)

		if self.quiet_repo_display:
			# overlay verbose
			# assign index for a previous version in the same slot
			if pkg_info.previous_pkg is not None:
				repo_name_prev = pkg_info.previous_pkg.repo
			else:
				repo_name_prev = None

			# now use the data to generate output
			if pkg.installed or pkg_info.previous_pkg is None:
				self.repoadd = self.conf.repo_display.repoStr(
					pkg_info.repo_path_real)
			else:
				repo_path_prev = None
				if repo_name_prev:
					repo_path_prev = self.portdb.getRepositoryPath(
						repo_name_prev)
				if repo_path_prev == pkg_info.repo_path_real:
					self.repoadd = self.conf.repo_display.repoStr(
						pkg_info.repo_path_real)
				else:
					self.repoadd = "%s=>%s" % (
						self.conf.repo_display.repoStr(repo_path_prev),
						self.conf.repo_display.repoStr(pkg_info.repo_path_real))
			if self.repoadd:
				repoadd_set.add(self.repoadd)
コード例 #2
0
ファイル: output.py プロジェクト: antarus12345/portage
    def verbose_size(self, pkg, repoadd_set, pkg_info):
        """Determines the size of the downloads required

		@param pkg: _emerge.Package.Package instance
		@param repoadd_set: set of repos to add
		@param pkg_info: dictionary
		Modifies class globals: self.myfetchlist, self.counters.totalsize,
			self.verboseadd, repoadd_set.
		"""
        mysize = 0
        if pkg.type_name in ("binary", "ebuild") and pkg_info.merge:
            db = pkg.root_config.trees[pkg.root_config.pkg_tree_map[
                pkg.type_name]].dbapi
            kwargs = {}
            if pkg.type_name == "ebuild":
                kwargs["useflags"] = pkg_info.use
                kwargs["myrepo"] = pkg.repo
            myfilesdict = None
            try:
                myfilesdict = db.getfetchsizes(pkg.cpv, **kwargs)
            except InvalidDependString as e:
                # FIXME: validate SRC_URI earlier
                depstr, = db.aux_get(pkg.cpv, ["SRC_URI"], myrepo=pkg.repo)
                show_invalid_depstring_notice(pkg, str(e))
                raise
            except SignatureException:
                # missing/invalid binary package SIZE signature
                pass
            if myfilesdict is None:
                myfilesdict = "[empty/missing/bad digest]"
            else:
                for myfetchfile in myfilesdict:
                    if myfetchfile not in self.myfetchlist:
                        mysize += myfilesdict[myfetchfile]
                        self.myfetchlist.add(myfetchfile)
                if pkg_info.ordered:
                    self.counters.totalsize += mysize
            self.verboseadd += localized_size(mysize)

        if self.quiet_repo_display:
            # overlay verbose
            # assign index for a previous version in the same slot
            if pkg_info.previous_pkg is not None:
                repo_name_prev = pkg_info.previous_pkg.repo
            else:
                repo_name_prev = None

            # now use the data to generate output
            if pkg.installed or pkg_info.previous_pkg is None:
                self.repoadd = self.conf.repo_display.repoStr(
                    pkg_info.repo_path_real)
            else:
                repo_path_prev = None
                if repo_name_prev:
                    repo_path_prev = self.portdb.getRepositoryPath(
                        repo_name_prev)
                if repo_path_prev == pkg_info.repo_path_real:
                    self.repoadd = self.conf.repo_display.repoStr(
                        pkg_info.repo_path_real)
                else:
                    self.repoadd = "%s=>%s" % (
                        self.conf.repo_display.repoStr(repo_path_prev),
                        self.conf.repo_display.repoStr(
                            pkg_info.repo_path_real))
            if self.repoadd:
                repoadd_set.add(self.repoadd)
コード例 #3
0
ファイル: BlockerDB.py プロジェクト: Neuvoo/legacy-portage
	def findInstalledBlockers(self, new_pkg, acquire_lock=0):
		blocker_cache = BlockerCache(self._vartree.root, self._vartree.dbapi)
		dep_keys = ["DEPEND", "RDEPEND", "PDEPEND"]
		settings = self._vartree.settings
		stale_cache = set(blocker_cache)
		fake_vartree = self._get_fake_vartree(acquire_lock=acquire_lock)
		dep_check_trees = self._dep_check_trees
		vardb = fake_vartree.dbapi
		installed_pkgs = list(vardb)

		for inst_pkg in installed_pkgs:
			stale_cache.discard(inst_pkg.cpv)
			cached_blockers = blocker_cache.get(inst_pkg.cpv)
			if cached_blockers is not None and \
				cached_blockers.counter != long(inst_pkg.metadata["COUNTER"]):
				cached_blockers = None
			if cached_blockers is not None:
				blocker_atoms = cached_blockers.atoms
			else:
				# Use aux_get() to trigger FakeVartree global
				# updates on *DEPEND when appropriate.
				depstr = " ".join(vardb.aux_get(inst_pkg.cpv, dep_keys))
				success, atoms = portage.dep_check(depstr,
					vardb, settings, myuse=inst_pkg.use.enabled,
					trees=dep_check_trees, myroot=inst_pkg.root)
				if not success:
					pkg_location = os.path.join(inst_pkg.root,
						portage.VDB_PATH, inst_pkg.category, inst_pkg.pf)
					portage.writemsg("!!! %s/*DEPEND: %s\n" % \
						(pkg_location, atoms), noiselevel=-1)
					continue

				blocker_atoms = [atom for atom in atoms \
					if atom.startswith("!")]
				blocker_atoms.sort()
				counter = long(inst_pkg.metadata["COUNTER"])
				blocker_cache[inst_pkg.cpv] = \
					blocker_cache.BlockerData(counter, blocker_atoms)
		for cpv in stale_cache:
			del blocker_cache[cpv]
		blocker_cache.flush()

		blocker_parents = digraph()
		blocker_atoms = []
		for pkg in installed_pkgs:
			for blocker_atom in blocker_cache[pkg.cpv].atoms:
				blocker_atom = blocker_atom.lstrip("!")
				blocker_atoms.append(blocker_atom)
				blocker_parents.add(blocker_atom, pkg)

		blocker_atoms = InternalPackageSet(initial_atoms=blocker_atoms)
		blocking_pkgs = set()
		for atom in blocker_atoms.iterAtomsForPackage(new_pkg):
			blocking_pkgs.update(blocker_parents.parent_nodes(atom))

		# Check for blockers in the other direction.
		depstr = " ".join(new_pkg.metadata[k] for k in dep_keys)
		success, atoms = portage.dep_check(depstr,
			vardb, settings, myuse=new_pkg.use.enabled,
			trees=dep_check_trees, myroot=new_pkg.root)
		if not success:
			# We should never get this far with invalid deps.
			show_invalid_depstring_notice(new_pkg, depstr, atoms)
			assert False

		blocker_atoms = [atom.lstrip("!") for atom in atoms \
			if atom[:1] == "!"]
		if blocker_atoms:
			blocker_atoms = InternalPackageSet(initial_atoms=blocker_atoms)
			for inst_pkg in installed_pkgs:
				try:
					next(blocker_atoms.iterAtomsForPackage(inst_pkg))
				except (portage.exception.InvalidDependString, StopIteration):
					continue
				blocking_pkgs.add(inst_pkg)

		return blocking_pkgs
コード例 #4
0
    def findInstalledBlockers(self, new_pkg, acquire_lock=0):
        blocker_cache = BlockerCache(self._vartree.root, self._vartree.dbapi)
        dep_keys = ["DEPEND", "RDEPEND", "PDEPEND"]
        settings = self._vartree.settings
        stale_cache = set(blocker_cache)
        fake_vartree = self._get_fake_vartree(acquire_lock=acquire_lock)
        dep_check_trees = self._dep_check_trees
        vardb = fake_vartree.dbapi
        installed_pkgs = list(vardb)

        for inst_pkg in installed_pkgs:
            stale_cache.discard(inst_pkg.cpv)
            cached_blockers = blocker_cache.get(inst_pkg.cpv)
            if cached_blockers is not None and \
             cached_blockers.counter != long(inst_pkg.metadata["COUNTER"]):
                cached_blockers = None
            if cached_blockers is not None:
                blocker_atoms = cached_blockers.atoms
            else:
                # Use aux_get() to trigger FakeVartree global
                # updates on *DEPEND when appropriate.
                depstr = " ".join(vardb.aux_get(inst_pkg.cpv, dep_keys))
                success, atoms = portage.dep_check(depstr,
                                                   vardb,
                                                   settings,
                                                   myuse=inst_pkg.use.enabled,
                                                   trees=dep_check_trees,
                                                   myroot=inst_pkg.root)
                if not success:
                    pkg_location = os.path.join(inst_pkg.root,
                                                portage.VDB_PATH,
                                                inst_pkg.category, inst_pkg.pf)
                    portage.writemsg("!!! %s/*DEPEND: %s\n" % \
                     (pkg_location, atoms), noiselevel=-1)
                    continue

                blocker_atoms = [atom for atom in atoms \
                 if atom.startswith("!")]
                blocker_atoms.sort()
                counter = long(inst_pkg.metadata["COUNTER"])
                blocker_cache[inst_pkg.cpv] = \
                 blocker_cache.BlockerData(counter, blocker_atoms)
        for cpv in stale_cache:
            del blocker_cache[cpv]
        blocker_cache.flush()

        blocker_parents = digraph()
        blocker_atoms = []
        for pkg in installed_pkgs:
            for blocker_atom in blocker_cache[pkg.cpv].atoms:
                blocker_atom = blocker_atom.lstrip("!")
                blocker_atoms.append(blocker_atom)
                blocker_parents.add(blocker_atom, pkg)

        blocker_atoms = InternalPackageSet(initial_atoms=blocker_atoms)
        blocking_pkgs = set()
        for atom in blocker_atoms.iterAtomsForPackage(new_pkg):
            blocking_pkgs.update(blocker_parents.parent_nodes(atom))

        # Check for blockers in the other direction.
        depstr = " ".join(new_pkg.metadata[k] for k in dep_keys)
        success, atoms = portage.dep_check(depstr,
                                           vardb,
                                           settings,
                                           myuse=new_pkg.use.enabled,
                                           trees=dep_check_trees,
                                           myroot=new_pkg.root)
        if not success:
            # We should never get this far with invalid deps.
            show_invalid_depstring_notice(new_pkg, depstr, atoms)
            assert False

        blocker_atoms = [atom.lstrip("!") for atom in atoms \
         if atom[:1] == "!"]
        if blocker_atoms:
            blocker_atoms = InternalPackageSet(initial_atoms=blocker_atoms)
            for inst_pkg in installed_pkgs:
                try:
                    next(blocker_atoms.iterAtomsForPackage(inst_pkg))
                except (portage.exception.InvalidDependString, StopIteration):
                    continue
                blocking_pkgs.add(inst_pkg)

        return blocking_pkgs