Exemple #1
0
    def getUseMask(self, pkg=None, stable=None):
        if pkg is None:
            return frozenset(stack_lists(self._usemask_list, incremental=True))

        slot = None
        cp = getattr(pkg, "cp", None)
        if cp is None:
            slot = dep_getslot(pkg)
            repo = dep_getrepo(pkg)
            pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo)
            cp = pkg.cp

        if stable is None:
            stable = self._isStable(pkg)

        usemask = []

        if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
            repos = []
            try:
                repos.extend(repo.name
                             for repo in self.repositories[pkg.repo].masters)
            except KeyError:
                pass
            repos.append(pkg.repo)
            for repo in repos:
                usemask.append(self._repo_usemask_dict.get(repo, {}))
                if stable:
                    usemask.append(self._repo_usestablemask_dict.get(repo, {}))
                cpdict = self._repo_pusemask_dict.get(repo, {}).get(cp)
                if cpdict:
                    pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
                    if pkg_usemask:
                        usemask.extend(pkg_usemask)
                if stable:
                    cpdict = self._repo_pusestablemask_dict.get(repo,
                                                                {}).get(cp)
                    if cpdict:
                        pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
                        if pkg_usemask:
                            usemask.extend(pkg_usemask)

        for i, pusemask_dict in enumerate(self._pusemask_list):
            if self._usemask_list[i]:
                usemask.append(self._usemask_list[i])
            if stable and self._usestablemask_list[i]:
                usemask.append(self._usestablemask_list[i])
            cpdict = pusemask_dict.get(cp)
            if cpdict:
                pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
                if pkg_usemask:
                    usemask.extend(pkg_usemask)
            if stable:
                cpdict = self._pusestablemask_list[i].get(cp)
                if cpdict:
                    pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
                    if pkg_usemask:
                        usemask.extend(pkg_usemask)

        return frozenset(stack_lists(usemask, incremental=True))
Exemple #2
0
	def getUseMask(self, pkg=None, stable=None):
		if pkg is None:
			return frozenset(stack_lists(
				self._usemask_list, incremental=True))

		slot = None
		cp = getattr(pkg, "cp", None)
		if cp is None:
			slot = dep_getslot(pkg)
			repo = dep_getrepo(pkg)
			pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo)
			cp = pkg.cp

		if stable is None:
			stable = self._isStable(pkg)

		usemask = []

		if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
			repos = []
			try:
				repos.extend(repo.name for repo in
					self.repositories[pkg.repo].masters)
			except KeyError:
				pass
			repos.append(pkg.repo)
			for repo in repos:
				usemask.append(self._repo_usemask_dict.get(repo, {}))
				if stable:
					usemask.append(self._repo_usestablemask_dict.get(repo, {}))
				cpdict = self._repo_pusemask_dict.get(repo, {}).get(cp)
				if cpdict:
					pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
					if pkg_usemask:
						usemask.extend(pkg_usemask)
				if stable:
					cpdict = self._repo_pusestablemask_dict.get(repo, {}).get(cp)
					if cpdict:
						pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
						if pkg_usemask:
							usemask.extend(pkg_usemask)

		for i, pusemask_dict in enumerate(self._pusemask_list):
			if self._usemask_list[i]:
				usemask.append(self._usemask_list[i])
			if stable and self._usestablemask_list[i]:
				usemask.append(self._usestablemask_list[i])
			cpdict = pusemask_dict.get(cp)
			if cpdict:
				pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
				if pkg_usemask:
					usemask.extend(pkg_usemask)
			if stable:
				cpdict = self._pusestablemask_list[i].get(cp)
				if cpdict:
					pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
					if pkg_usemask:
						usemask.extend(pkg_usemask)

		return frozenset(stack_lists(usemask, incremental=True))
Exemple #3
0
    def getUseAliases(self, pkg):
        if hasattr(pkg, "eapi") and not eapi_has_use_aliases(pkg.eapi):
            return {}

        cp = getattr(pkg, "cp", None)
        if cp is None:
            slot = dep_getslot(pkg)
            repo = dep_getrepo(pkg)
            pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo)
            cp = pkg.cp

        usealiases = {}

        if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
            repos = []
            try:
                repos.extend(repo.name
                             for repo in self.repositories[pkg.repo].masters)
            except KeyError:
                pass
            repos.append(pkg.repo)
            for repo in repos:
                usealiases_dict = self._repo_usealiases_dict.get(repo, {})
                for real_flag, aliases in usealiases_dict.items():
                    for alias in aliases:
                        if any(alias in v for k, v in usealiases.items()
                               if k != real_flag):
                            writemsg(
                                _("--- Duplicated USE flag alias for '%s%s%s': '%s'\n"
                                  ) %
                                (pkg.cpv, _repo_separator, pkg.repo, alias),
                                noiselevel=-1,
                            )
                        else:
                            usealiases.setdefault(real_flag, []).append(alias)
                cp_usealiases_dict = self._repo_pusealiases_dict.get(
                    repo, {}).get(cp)
                if cp_usealiases_dict:
                    usealiases_dict_list = ordered_by_atom_specificity(
                        cp_usealiases_dict, pkg)
                    for usealiases_dict in usealiases_dict_list:
                        for real_flag, aliases in usealiases_dict.items():
                            for alias in aliases:
                                if any(alias in v
                                       for k, v in usealiases.items()
                                       if k != real_flag):
                                    writemsg(
                                        _("--- Duplicated USE flag alias for '%s%s%s': '%s'\n"
                                          ) % (pkg.cpv, _repo_separator,
                                               pkg.repo, alias),
                                        noiselevel=-1,
                                    )
                                else:
                                    usealiases.setdefault(real_flag,
                                                          []).append(alias)

        return usealiases
Exemple #4
0
    def getUseAliases(self, pkg):
        if hasattr(pkg, "eapi") and not eapi_has_use_aliases(pkg.eapi):
            return {}

        cp = getattr(pkg, "cp", None)
        if cp is None:
            slot = dep_getslot(pkg)
            repo = dep_getrepo(pkg)
            pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo)
            cp = pkg.cp

        usealiases = {}

        if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
            repos = []
            try:
                if self.repositories[pkg.repo].use_aliases_masters is not None:
                    masters = self.repositories[pkg.repo].use_aliases_masters
                else:
                    masters = self.repositories[pkg.repo].masters
                repos.extend(repo.name for repo in masters)
            except KeyError:
                pass
            repos.append(pkg.repo)
            for repo in repos:
                usealiases_dict = self._repo_usealiases_dict.get(repo, {})
                for real_flag, aliases in usealiases_dict.items():
                    for alias in aliases:
                        if any(alias in v for k, v in usealiases.items() if k != real_flag):
                            writemsg(
                                _("--- Duplicated USE flag alias for '%s%s%s': '%s'\n")
                                % (pkg.cpv, _repo_separator, pkg.repo, alias),
                                noiselevel=-1,
                            )
                        else:
                            usealiases.setdefault(real_flag, []).append(alias)
                cp_usealiases_dict = self._repo_pusealiases_dict.get(repo, {}).get(cp)
                if cp_usealiases_dict:
                    usealiases_dict_list = ordered_by_atom_specificity(cp_usealiases_dict, pkg)
                    for usealiases_dict in usealiases_dict_list:
                        for real_flag, aliases in usealiases_dict.items():
                            for alias in aliases:
                                if any(alias in v for k, v in usealiases.items() if k != real_flag):
                                    writemsg(
                                        _("--- Duplicated USE flag alias for '%s%s%s': '%s'\n")
                                        % (pkg.cpv, _repo_separator, pkg.repo, alias),
                                        noiselevel=-1,
                                    )
                                else:
                                    usealiases.setdefault(real_flag, []).append(alias)

        return usealiases
Exemple #5
0
 def getPUSE(self, pkg):
     cp = getattr(pkg, "cp", None)
     if cp is None:
         slot = dep_getslot(pkg)
         repo = dep_getrepo(pkg)
         pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo)
         cp = pkg.cp
     ret = ""
     cpdict = self._pusedict.get(cp)
     if cpdict:
         puse_matches = ordered_by_atom_specificity(cpdict, pkg)
         if puse_matches:
             puse_list = []
             for x in puse_matches:
                 puse_list.extend(x)
             ret = " ".join(puse_list)
     return ret
