Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/
Date: Fri, 01 Jun 2012 22:12:33
Message-Id: 1338588722.b03ed0de134456870c0361dd573e18830c45fa49.zmedico@gentoo
1 commit: b03ed0de134456870c0361dd573e18830c45fa49
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Fri Jun 1 22:12:02 2012 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Fri Jun 1 22:12:02 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b03ed0de
7
8 config: lazy KeywordsManager instantiation
9
10 This allows a config instance to be instantiated by portageq, while
11 accessing /etc/portage/package.keywords only on demand, solving
12 bug #418475 by avoiding PermissionDenied exceptions when possible.
13
14 ---
15 pym/portage/package/ebuild/config.py | 23 ++++++++++++++++++-----
16 1 files changed, 18 insertions(+), 5 deletions(-)
17
18 diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
19 index 97cbd99..6f5680b 100644
20 --- a/pym/portage/package/ebuild/config.py
21 +++ b/pym/portage/package/ebuild/config.py
22 @@ -227,9 +227,12 @@ class config(object):
23 self._setcpv_args_hash = clone._setcpv_args_hash
24
25 # immutable attributes (internal policy ensures lack of mutation)
26 - self._keywords_manager = clone._keywords_manager
27 + self._locations_manager = clone._locations_manager
28 self._use_manager = clone._use_manager
29 self._mask_manager = clone._mask_manager
30 + # force instantiation of lazy immutable objects when cloning, so
31 + # that they're not instantiated more than once
32 + self._keywords_manager_obj = clone._keywords_manager
33
34 # shared mutable attributes
35 self._unknown_features = clone._unknown_features
36 @@ -274,9 +277,13 @@ class config(object):
37 self._expand_map = copy.deepcopy(clone._expand_map)
38
39 else:
40 + # lazily instantiated objects
41 + self._keywords_manager_obj = None
42 +
43 locations_manager = LocationsManager(config_root=config_root,
44 config_profile_path=config_profile_path, eprefix=eprefix,
45 local_config=local_config, target_root=target_root)
46 + self._locations_manager = locations_manager
47
48 eprefix = locations_manager.eprefix
49 config_root = locations_manager.config_root
50 @@ -574,10 +581,6 @@ class config(object):
51 d.pop(k, None)
52 self._repo_make_defaults[repo.name] = d
53
54 - #Read package.keywords and package.accept_keywords.
55 - self._keywords_manager = KeywordsManager(profiles_complex, abs_user_config, \
56 - local_config, global_accept_keywords=self.configdict["defaults"].get("ACCEPT_KEYWORDS", ""))
57 -
58 #Read all USE related files from profiles and optionally from user config.
59 self._use_manager = UseManager(self.repositories, profiles_complex, abs_user_config, user_config=local_config)
60 #Initialize all USE related variables we track ourselves.
61 @@ -882,6 +885,16 @@ class config(object):
62 noiselevel=-1)
63
64 @property
65 + def _keywords_manager(self):
66 + if self._keywords_manager_obj is None:
67 + self._keywords_manager_obj = KeywordsManager(
68 + self._locations_manager.profiles_complex,
69 + self._locations_manager.abs_user_config,
70 + self.local_config,
71 + global_accept_keywords=self.configdict["defaults"].get("ACCEPT_KEYWORDS", ""))
72 + return self._keywords_manager_obj
73 +
74 + @property
75 def pkeywordsdict(self):
76 result = self._keywords_manager.pkeywordsdict.copy()
77 for k, v in result.items():