public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [gentoo-commits] portage r15492 - main/trunk/pym/portage
@ 2010-02-28  6:01 99% Zac Medico (zmedico)
  0 siblings, 0 replies; 1+ results
From: Zac Medico (zmedico) @ 2010-02-28  6:01 UTC (permalink / raw
  To: gentoo-commits

Author: zmedico
Date: 2010-02-28 06:01:47 +0000 (Sun, 28 Feb 2010)
New Revision: 15492

Added:
   main/trunk/pym/portage/_legacy_globals.py
Modified:
   main/trunk/pym/portage/__init__.py
Log:
Move legacy globals code into a _legacy_globals module that's imported on
demand.


Modified: main/trunk/pym/portage/__init__.py
===================================================================
--- main/trunk/pym/portage/__init__.py	2010-02-28 04:28:21 UTC (rev 15491)
+++ main/trunk/pym/portage/__init__.py	2010-02-28 06:01:47 UTC (rev 15492)
@@ -564,10 +564,6 @@
 	return trees
 
 class _LegacyGlobalProxy(proxy.objectproxy.ObjectProxy):
-	"""
-	Instances of these serve as proxies to global variables
-	that are initialized on demand.
-	"""
 
 	__slots__ = ('_name',)
 
@@ -576,53 +572,19 @@
 		object.__setattr__(self, '_name', name)
 
 	def _get_target(self):
-		init_legacy_globals()
 		name = object.__getattribute__(self, '_name')
-		return globals()[name]
+		from portage._legacy_globals import _get_legacy_global
+		return _get_legacy_global(name)
 
-class _PortdbProxy(proxy.objectproxy.ObjectProxy):
-	"""
-	The portdb is initialized separately from the rest
-	of the variables, since sometimes the other variables
-	are needed while the portdb is not.
-	"""
-
-	__slots__ = ()
-
-	def _get_target(self):
-		init_legacy_globals()
-		global db, portdb, root, _portdb_initialized
-		if not _portdb_initialized:
-			portdb = db[root]["porttree"].dbapi
-			_portdb_initialized = True
-		return portdb
-
-class _MtimedbProxy(proxy.objectproxy.ObjectProxy):
-	"""
-	The mtimedb is independent from the portdb and other globals.
-	"""
-
-	__slots__ = ('_name',)
-
-	def __init__(self, name):
-		proxy.objectproxy.ObjectProxy.__init__(self)
-		object.__setattr__(self, '_name', name)
-
-	def _get_target(self):
-		global mtimedb, mtimedbfile, _mtimedb_initialized
-		if not _mtimedb_initialized:
-			mtimedbfile = os.path.join(os.path.sep,
-				CACHE_PATH, "mtimedb")
-			mtimedb = MtimeDB(mtimedbfile)
-			_mtimedb_initialized = True
-		name = object.__getattribute__(self, '_name')
-		return globals()[name]
-
 _legacy_global_var_names = ("archlist", "db", "features",
 	"groups", "mtimedb", "mtimedbfile", "pkglines",
 	"portdb", "profiledir", "root", "selinux_enabled",
 	"settings", "thirdpartymirrors", "usedefaults")
 
+for k in _legacy_global_var_names:
+	globals()[k] = _LegacyGlobalProxy(k)
+del k
+
 def _disable_legacy_globals():
 	"""
 	This deletes the ObjectProxy instances that are used
@@ -633,80 +595,3 @@
 	global _legacy_global_var_names
 	for k in _legacy_global_var_names:
 		globals().pop(k, None)
-
-# Initialization of legacy globals.  No functions/classes below this point
-# please!  When the above functions and classes become independent of the
-# below global variables, it will be possible to make the below code
-# conditional on a backward compatibility flag (backward compatibility could
-# be disabled via an environment variable, for example).  This will enable new
-# code that is aware of this flag to import portage without the unnecessary
-# overhead (and other issues!) of initializing the legacy globals.
-
-def init_legacy_globals():
-	global _globals_initialized
-	if _globals_initialized:
-		return
-	_globals_initialized = True
-
-	global db, settings, root, portdb, selinux_enabled, mtimedbfile, mtimedb, \
-	archlist, features, groups, pkglines, thirdpartymirrors, usedefaults, \
-	profiledir
-
-	# Portage needs to ensure a sane umask for the files it creates.
-	os.umask(0o22)
-
-	kwargs = {}
-	for k, envvar in (("config_root", "PORTAGE_CONFIGROOT"), ("target_root", "ROOT")):
-		kwargs[k] = os.environ.get(envvar, "/")
-
-	global _initializing_globals
-	_initializing_globals = True
-	db = create_trees(**kwargs)
-	del _initializing_globals
-
-	settings = db["/"]["vartree"].settings
-
-	for myroot in db:
-		if myroot != "/":
-			settings = db[myroot]["vartree"].settings
-			break
-
-	root = settings["ROOT"]
-	output._init(config_root=settings['PORTAGE_CONFIGROOT'])
-
-	# ========================================================================
-	# COMPATIBILITY
-	# These attributes should not be used
-	# within Portage under any circumstances.
-	# ========================================================================
-	archlist    = settings.archlist()
-	features    = settings.features
-	groups      = settings["ACCEPT_KEYWORDS"].split()
-	pkglines    = settings.packages
-	selinux_enabled   = settings.selinux_enabled()
-	thirdpartymirrors = settings.thirdpartymirrors()
-	usedefaults       = settings.use_defs
-	profiledir  = os.path.join(settings["PORTAGE_CONFIGROOT"], PROFILE_PATH)
-	if not os.path.isdir(profiledir):
-		profiledir = None
-	# ========================================================================
-	# COMPATIBILITY
-	# These attributes should not be used
-	# within Portage under any circumstances.
-	# ========================================================================
-
-if True:
-
-	_mtimedb_initialized = False
-	mtimedb     = _MtimedbProxy("mtimedb")
-	mtimedbfile = _MtimedbProxy("mtimedbfile")
-
-	_portdb_initialized  = False
-	portdb = _PortdbProxy()
-
-	_globals_initialized = False
-
-	for k in ("db", "settings", "root", "selinux_enabled",
-		"archlist", "features", "groups",
-		"pkglines", "thirdpartymirrors", "usedefaults", "profiledir"):
-		globals()[k] = _LegacyGlobalProxy(k)

Added: main/trunk/pym/portage/_legacy_globals.py
===================================================================
--- main/trunk/pym/portage/_legacy_globals.py	                        (rev 0)
+++ main/trunk/pym/portage/_legacy_globals.py	2010-02-28 06:01:47 UTC (rev 15492)
@@ -0,0 +1,87 @@
+# Copyright 2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+import portage
+from portage import os
+from portage.const import CACHE_PATH, PROFILE_PATH
+
+_legacy_globals = {}
+
+def _get_legacy_global(name):
+	global _legacy_globals
+	target = _legacy_globals.get(name, _legacy_globals)
+	if target is not _legacy_globals:
+		return target
+
+	if name == 'portdb':
+		portage.portdb = portage.db[portage.root]["porttree"].dbapi
+		_legacy_globals[name] = portage.portdb
+		return _legacy_globals[name]
+	elif name in ('mtimedb', 'mtimedbfile'):
+		portage.mtimedbfile = os.path.join(portage.root,
+			CACHE_PATH, "mtimedb")
+		_legacy_globals['mtimedbfile'] = portage.mtimedbfile
+		portage.mtimedb = portage.MtimeDB(portage.mtimedbfile)
+		_legacy_globals['mtimedb'] = portage.mtimedb
+		return _legacy_globals[name]
+
+	# Portage needs to ensure a sane umask for the files it creates.
+	os.umask(0o22)
+
+	kwargs = {}
+	for k, envvar in (("config_root", "PORTAGE_CONFIGROOT"), ("target_root", "ROOT")):
+		kwargs[k] = os.environ.get(envvar, "/")
+
+	portage._initializing_globals = True
+	portage.db = portage.create_trees(**kwargs)
+	_legacy_globals['db'] = portage.db
+	del portage._initializing_globals
+
+	settings = portage.db["/"]["vartree"].settings
+
+	for root in portage.db:
+		if root != "/":
+			settings = portage.db[root]["vartree"].settings
+			break
+
+	portage.output._init(config_root=settings['PORTAGE_CONFIGROOT'])
+
+	portage.settings = settings
+	_legacy_globals['settings'] = settings
+
+	portage.root = root
+	_legacy_globals['root'] = root
+
+	# COMPATIBILITY
+	# These attributes should not be used within
+	# Portage under any circumstances.
+
+	portage.archlist = settings.archlist()
+	_legacy_globals['archlist'] = portage.archlist
+
+	portage.features = settings.features
+	_legacy_globals['features'] = portage.features
+
+	portage.groups = settings["ACCEPT_KEYWORDS"].split()
+	_legacy_globals['groups'] = portage.groups
+
+	portage.pkglines = settings.packages
+	_legacy_globals['pkglines'] = portage.pkglines
+
+	portage.selinux_enabled = settings.selinux_enabled()
+	_legacy_globals['selinux_enabled'] = portage.selinux_enabled
+
+	portage.thirdpartymirrors = settings.thirdpartymirrors()
+	_legacy_globals['thirdpartymirrors'] = portage.thirdpartymirrors
+
+	portage.usedefaults = settings.use_defs
+	_legacy_globals['usedefaults'] = portage.usedefaults
+
+	profiledir = os.path.join(settings["PORTAGE_CONFIGROOT"], PROFILE_PATH)
+	if not os.path.isdir(profiledir):
+		profiledir = None
+	portage.profiledir = profiledir
+	_legacy_globals['profiledir'] = portage.profiledir
+
+	return _legacy_globals[name]


Property changes on: main/trunk/pym/portage/_legacy_globals.py
___________________________________________________________________
Added: svn:keywords
   + Id




^ permalink raw reply	[relevance 99%]

Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2010-02-28  6:01 99% [gentoo-commits] portage r15492 - main/trunk/pym/portage Zac Medico (zmedico)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox