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
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
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
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
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
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
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)
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
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
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
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
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
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)
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
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