예제 #1
0
	def __init__(self, profiles, abs_user_config, user_config=True,
				global_accept_keywords=""):
		self._pkeywords_list = []
		rawpkeywords = [grabdict_package(
			os.path.join(x.location, "package.keywords"),
			recursive=x.portage1_directories,
			verify_eapi=True, eapi=x.eapi, eapi_default=None,
			allow_build_id=x.allow_build_id)
			for x in profiles]
		for pkeyworddict in rawpkeywords:
			if not pkeyworddict:
				# Omit non-existent files from the stack.
				continue
			cpdict = {}
			for k, v in pkeyworddict.items():
				cpdict.setdefault(k.cp, {})[k] = v
			self._pkeywords_list.append(cpdict)
		self._pkeywords_list = tuple(self._pkeywords_list)

		self._p_accept_keywords = []
		raw_p_accept_keywords = [grabdict_package(
			os.path.join(x.location, "package.accept_keywords"),
			recursive=x.portage1_directories,
			verify_eapi=True, eapi=x.eapi, eapi_default=None)
			for x in profiles]
		for d in raw_p_accept_keywords:
			if not d:
				# Omit non-existent files from the stack.
				continue
			cpdict = {}
			for k, v in d.items():
				cpdict.setdefault(k.cp, {})[k] = tuple(v)
			self._p_accept_keywords.append(cpdict)
		self._p_accept_keywords = tuple(self._p_accept_keywords)

		self.pkeywordsdict = ExtendedAtomDict(dict)

		if user_config:
			pkgdict = grabdict_package(
				os.path.join(abs_user_config, "package.keywords"),
				recursive=1, allow_wildcard=True, allow_repo=True,
				verify_eapi=False, allow_build_id=True)

			for k, v in grabdict_package(
				os.path.join(abs_user_config, "package.accept_keywords"),
				recursive=1, allow_wildcard=True, allow_repo=True,
				verify_eapi=False, allow_build_id=True).items():
				pkgdict.setdefault(k, []).extend(v)

			accept_keywords_defaults = global_accept_keywords.split()
			accept_keywords_defaults = tuple('~' + keyword for keyword in \
				accept_keywords_defaults if keyword[:1] not in "~-")
			for k, v in pkgdict.items():
				# default to ~arch if no specific keyword is given
				if not v:
					v = accept_keywords_defaults
				else:
					v = tuple(v)
				self.pkeywordsdict.setdefault(k.cp, {})[k] = v
예제 #2
0
	def __init__(self, profiles, abs_user_config, user_config=True,
				global_accept_keywords=""):
		self._pkeywords_list = []
		rawpkeywords = [grabdict_package(
			os.path.join(x.location, "package.keywords"),
			recursive=x.portage1_directories,
			verify_eapi=True, eapi=x.eapi, eapi_default=None,
			allow_build_id=x.allow_build_id)
			for x in profiles]
		for pkeyworddict in rawpkeywords:
			if not pkeyworddict:
				# Omit non-existent files from the stack.
				continue
			cpdict = {}
			for k, v in pkeyworddict.items():
				cpdict.setdefault(k.cp, {})[k] = v
			self._pkeywords_list.append(cpdict)
		self._pkeywords_list = tuple(self._pkeywords_list)

		self._p_accept_keywords = []
		raw_p_accept_keywords = [grabdict_package(
			os.path.join(x.location, "package.accept_keywords"),
			recursive=x.portage1_directories,
			verify_eapi=True, eapi=x.eapi, eapi_default=None)
			for x in profiles]
		for d in raw_p_accept_keywords:
			if not d:
				# Omit non-existent files from the stack.
				continue
			cpdict = {}
			for k, v in d.items():
				cpdict.setdefault(k.cp, {})[k] = tuple(v)
			self._p_accept_keywords.append(cpdict)
		self._p_accept_keywords = tuple(self._p_accept_keywords)

		self.pkeywordsdict = ExtendedAtomDict(dict)

		if user_config:
			pkgdict = grabdict_package(
				os.path.join(abs_user_config, "package.keywords"),
				recursive=1, allow_wildcard=True, allow_repo=True,
				verify_eapi=False)

			for k, v in grabdict_package(
				os.path.join(abs_user_config, "package.accept_keywords"),
				recursive=1, allow_wildcard=True, allow_repo=True,
				verify_eapi=False).items():
				pkgdict.setdefault(k, []).extend(v)

			accept_keywords_defaults = global_accept_keywords.split()
			accept_keywords_defaults = tuple('~' + keyword for keyword in \
				accept_keywords_defaults if keyword[:1] not in "~-")
			for k, v in pkgdict.items():
				# default to ~arch if no specific keyword is given
				if not v:
					v = accept_keywords_defaults
				else:
					v = tuple(v)
				self.pkeywordsdict.setdefault(k.cp, {})[k] = v
