From d7e083e00bb3f1aecc88bbeba4a08e2b989177ae Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Sun, 31 Jan 2010 09:41:21 +0000 Subject: [PATCH] Merged from trunk -r15280:15285 | 15281 | Deprecate the first parameter of the portdbapi constructor | | zmedico | since it is always the same as mysettings['PORTDIR']. | | 15282 | Use tuples instead of lists for immutability. | | zmedico | | | 15283 | For immutable config attributes, use shallow copy for speed | | zmedico | and memory conservation. | | 15284 | For immutable config attributes, use shallow copy for speed | | zmedico | and memory conservation. | | 15285 | For immutable config attributes, use shallow copy for speed | | zmedico | and memory conservation. | svn path=/main/branches/prefix/; revision=15300 --- bin/egencache | 2 +- pym/portage/__init__.py | 48 +++++++++++++++++++---------------- pym/portage/const.py | 14 +++++----- pym/portage/dbapi/porttree.py | 20 ++++++++++++--- 4 files changed, 51 insertions(+), 33 deletions(-) diff --git a/bin/egencache b/bin/egencache index 25a51d12c..ac45d714f 100755 --- a/bin/egencache +++ b/bin/egencache @@ -326,7 +326,7 @@ def egencache_main(args): settings.lock() - portdb = portage.portdbapi(settings["PORTDIR"], mysettings=settings) + portdb = portage.portdbapi(mysettings=settings) if options.repo is not None: repo_path = portdb.getRepositoryPath(options.repo) if repo_path is None: diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index b084cf806..911714909 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -1605,23 +1605,26 @@ class config(object): self._local_repo_conf_path = None if clone: - self.incrementals = copy.deepcopy(clone.incrementals) - self.profile_path = copy.deepcopy(clone.profile_path) + # For immutable attributes, use shallow copy for + # speed and memory conservation. + self.categories = clone.categories + self.depcachedir = clone.depcachedir + self.incrementals = clone.incrementals + self.module_priority = clone.module_priority + self.profile_path = clone.profile_path + self.profiles = clone.profiles + self.packages = clone.packages + self.useforce_list = clone.useforce_list + self.usemask_list = clone.usemask_list + self.user_profile_dir = copy.deepcopy(clone.user_profile_dir) self.local_config = copy.deepcopy(clone.local_config) self._local_repo_configs = \ copy.deepcopy(clone._local_repo_configs) self._local_repo_conf_path = \ copy.deepcopy(clone._local_repo_conf_path) - - self.module_priority = copy.deepcopy(clone.module_priority) self.modules = copy.deepcopy(clone.modules) - - self.depcachedir = copy.deepcopy(clone.depcachedir) - - self.packages = copy.deepcopy(clone.packages) self.virtuals = copy.deepcopy(clone.virtuals) - self.dirVirtuals = copy.deepcopy(clone.dirVirtuals) self.treeVirtuals = copy.deepcopy(clone.treeVirtuals) self.userVirtuals = copy.deepcopy(clone.userVirtuals) @@ -1630,10 +1633,8 @@ class config(object): self.use_defs = copy.deepcopy(clone.use_defs) self.usemask = copy.deepcopy(clone.usemask) - self.usemask_list = copy.deepcopy(clone.usemask_list) self.pusemask_list = copy.deepcopy(clone.pusemask_list) self.useforce = copy.deepcopy(clone.useforce) - self.useforce_list = copy.deepcopy(clone.useforce_list) self.puseforce_list = copy.deepcopy(clone.puseforce_list) self.puse = copy.deepcopy(clone.puse) self.make_defaults_use = copy.deepcopy(clone.make_defaults_use) @@ -1655,10 +1656,8 @@ class config(object): self.lookuplist = self.configlist[:] self.lookuplist.reverse() self._use_expand_dict = copy.deepcopy(clone._use_expand_dict) - self.profiles = copy.deepcopy(clone.profiles) self.backupenv = self.configdict["backupenv"] self.pusedict = copy.deepcopy(clone.pusedict) - self.categories = copy.deepcopy(clone.categories) self.pkeywordsdict = copy.deepcopy(clone.pkeywordsdict) self._pkeywords_list = copy.deepcopy(clone._pkeywords_list) self.pmaskdict = copy.deepcopy(clone.pmaskdict) @@ -1699,14 +1698,16 @@ class config(object): else: self.profile_path = None else: - self.profile_path = config_profile_path[:] + self.profile_path = config_profile_path if config_incrementals is None: - self.incrementals = copy.deepcopy(portage.const.INCREMENTALS) + self.incrementals = portage.const.INCREMENTALS else: - self.incrementals = copy.deepcopy(config_incrementals) + self.incrementals = config_incrementals + if not isinstance(self.incrementals, tuple): + self.incrementals = tuple(self.incrementals) - self.module_priority = ["user","default"] + self.module_priority = ("user", "default") self.modules = {} modules_loader = portage.env.loaders.KeyValuePairFileLoader( os.path.join(config_root, MODULES_FILE_PATH), None, None) @@ -1784,8 +1785,9 @@ class config(object): self.profiles.append(custom_prof) del custom_prof + self.profiles = tuple(self.profiles) self.packages_list = [grabfile_package(os.path.join(x, "packages")) for x in self.profiles] - self.packages = stack_lists(self.packages_list, incremental=1) + self.packages = tuple(stack_lists(self.packages_list, incremental=1)) del self.packages_list #self.packages = grab_stacked("packages", self.profiles, grabfile, incremental_lines=1) @@ -1808,8 +1810,9 @@ class config(object): self._pkeywords_list.append(cpdict) # get profile-masked use flags -- INCREMENTAL Child over parent - self.usemask_list = [grabfile(os.path.join(x, "use.mask"), - recursive=1) for x in self.profiles] + self.usemask_list = tuple( + tuple(grabfile(os.path.join(x, "use.mask"), recursive=1)) + for x in self.profiles) self.usemask = set(stack_lists( self.usemask_list, incremental=True)) use_defs_lists = [grabdict(os.path.join(x, "use.defaults")) for x in self.profiles] @@ -1836,8 +1839,9 @@ class config(object): self.pkgprofileuse.append(cpdict) del rawprofileuse - self.useforce_list = [grabfile(os.path.join(x, "use.force"), - recursive=1) for x in self.profiles] + self.useforce_list = tuple( + tuple(grabfile(os.path.join(x, "use.force"), recursive=1)) + for x in self.profiles) self.useforce = set(stack_lists( self.useforce_list, incremental=True)) diff --git a/pym/portage/const.py b/pym/portage/const.py index a3c25d6df..b176382fa 100644 --- a/pym/portage/const.py +++ b/pym/portage/const.py @@ -85,26 +85,26 @@ REPO_NAME_LOC = "profiles" + "/" + REPO_NAME_FILE PORTAGE_PACKAGE_ATOM = "sys-apps/portage" -INCREMENTALS = ["USE", "USE_EXPAND", "USE_EXPAND_HIDDEN", +INCREMENTALS = ("USE", "USE_EXPAND", "USE_EXPAND_HIDDEN", "FEATURES", "ACCEPT_KEYWORDS", "CONFIG_PROTECT_MASK", "CONFIG_PROTECT", "PRELINK_PATH", "PRELINK_PATH_MASK", - "PROFILE_ONLY_VARIABLES"] -EBUILD_PHASES = ["setup", "unpack", "prepare", "configure", + "PROFILE_ONLY_VARIABLES") +EBUILD_PHASES = ("setup", "unpack", "prepare", "configure", "compile", "test", "install", "package", "preinst", "postinst","prerm", "postrm", - "nofetch", "config", "info", "other"] + "nofetch", "config", "info", "other") EAPI = 3 HASHING_BLOCKSIZE = 32768 -MANIFEST1_HASH_FUNCTIONS = ["MD5", "SHA256", "RMD160"] -MANIFEST2_HASH_FUNCTIONS = ["SHA1", "SHA256", "RMD160"] +MANIFEST1_HASH_FUNCTIONS = ("MD5", "SHA256", "RMD160") +MANIFEST2_HASH_FUNCTIONS = ("SHA1", "SHA256", "RMD160") MANIFEST1_REQUIRED_HASH = "MD5" MANIFEST2_REQUIRED_HASH = "SHA1" -MANIFEST2_IDENTIFIERS = ["AUX", "MISC", "DIST", "EBUILD"] +MANIFEST2_IDENTIFIERS = ("AUX", "MISC", "DIST", "EBUILD") # =========================================================================== # END OF CONSTANTS -- END OF CONSTANTS -- END OF CONSTANTS -- END OF CONSTANT # =========================================================================== diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py index 7536f7972..1b5567a8e 100644 --- a/pym/portage/dbapi/porttree.py +++ b/pym/portage/dbapi/porttree.py @@ -141,7 +141,13 @@ class portdbapi(dbapi): def _categories(self): return self.settings.categories - def __init__(self, porttree_root, mysettings=None): + def __init__(self, _unused_param=None, mysettings=None): + """ + @param _unused_param: deprecated + @type _unused_param: None + @param mysettings: an immutable config instance + @type mysettings: portage.config + """ portdbapi.portdbapi_instances.append(self) from portage import config @@ -151,6 +157,15 @@ class portdbapi(dbapi): from portage import settings self.mysettings = config(clone=settings) + if _unused_param is not None: + warnings.warn("The first parameter of the " + \ + "portage.dbapi.porttree.portdbapi" + \ + " constructor is now unused. Use " + \ + "mysettings['PORTDIR'] instead.", + DeprecationWarning) + + porttree_root = self.mysettings['PORTDIR'] + # This is strictly for use in aux_get() doebuild calls when metadata # is generated by the depend phase. It's safest to use a clone for # this purpose because doebuild makes many changes to the config @@ -1182,8 +1197,7 @@ class portagetree(object): self.settings = settings self.portroot = settings["PORTDIR"] self.virtual = virtual - self.dbapi = portdbapi( - settings["PORTDIR"], mysettings=settings) + self.dbapi = portdbapi(mysettings=settings) def dep_bestmatch(self,mydep): "compatibility method" -- 2.26.2