diff options
Diffstat (limited to 'pym/portage/package/ebuild')
-rw-r--r-- | pym/portage/package/ebuild/_config/LicenseManager.py | 36 | ||||
-rw-r--r-- | pym/portage/package/ebuild/config.py | 26 |
2 files changed, 24 insertions, 38 deletions
diff --git a/pym/portage/package/ebuild/_config/LicenseManager.py b/pym/portage/package/ebuild/_config/LicenseManager.py index 4ce1123b0..e092e411f 100644 --- a/pym/portage/package/ebuild/_config/LicenseManager.py +++ b/pym/portage/package/ebuild/_config/LicenseManager.py @@ -5,8 +5,6 @@ __all__ = ( 'LicenseManager', ) -from copy import deepcopy - from portage import os from portage.dep import ExtendedAtomDict, use_reduce from portage.exception import InvalidDependString @@ -19,46 +17,30 @@ from portage.package.ebuild._config.helper import ordered_by_atom_specificity class LicenseManager(object): - def __init__(self, _copy=False): - if _copy: - return + def __init__(self, license_group_locations, abs_user_config, user_config=True): + self._accept_license_str = None self._accept_license = None self._license_groups = {} self._plicensedict = ExtendedAtomDict(dict) self._undef_lic_groups = set() - def __deepcopy__(self, memo=None): - - if memo is None: - memo = {} - result = LicenseManager(_copy=True) - memo[id(self)] = result - - # immutable attributes - result._accept_license_str = self._accept_license_str - memo[id(self._accept_license_str)] = self._accept_license_str - result._accept_license = self._accept_license - memo[id(self._accept_license)] = self._accept_license - - # immutable attributes (internal policy ensures lack of mutation) - result._license_groups = self._license_groups - memo[id(self._license_groups)] = self._license_groups + if user_config: + license_group_locations = list(license_group_locations) + [abs_user_config] - # mutable attributes - result._plicensedict = deepcopy(self._plicensedict, memo) - result._undef_lic_groups = deepcopy(self._undef_lic_groups, memo) + self._read_license_groups(license_group_locations) - return result + if user_config: + self._read_user_config(abs_user_config) - def read_config_files(self, abs_user_config): + 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_license_groups(self, locations): + def _read_license_groups(self, locations): for loc in locations: for k, v in grabdict( os.path.join(loc, "license_groups")).items(): diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py index a978e33d1..122a7f6ed 100644 --- a/pym/portage/package/ebuild/config.py +++ b/pym/portage/package/ebuild/config.py @@ -344,7 +344,6 @@ class config(object): self.modifiedkeys = [] self.uvlist = [] self._accept_chost_re = None - self._license_manager = LicenseManager() self._accept_properties = None self._features_overrides = [] @@ -429,7 +428,14 @@ class config(object): self.features._features = copy.deepcopy(clone.features._features) self._features_overrides = copy.deepcopy(clone._features_overrides) - self._license_manager = copy.deepcopy(clone._license_manager) + #Strictly speaking _license_manager is not immutable. Users need to ensure that + #extract_global_changes() is called right after __init__ (if at all). + #It also has the mutable member _undef_lic_groups. It is used to track + #undifiend license groups, to not display an error message for the same + #group again and again. Because of this, it's useful to share it between + #all LicenseManager instances. + self._license_manager = clone._license_manager + self._accept_properties = copy.deepcopy(clone._accept_properties) self._ppropertiesdict = copy.deepcopy(clone._ppropertiesdict) self._penvdict = copy.deepcopy(clone._penvdict) @@ -849,6 +855,13 @@ class config(object): self._use_manager.extract_global_USE_changes( \ self.configdict["conf"].get("USE", "")) + #Read license_groups and optionally license_groups and package.license from user config + self._license_manager = LicenseManager(locations, abs_user_config, user_config=local_config) + #Extract '*/*' entries from package.license + self.configdict["conf"]["ACCEPT_LICENSE"] = \ + self._license_manager.extract_global_changes( \ + self.configdict["conf"].get("ACCEPT_LICENSE", "")) + if local_config: locations.append(abs_user_config) @@ -877,12 +890,6 @@ class config(object): v = accept_keywords_defaults self.pkeywordsdict.setdefault(k.cp, {})[k] = v - #package.license - self._license_manager.read_config_files(abs_user_config) - self.configdict["conf"]["ACCEPT_LICENSE"] = \ - self._license_manager.extract_global_changes(\ - self.configdict["conf"].get("ACCEPT_LICENSE", "")) - #package.properties propdict = grabdict_package(os.path.join( abs_user_config, "package.properties"), recursive=1, allow_wildcard=True) @@ -1013,9 +1020,6 @@ class config(object): else: self.pprovideddict[mycatpkg]=[x] - # parse licensegroups - self._license_manager.parse_license_groups(locations) - # reasonable defaults; this is important as without USE_ORDER, # USE will always be "" (nothing set)! if "USE_ORDER" not in self: |