예제 #3
0
    def _parse_user_files_to_extatomdict(self, file_name, location,
                                         user_config):
        ret = ExtendedAtomDict(dict)
        if user_config:
            pusedict = grabdict_package(os.path.join(location, file_name),
                                        recursive=1,
                                        newlines=1,
                                        allow_wildcard=True,
                                        allow_repo=True,
                                        verify_eapi=False,
                                        allow_build_id=True,
                                        allow_use=False)
            for k, v in pusedict.items():
                l = []
                use_expand_prefix = ''
                for flag in v:
                    if flag == "\n":
                        use_expand_prefix = ""
                        continue
                    if flag[-1] == ":":
                        use_expand_prefix = flag[:-1].lower() + "_"
                        continue
                    if flag[0] == "-":
                        nv = "-" + use_expand_prefix + flag[1:]
                    else:
                        nv = use_expand_prefix + flag
                    l.append(nv)
                ret.setdefault(k.cp, {})[k] = tuple(l)

        return ret
예제 #4
0
	def _parse_file_to_dict(self, file_name, juststrings=False, recursive=True, eapi_filter=None):
		ret = {}
		location_dict = {}
		file_dict = grabdict_package(file_name, recursive=recursive, verify_eapi=True)
		eapi = read_corresponding_eapi_file(file_name)
		if eapi_filter is not None and not eapi_filter(eapi):
			if file_dict:
				writemsg(_("--- EAPI '%s' does not support '%s': '%s'\n") %
					(eapi, os.path.basename(file_name), file_name),
					noiselevel=-1)
			return ret
		useflag_re = _get_useflag_re(eapi)
		for k, v in file_dict.items():
			useflags = []
			for prefixed_useflag in v:
				if prefixed_useflag[:1] == "-":
					useflag = prefixed_useflag[1:]
				else:
					useflag = prefixed_useflag
				if useflag_re.match(useflag) is None:
					writemsg(_("--- Invalid USE flag for '%s' in '%s': '%s'\n") %
						(k, file_name, prefixed_useflag), noiselevel=-1)
				else:
					useflags.append(prefixed_useflag)
			location_dict.setdefault(k, []).extend(useflags)
		for k, v in location_dict.items():
			if juststrings:
				v = " ".join(v)
			else:
				v = tuple(v)
			ret.setdefault(k.cp, {})[k] = v
		return ret
예제 #5
0
	def _parse_file_to_dict(self, file_name, juststrings=False, recursive=True):
		ret = {}
		location_dict = {}
		file_dict = grabdict_package(file_name, recursive=recursive, verify_eapi=True)
		eapi = read_corresponding_eapi_file(file_name)
		useflag_re = _get_useflag_re(eapi)
		for k, v in file_dict.items():
			useflags = []
			for prefixed_useflag in v:
				if prefixed_useflag[:1] == "-":
					useflag = prefixed_useflag[1:]
				else:
					useflag = prefixed_useflag
				if useflag_re.match(useflag) is None:
					writemsg(_("--- Invalid USE flag for '%s' in '%s': '%s'\n") %
						(k, file_name, prefixed_useflag), noiselevel=-1)
				else:
					useflags.append(prefixed_useflag)
			location_dict.setdefault(k, []).extend(useflags)
		for k, v in location_dict.items():
			if juststrings:
				v = " ".join(v)
			else:
				v = tuple(v)
			ret.setdefault(k.cp, {})[k] = v
		return ret
예제 #6
0
	def _parse_user_files_to_extatomdict(self, file_name, location, user_config):
		ret = ExtendedAtomDict(dict)
		if user_config:
			pusedict = grabdict_package(
				os.path.join(location, file_name),
				recursive=1, newlines=1, allow_wildcard=True,
				allow_repo=True, verify_eapi=False,
				allow_build_id=True, allow_use=False)
			for k, v in pusedict.items():
				l = []
				use_expand_prefix = ''
				for flag in v:
					if flag == "\n":
						use_expand_prefix = ""
						continue
					if flag[-1] == ":":
						use_expand_prefix = flag[:-1].lower() + "_"
						continue
					if flag[0] == "-":
						nv = "-" + use_expand_prefix + flag[1:]
					else:
						nv = use_expand_prefix + flag
					l.append(nv)
				ret.setdefault(k.cp, {})[k] = tuple(l)

		return ret
예제 #7
0
 def _read_user_config(self, abs_user_config):
     licdict = grabdict_package(os.path.join(abs_user_config,
                                             "package.license"),
                                recursive=1,
                                allow_wildcard=True)
     for k, v in licdict.items():
         self._plicensedict.setdefault(k.cp, {})[k] = \
          self.expandLicenseTokens(v)
예제 #8
0
	def _parse_user_files_to_extatomdict(self, file_name, location, user_config):
		ret = ExtendedAtomDict(dict)
		if user_config:
			pusedict = grabdict_package(
				os.path.join(location, file_name), recursive=1, allow_wildcard=True, allow_repo=True, verify_eapi=False)
			for k, v in pusedict.items():
				ret.setdefault(k.cp, {})[k] = tuple(v)

		return ret
예제 #9
0
	def _parse_user_files_to_extatomdict(self, file_name, location, user_config):
		ret = ExtendedAtomDict(dict)
		if user_config:
			pusedict = grabdict_package(
				os.path.join(location, file_name), recursive=1, allow_wildcard=True, allow_repo=True, verify_eapi=False)
			for k, v in pusedict.items():
				ret.setdefault(k.cp, {})[k] = tuple(v)

		return ret
예제 #10
0
	def _parse_profile_files_to_dict(self, file_name, locations, juststrings=False):
		ret = []
		raw = [grabdict_package(os.path.join(x, file_name),
			juststrings=juststrings, recursive=1) for x in locations]
		for rawdict in raw:
			cpdict = {}
			for k, v in rawdict.items():
				cpdict.setdefault(k.cp, {})[k] = v
			ret.append(cpdict)
		return ret
예제 #11
0
 def _parse_file_to_dict(self,
                         file_name,
                         juststrings=False,
                         recursive=True,
                         eapi_filter=None,
                         user_config=False):
     ret = {}
     location_dict = {}
     eapi = read_corresponding_eapi_file(file_name, default=None)
     if eapi is None and not user_config:
         eapi = "0"
     if eapi is None:
         ret = ExtendedAtomDict(dict)
     else:
         ret = {}
     file_dict = grabdict_package(file_name,
                                  recursive=recursive,
                                  allow_wildcard=(eapi is None),
                                  allow_repo=(eapi is None),
                                  verify_eapi=(eapi is not None))
     if eapi is not None and eapi_filter is not None and not eapi_filter(
             eapi):
         if file_dict:
             writemsg(_("--- EAPI '%s' does not support '%s': '%s'\n") %
                      (eapi, os.path.basename(file_name), file_name),
                      noiselevel=-1)
         return ret
     useflag_re = _get_useflag_re(eapi)
     for k, v in file_dict.items():
         useflags = []
         for prefixed_useflag in v:
             if prefixed_useflag[:1] == "-":
                 useflag = prefixed_useflag[1:]
             else:
                 useflag = prefixed_useflag
             if useflag_re.match(useflag) is None:
                 writemsg(
                     _("--- Invalid USE flag for '%s' in '%s': '%s'\n") %
                     (k, file_name, prefixed_useflag),
                     noiselevel=-1)
             else:
                 useflags.append(prefixed_useflag)
         location_dict.setdefault(k, []).extend(useflags)
     for k, v in location_dict.items():
         if juststrings:
             v = " ".join(v)
         else:
             v = tuple(v)
         ret.setdefault(k.cp, {})[k] = v
     return ret
예제 #12
0
 def _parse_profile_files_to_dict(self,
                                  file_name,
                                  locations,
                                  juststrings=False):
     ret = []
     raw = [
         grabdict_package(os.path.join(x, file_name),
                          juststrings=juststrings,
                          recursive=1) for x in locations
     ]
     for rawdict in raw:
         cpdict = {}
         for k, v in rawdict.items():
             cpdict.setdefault(k.cp, {})[k] = v
         ret.append(cpdict)
     return ret