Exemple #6
0
	def getPUSE(self, pkg):
		cp = getattr(pkg, "cp", None)
		if cp is None:
			slot = dep_getslot(pkg)
			repo = dep_getrepo(pkg)
			pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo)
			cp = pkg.cp
		ret = ""
		cpdict = self._pusedict.get(cp)
		if cpdict:
			puse_matches = ordered_by_atom_specificity(cpdict, pkg)
			if puse_matches:
				puse_list = []
				for x in puse_matches:
					puse_list.extend(x)
				ret = " ".join(puse_list)
		return ret
	def testDepGetRepo(self):

		repo_char = "::"
		repos = ("a", "repo-name", "repo_name", "repo123", None)
		cpvs = ["sys-apps/portage"]
		versions = ["2.1.1", "2.1-r1", None]
		uses = ["[use]", None]
		for cpv in cpvs:
			for version in versions:
				for use in uses:
					for repo in repos:
						pkg = cpv
						if version:
							pkg = '=' + pkg + '-' + version
						if repo is not None:
							pkg = pkg + repo_char + repo
						if use:
							pkg = pkg + use
						self.assertEqual(dep_getrepo(pkg), repo)
Exemple #8
0
    def getUseForce(self, pkg=None):
        if pkg is None:
            return frozenset(stack_lists(self._useforce_list,
                                         incremental=True))

        cp = getattr(pkg, "cp", None)
        if cp is None:
            slot = dep_getslot(pkg)
            repo = dep_getrepo(pkg)
            pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo)
            cp = pkg.cp

        try:
            stable = pkg.stable
        except AttributeError:
            # KEYWORDS is unavailable (prior to "depend" phase)
            stable = False

        useforce = []

        if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
            repos = []
            try:
                repos.extend(repo.name
                             for repo in self.repositories[pkg.repo].masters)
            except KeyError:
                pass
            repos.append(pkg.repo)
            for repo in repos:
                useforce.append(self._repo_useforce_dict.get(repo, {}))
                if stable:
                    useforce.append(
                        self._repo_usestableforce_dict.get(repo, {}))
                cpdict = self._repo_puseforce_dict.get(repo, {}).get(cp)
                if cpdict:
                    pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
                    if pkg_useforce:
                        useforce.extend(pkg_useforce)
                if stable:
                    cpdict = self._repo_pusestableforce_dict.get(repo,
                                                                 {}).get(cp)
                    if cpdict:
                        pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
                        if pkg_useforce:
                            useforce.extend(pkg_useforce)

        for i, puseforce_dict in enumerate(self._puseforce_list):
            if self._useforce_list[i]:
                useforce.append(self._useforce_list[i])
            if stable and self._usestableforce_list[i]:
                useforce.append(self._usestableforce_list[i])
            cpdict = puseforce_dict.get(cp)
            if cpdict:
                pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
                if pkg_useforce:
                    useforce.extend(pkg_useforce)
            if stable:
                cpdict = self._pusestableforce_list[i].get(cp)
                if cpdict:
                    pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
                    if pkg_useforce:
                        useforce.extend(pkg_useforce)

        return frozenset(stack_lists(useforce, incremental=True))
Exemple #9
0
	def getUseForce(self, pkg=None):
		if pkg is None:
			return frozenset(stack_lists(
				self._useforce_list, incremental=True))

		cp = getattr(pkg, "cp", None)
		if cp is None:
			slot = dep_getslot(pkg)
			repo = dep_getrepo(pkg)
			pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo)
			cp = pkg.cp

		try:
			stable = pkg.stable
		except AttributeError:
			# KEYWORDS is unavailable (prior to "depend" phase)
			stable = False

		useforce = []

		if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
			repos = []
			try:
				repos.extend(repo.name for repo in
					self.repositories[pkg.repo].masters)
			except KeyError:
				pass
			repos.append(pkg.repo)
			for repo in repos:
				useforce.append(self._repo_useforce_dict.get(repo, {}))
				if stable:
					useforce.append(self._repo_usestableforce_dict.get(repo, {}))
				cpdict = self._repo_puseforce_dict.get(repo, {}).get(cp)
				if cpdict:
					pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
					if pkg_useforce:
						useforce.extend(pkg_useforce)
				if stable:
					cpdict = self._repo_pusestableforce_dict.get(repo, {}).get(cp)
					if cpdict:
						pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
						if pkg_useforce:
							useforce.extend(pkg_useforce)

		for i, puseforce_dict in enumerate(self._puseforce_list):
			if self._useforce_list[i]:
				useforce.append(self._useforce_list[i])
			if stable and self._usestableforce_list[i]:
				useforce.append(self._usestableforce_list[i])
			cpdict = puseforce_dict.get(cp)
			if cpdict:
				pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
				if pkg_useforce:
					useforce.extend(pkg_useforce)
			if stable:
				cpdict = self._pusestableforce_list[i].get(cp)
				if cpdict:
					pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
					if pkg_useforce:
						useforce.extend(pkg_useforce)

		return frozenset(stack_lists(useforce, incremental=True))