def gen_config_protect_filter(offset, extra_protects=(), extra_disables=()): collapsed_d, inc, colon = collapse_envd(pjoin(offset, "etc/env.d")) collapsed_d.setdefault("CONFIG_PROTECT", []).extend(extra_protects) collapsed_d.setdefault("CONFIG_PROTECT_MASK", []).extend(extra_disables) r = [ values.StrGlobMatch(normpath(x).rstrip("/") + "/") for x in set(stable_unique(collapsed_d["CONFIG_PROTECT"] + ["/etc"])) ] if len(r) > 1: r = values.OrRestriction(*r) else: r = r[0] neg = stable_unique(collapsed_d["CONFIG_PROTECT_MASK"]) if neg: if len(neg) == 1: r2 = values.StrGlobMatch(normpath(neg[0]).rstrip("/") + "/", negate=True) else: r2 = values.OrRestriction( negate=True, *[ values.StrGlobMatch(normpath(x).rstrip("/") + "/") for x in set(neg) ]) r = values.AndRestriction(r, r2) return r
def node_conds(self): if self._node_conds is False: object.__setattr__(self, "_node_conds", {}) elif self._node_conds is True: nc = {} always_required = set() for payload, restrictions in self.find_cond_nodes( self.restrictions, True): if not restrictions: always_required.add(payload) else: if len(restrictions) == 1: current = restrictions[0] else: current = values.AndRestriction(*restrictions) nc.setdefault(payload, []).append(current) for k in always_required: if k in nc: del nc[k] for k in nc: nc[k] = tuple(nc[k]) object.__setattr__(self, "_node_conds", nc) return self._node_conds
def __init__(self, if_missing, false_use, true_use): v = [] if false_use: v.append(_UseDepDefaultContainment(if_missing, false_use, negate=True)) if true_use: v.append(_UseDepDefaultContainment(if_missing, true_use)) l = len(v) if l == 2: v = values.AndRestriction(*v) elif l == 1: v = v[0] else: v = values.AlwaysTrue super().__init__(('iuse', 'use'), v)
def __init__(self, false_use, true_use): v = [] if false_use: v.append(values.ContainmentMatch2(false_use, negate=True, match_all=True)) if true_use: v.append(values.ContainmentMatch2(true_use, match_all=True)) l = len(v) if l == 2: v = values.AndRestriction(*v) elif l == 1: v = v[0] else: v = values.AlwaysTrue super().__init__('use', v)
def __init__(self, false_use, true_use): v = [] if false_use: v.append(values.ContainmentMatch(negate=True, all=True, *false_use)) if true_use: v.append(values.ContainmentMatch(all=True, *true_use)) l = len(v) if l == 2: v = values.AndRestriction(*v) elif l == 1: v = v[0] else: v = values.AlwaysTrue packages.PackageRestriction.__init__(self, 'use', v)