예제 #13
0
    def _parse_file_to_dict(self,
                            file_name,
                            juststrings=False,
                            recursive=True,
                            eapi_filter=None,
                            user_config=False,
                            eapi=None,
                            eapi_default="0",
                            allow_build_id=False):
        """
		@param file_name: input file name
		@type file_name: str
		@param juststrings: store dict values as space-delimited strings
			instead of tuples
		@type juststrings: bool
		@param recursive: triggers recursion if the input file is a
			directory
		@type recursive: bool
		@param eapi_filter: a function that accepts a single eapi
			argument, and returns true if the the current file type
			is supported by the given EAPI
		@type eapi_filter: callable
		@param user_config: current file is part of the local
			configuration (not repository content)
		@type user_config: bool
		@param eapi: the EAPI of the current profile node, which allows
			a call to read_corresponding_eapi_file to be skipped
		@type eapi: str
		@param eapi_default: the default EAPI which applies if the
			current profile node does not define a local EAPI
		@type eapi_default: str
		@param allow_build_id: allow atoms to specify a particular
			build-id
		@type allow_build_id: bool
		@rtype: tuple
		@return: collection of USE flags
		"""
        ret = {}
        location_dict = {}
        if eapi is None:
            eapi = read_corresponding_eapi_file(file_name,
                                                default=eapi_default)
        extended_syntax = eapi is None and user_config
        if extended_syntax:
            ret = ExtendedAtomDict(dict)
        else:
            ret = {}
        file_dict = grabdict_package(file_name,
                                     recursive=recursive,
                                     allow_wildcard=extended_syntax,
                                     allow_repo=extended_syntax,
                                     verify_eapi=(not extended_syntax),
                                     eapi=eapi,
                                     eapi_default=eapi_default,
                                     allow_build_id=allow_build_id,
                                     allow_use=False)
        if eapi is not None and eapi_filter is not None and not eapi_filter(
                eapi):
            if file_dict:
                writemsg(_("--- EAPI '%s' does not support '%s': '%s'\n") %
                         (eapi, os.path.basename(file_name), file_name),
                         noiselevel=-1)
            return ret
        useflag_re = _get_useflag_re(eapi)
        for k, v in file_dict.items():
            useflags = []
            use_expand_prefix = ''
            for prefixed_useflag in v:
                if extended_syntax and prefixed_useflag == "\n":
                    use_expand_prefix = ""
                    continue
                if extended_syntax and prefixed_useflag[-1] == ":":
                    use_expand_prefix = prefixed_useflag[:-1].lower() + "_"
                    continue

                if prefixed_useflag[:1] == "-":
                    useflag = use_expand_prefix + prefixed_useflag[1:]
                    prefixed_useflag = "-" + useflag
                else:
                    useflag = use_expand_prefix + prefixed_useflag
                    prefixed_useflag = useflag
                if useflag_re.match(useflag) is None:
                    writemsg(
                        _("--- Invalid USE flag for '%s' in '%s': '%s'\n") %
                        (k, file_name, prefixed_useflag),
                        noiselevel=-1)
                else:
                    useflags.append(prefixed_useflag)
            location_dict.setdefault(k, []).extend(useflags)
        for k, v in location_dict.items():
            if juststrings:
                v = " ".join(v)
            else:
                v = tuple(v)
            ret.setdefault(k.cp, {})[k] = v
        return ret
예제 #14
0
	def _read_user_config(self, abs_user_config):
		licdict = grabdict_package(os.path.join(
			abs_user_config, "package.license"), recursive=1, allow_wildcard=True)
		for k, v in licdict.items():
			self._plicensedict.setdefault(k.cp, {})[k] = \
				self.expandLicenseTokens(v)
예제 #15
0
	def _parse_file_to_dict(self, file_name, juststrings=False, recursive=True,
		eapi_filter=None, user_config=False, eapi=None, eapi_default="0"):
		"""
		@param file_name: input file name
		@type file_name: str
		@param juststrings: store dict values as space-delimited strings
			instead of tuples
		@type juststrings: bool
		@param recursive: triggers recursion if the input file is a
			directory
		@type recursive: bool
		@param eapi_filter: a function that accepts a single eapi
			argument, and returns true if the the current file type
			is supported by the given EAPI
		@type eapi_filter: callable
		@param user_config: current file is part of the local
			configuration (not repository content)
		@type user_config: bool
		@param eapi: the EAPI of the current profile node, which allows
			a call to read_corresponding_eapi_file to be skipped
		@type eapi: str
		@param eapi_default: the default EAPI which applies if the
			current profile node does not define a local EAPI
		@type eapi_default: str
		@rtype: tuple
		@return: collection of USE flags
		"""
		ret = {}
		location_dict = {}
		if eapi is None:
			eapi = read_corresponding_eapi_file(file_name,
				default=eapi_default)
		extended_syntax = eapi is None and user_config
		if extended_syntax:
			ret = ExtendedAtomDict(dict)
		else:
			ret = {}
		file_dict = grabdict_package(file_name, recursive=recursive,
			allow_wildcard=extended_syntax, allow_repo=extended_syntax,
			verify_eapi=(not extended_syntax), eapi=eapi,
			eapi_default=eapi_default)
		if eapi is not None and eapi_filter is not None and not eapi_filter(eapi):
			if file_dict:
				writemsg(_("--- EAPI '%s' does not support '%s': '%s'\n") %
					(eapi, os.path.basename(file_name), file_name),
					noiselevel=-1)
			return ret
		useflag_re = _get_useflag_re(eapi)
		for k, v in file_dict.items():
			useflags = []
			for prefixed_useflag in v:
				if prefixed_useflag[:1] == "-":
					useflag = prefixed_useflag[1:]
				else:
					useflag = prefixed_useflag
				if useflag_re.match(useflag) is None:
					writemsg(_("--- Invalid USE flag for '%s' in '%s': '%s'\n") %
						(k, file_name, prefixed_useflag), noiselevel=-1)
				else:
					useflags.append(prefixed_useflag)
			location_dict.setdefault(k, []).extend(useflags)
		for k, v in location_dict.items():
			if juststrings:
				v = " ".join(v)
			else:
				v = tuple(v)
			ret.setdefault(k.cp, {})[k] = v
		return ret
예제 #16
0
    def __init__(self,
                 profiles,
                 abs_user_config,
                 user_config=True,
                 global_accept_keywords=""):
        self._pkeywords_list = []
        rawpkeywords = [
            grabdict_package(
                os.path.join(x.location, "package.keywords"),
                recursive=x.portage1_directories,
                verify_eapi=True,
                eapi=x.eapi,
                eapi_default=None,
                allow_repo=allow_profile_repo_deps(x),
                allow_build_id=x.allow_build_id,
            ) for x in profiles
        ]
        for pkeyworddict in rawpkeywords:
            if not pkeyworddict:
                # Omit non-existent files from the stack.
                continue
            cpdict = {}
            for k, v in pkeyworddict.items():
                cpdict.setdefault(k.cp, {})[k] = v
            self._pkeywords_list.append(cpdict)
        self._pkeywords_list = tuple(self._pkeywords_list)

        self._p_accept_keywords = []
        raw_p_accept_keywords = [
            grabdict_package(
                os.path.join(x.location, "package.accept_keywords"),
                recursive=x.portage1_directories,
                verify_eapi=True,
                eapi=x.eapi,
                eapi_default=None,
                allow_repo=allow_profile_repo_deps(x),
            ) for x in profiles
        ]
        for d in raw_p_accept_keywords:
            if not d:
                # Omit non-existent files from the stack.
                continue
            cpdict = {}
            for k, v in d.items():
                cpdict.setdefault(k.cp, {})[k] = tuple(v)
            self._p_accept_keywords.append(cpdict)
        self._p_accept_keywords = tuple(self._p_accept_keywords)

        self.pkeywordsdict = ExtendedAtomDict(dict)

        if user_config:
            user_accept_kwrds_path = os.path.join(abs_user_config,
                                                  "package.accept_keywords")
            user_kwrds_path = os.path.join(abs_user_config, "package.keywords")
            pkgdict = grabdict_package(
                user_kwrds_path,
                recursive=1,
                allow_wildcard=True,
                allow_repo=True,
                verify_eapi=False,
                allow_build_id=True,
            )

            if pkgdict and portage._internal_caller:
                warnings.warn(
                    _("%s is deprecated, use %s instead") %
                    (user_kwrds_path, user_accept_kwrds_path),
                    UserWarning,
                )

            for k, v in grabdict_package(
                    user_accept_kwrds_path,
                    recursive=1,
                    allow_wildcard=True,
                    allow_repo=True,
                    verify_eapi=False,
                    allow_build_id=True,
            ).items():
                pkgdict.setdefault(k, []).extend(v)

            accept_keywords_defaults = global_accept_keywords.split()
            accept_keywords_defaults = tuple(
                "~" + keyword for keyword in accept_keywords_defaults
                if keyword[:1] not in "~-")
            for k, v in pkgdict.items():
                # default to ~arch if no specific keyword is given
                if not v:
                    v = accept_keywords_defaults
                else:
                    v = tuple(v)
                self.pkeywordsdict.setdefault(k.cp, {})[k] = v