summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-11-19 06:00:24 +0000
committerZac Medico <zmedico@gentoo.org>2007-11-19 06:00:24 +0000
commitb33d273f98fab390c678f309caed93b0466efc31 (patch)
treedc1a047d5e9119eca1917bc4152a06fcaf008a25 /pym
parent7fa6df01d53bba3c05d6c6f12eca652c0f954edc (diff)
downloadportage-b33d273f98fab390c678f309caed93b0466efc31.tar.gz
portage-b33d273f98fab390c678f309caed93b0466efc31.tar.bz2
portage-b33d273f98fab390c678f309caed93b0466efc31.zip
Use the existing RootConfig class to serve as a replacement for
the EmergeConfig class. They both served roughly the same purpose and it was messy the way that EmergeConfig inherited from the portage.config class. It's better to avoid inheritance here, expecially since it doesn't provide anything really useful. svn path=/main/trunk/; revision=8525
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/__init__.py122
1 files changed, 58 insertions, 64 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 5ad6714af..d5c1babdb 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -385,22 +385,6 @@ def create_depgraph_params(myopts, myaction):
myparams.add("consistent")
return myparams
-
-class EmergeConfig(portage.config):
- def __init__(self, settings, trees=None, setconfig=None):
- """ You have to specify one of trees or setconfig """
- portage.config.__init__(self, clone=settings)
- if not setconfig:
- setconfigpaths = [os.path.join(GLOBAL_CONFIG_PATH, "sets.conf")]
- setconfigpaths.append(os.path.join(settings["PORTDIR"], "sets.conf"))
- setconfigpaths += [os.path.join(x, "sets.conf") for x in settings["PORDIR_OVERLAY"].split()]
- setconfigpaths.append(os.path.join(settings["PORTAGE_CONFIGROOT"],
- USER_CONFIG_PATH.lstrip(os.path.sep), "sets.conf"))
- #setconfig = SetConfig(setconfigpaths, settings, trees)
- setconfig = make_default_config(settings, trees)
- self.setconfig = setconfig
- self.sets = self.setconfig.getSetsWithAliases()
-
# search functionality
class search(object):
@@ -413,18 +397,18 @@ class search(object):
#
# public interface
#
- def __init__(self, settings, portdb, vartree, spinner, searchdesc,
+ def __init__(self, root_config, spinner, searchdesc,
verbose):
"""Searches the available and installed packages for the supplied search key.
The list of available and installed packages is created at object instantiation.
This makes successive searches faster."""
- self.settings = settings
- self.portdb = portdb
- self.vartree = vartree
+ self.settings = root_config.settings
+ self.portdb = root_config.trees["porttree"].dbapi
+ self.vartree = root_config.trees["vartree"]
self.spinner = spinner
self.verbose = verbose
self.searchdesc = searchdesc
- self.setconfig = settings.setconfig
+ self.setconfig = root_config.setconfig
def execute(self,searchkey):
"""Performs the search for the supplied search key"""
@@ -597,10 +581,12 @@ class search(object):
class RootConfig(object):
"""This is used internally by depgraph to track information about a
particular $ROOT."""
- def __init__(self, trees):
+ def __init__(self, trees, setconfig):
self.trees = trees
self.settings = trees["vartree"].settings
self.root = self.settings["ROOT"]
+ self.setconfig = setconfig
+ self.sets = self.setconfig.getSetsWithAliases()
def create_world_atom(pkg_key, metadata, args_set, root_config):
"""Create a new atom for the world file if one does not exist. If the
@@ -614,7 +600,7 @@ def create_world_atom(pkg_key, metadata, args_set, root_config):
return None
cp = portage.dep_getkey(arg_atom)
new_world_atom = cp
- sets = root_config.settings.sets
+ sets = root_config.sets
portdb = root_config.trees["porttree"].dbapi
vardb = root_config.trees["vartree"].dbapi
available_slots = set(portdb.aux_get(cpv, ["SLOT"])[0] \
@@ -1183,7 +1169,10 @@ class depgraph(object):
clone=self.trees[myroot]["vartree"].settings)
self._slot_pkg_map[myroot] = {}
vardb = self.trees[myroot]["vartree"].dbapi
- self.roots[myroot] = RootConfig(self.trees[myroot])
+ # Create a RootConfig instance that references
+ # the FakeVartree instead of the real one.
+ self.roots[myroot] = RootConfig(self.trees[myroot],
+ trees[myroot]["root_config"].setconfig)
# This fakedbapi instance will model the state that the vdb will
# have after new packages have been installed.
fakedb = portage.fakedbapi(settings=self.pkgsettings[myroot])
@@ -1734,8 +1723,8 @@ class depgraph(object):
"""Given a list of .tbz2s, .ebuilds sets, and deps, create the
appropriate depgraph and return a favorite list."""
root_config = self.roots[self.target_root]
- sets = root_config.settings.sets
- getSetAtoms = root_config.settings.setconfig.getSetAtoms
+ sets = root_config.sets
+ getSetAtoms = root_config.setconfig.getSetAtoms
oneshot = "--oneshot" in self.myopts or \
"--onlydeps" in self.myopts
myfavorites=[]
@@ -2523,7 +2512,7 @@ class depgraph(object):
if not required_set_names and not self._ignored_deps:
continue
root_config = self.roots[root]
- setconfig = root_config.settings.setconfig
+ setconfig = root_config.setconfig
args = []
# Reuse existing SetArg instances when available.
for arg in self._parent_child_digraph.root_nodes():
@@ -3606,8 +3595,8 @@ class depgraph(object):
pkg_cp = xs[0]
root_config = self.roots[myroot]
- system_set = root_config.settings.sets["system"]
- world_set = root_config.settings.sets["world"]
+ system_set = root_config.sets["system"]
+ world_set = root_config.sets["world"]
pkg_system = False
pkg_world = False
@@ -3846,7 +3835,7 @@ class depgraph(object):
if x in self.myopts:
return
root_config = self.roots[self.target_root]
- world_set = root_config.settings.sets["world"]
+ world_set = root_config.sets["world"]
world_set.lock()
world_set.load() # maybe it's changed on disk
args_set = self._sets["args"]
@@ -4048,9 +4037,8 @@ class MergeTask(object):
self.edebug = 1
self.pkgsettings = {}
for root in trees:
- self.pkgsettings[root] = EmergeConfig(
- trees[root]["vartree"].settings,
- setconfig=trees[root]["vartree"].settings.setconfig)
+ self.pkgsettings[root] = portage.config(
+ clone=trees[root]["vartree"].settings)
self.curval = 0
def merge(self, mylist, favorites, mtimedb):
@@ -4116,10 +4104,10 @@ class MergeTask(object):
del x, mytype, myroot, mycpv, mystatus, quiet_config
del shown_verifying_msg, quiet_settings
- root_config = RootConfig(self.trees[self.target_root])
- system_set = root_config.settings.sets["system"]
+ root_config = self.trees[self.target_root]["root_config"]
+ system_set = root_config.sets["system"]
args_set = InternalPackageSet(favorites)
- world_set = root_config.settings.sets["world"]
+ world_set = root_config.sets["world"]
if "--resume" not in self.myopts:
mymergelist = mylist
mtimedb["resume"]["mergelist"]=mymergelist[:]
@@ -4428,7 +4416,8 @@ class MergeTask(object):
if pkgsettings.get("AUTOCLEAN", "yes") == "yes":
xsplit=portage.pkgsplit(x[2])
emergelog(xterm_titles, " >>> AUTOCLEAN: " + xsplit[0])
- retval = unmerge(pkgsettings, self.myopts, vartree,
+ retval = unmerge(self.trees[myroot]["root_config"],
+ self.myopts,
"clean", [xsplit[0]], ldpath_mtimes, autoclean=1)
if not retval:
emergelog(xterm_titles,
@@ -4520,8 +4509,11 @@ class MergeTask(object):
sys.exit(0)
return os.EX_OK
-def unmerge(settings, myopts, vartree, unmerge_action, unmerge_files,
- ldpath_mtimes, autoclean=0):
+def unmerge(root_config, myopts, unmerge_action,
+ unmerge_files, ldpath_mtimes, autoclean=0):
+ settings = root_config.settings
+ sets = root_config.sets
+ vartree = root_config.trees["vartree"]
candidate_catpkgs=[]
global_unmerge=0
xterm_titles = "notitles" not in settings.features
@@ -4536,7 +4528,7 @@ def unmerge(settings, myopts, vartree, unmerge_action, unmerge_files,
try:
if os.access(vdb_path, os.W_OK):
vdb_lock = portage.locks.lockdir(vdb_path)
- realsyslist = settings.sets["system"].getAtoms()
+ realsyslist = sets["system"].getAtoms()
syslist = []
for x in realsyslist:
mycp = portage.dep_getkey(x)
@@ -4818,7 +4810,7 @@ def unmerge(settings, myopts, vartree, unmerge_action, unmerge_files,
show_unmerge_failure_message(y, ebuild, retval)
sys.exit(retval)
else:
- settings.sets["world"].cleanPackage(vartree.dbapi, y)
+ sets["world"].cleanPackage(vartree.dbapi, y)
emergelog(xterm_titles, " >>> unmerge success: "+y)
return 1
@@ -5954,12 +5946,12 @@ def action_info(settings, trees, myopts, myfiles):
mydbapi=trees[settings["ROOT"]]["vartree"].dbapi,
tree="vartree")
-def action_search(settings, portdb, vartree, myopts, myfiles, spinner):
+def action_search(root_config, myopts, myfiles, spinner):
if not myfiles:
print "emerge: no search terms provided."
else:
- searchinstance = search(settings, portdb,
- vartree, spinner, "--searchdesc" in myopts,
+ searchinstance = search(root_config,
+ spinner, "--searchdesc" in myopts,
"--quiet" not in myopts)
for mysearch in myfiles:
try:
@@ -6008,8 +6000,10 @@ def action_depclean(settings, trees, ldpath_mtimes,
vardb = dep_check_trees[myroot]["vartree"].dbapi
# Constrain dependency selection to the installed packages.
dep_check_trees[myroot]["porttree"] = dep_check_trees[myroot]["vartree"]
- syslist = settings.setconfig.getSetAtoms("system")
- worldlist = settings.setconfig.getSetAtoms("world")
+ root_config = trees[myroot]["root_config"]
+ setconfig = root_config.setconfig
+ syslist = setconfig.getSetAtoms("system")
+ worldlist = setconfig.getSetAtoms("world")
args_set = InternalPackageSet()
fakedb = portage.fakedbapi(settings=settings)
myvarlist = vardb.cpv_all()
@@ -6258,7 +6252,7 @@ def action_depclean(settings, trees, ldpath_mtimes,
good("--nodeps"))
if len(cleanlist):
- unmerge(settings, myopts, trees[settings["ROOT"]]["vartree"],
+ unmerge(root_config, myopts,
"unmerge", cleanlist, ldpath_mtimes)
if action == "prune":
@@ -6523,8 +6517,8 @@ def action_build(settings, trees, mtimedb,
mtimedb.pop("resume", None)
if "yes" == settings.get("AUTOCLEAN"):
portage.writemsg_stdout(">>> Auto-cleaning packages...\n")
- vartree = trees[settings["ROOT"]]["vartree"]
- unmerge(settings, myopts, vartree, "clean", [],
+ unmerge(trees[settings["ROOT"]]["root_config"],
+ myopts, "clean", [],
ldpath_mtimes, autoclean=1)
else:
portage.writemsg_stdout(colorize("WARN", "WARNING:")
@@ -6653,11 +6647,10 @@ def load_emerge_config(trees=None):
kwargs[k] = os.environ.get(envvar, None)
trees = portage.create_trees(trees=trees, **kwargs)
- for root in trees:
- settings = trees[root]["vartree"].settings
- settings = EmergeConfig(settings, trees=trees[root])
- settings.lock()
- trees[root]["vartree"].settings = settings
+ for root, root_trees in trees.iteritems():
+ settings = root_trees["vartree"].settings
+ setconfig = make_default_config(settings, root_trees)
+ root_trees["root_config"] = RootConfig(root_trees, setconfig)
settings = trees["/"]["vartree"].settings
@@ -6847,10 +6840,12 @@ def emerge_main():
print colorize("BAD", "\n*** emerging by path is broken and may not always work!!!\n")
break
- mysets = {}
# only expand sets for actions taking package arguments
oldargs = myfiles[:]
if myaction in ("clean", "config", "depclean", "info", "prune", "unmerge"):
+ root_config = trees[settings["ROOT"]]["root_config"]
+ setconfig = root_config.setconfig
+ sets = root_config.sets
newargs = []
for a in myfiles:
if a in ("system", "world"):
@@ -6863,21 +6858,20 @@ def emerge_main():
for a in myfiles:
if a.startswith(SETPREFIX):
s = a[len(SETPREFIX):]
- if s not in settings.sets:
+ if s not in sets:
print "emerge: there are no sets to satisfy %s." % \
colorize("INFORM", s)
return 1
# TODO: check if the current setname also resolves to a package name
if myaction in ["unmerge", "prune", "clean", "depclean"] and \
- not settings.sets[s].supportsOperation("unmerge"):
+ not sets[s].supportsOperation("unmerge"):
print "emerge: the given set %s does not support unmerge operations" % s
return 1
- if not settings.setconfig.getSetAtoms(s):
+ if not setconfig.getSetAtoms(s):
print "emerge: '%s' is an empty set" % s
else:
- newargs.extend(settings.setconfig.getSetAtoms(s))
- mysets[s] = settings.sets[s]
- for e in settings.sets[s].errors:
+ newargs.extend(setconfig.getSetAtoms(s))
+ for e in sets[s].errors:
print e
else:
newargs.append(a)
@@ -7077,13 +7071,13 @@ def emerge_main():
# SEARCH action
elif "search"==myaction:
validate_ebuild_environment(trees)
- action_search(settings, portdb, trees["/"]["vartree"],
+ action_search(trees[settings["ROOT"]]["root_config"],
myopts, myfiles, spinner)
elif myaction in ("clean", "unmerge") or \
(myaction == "prune" and "--nodeps" in myopts):
validate_ebuild_environment(trees)
- vartree = trees[settings["ROOT"]]["vartree"]
- if 1 == unmerge(settings, myopts, vartree, myaction, myfiles,
+ root_config = trees[settings["ROOT"]]["root_config"]
+ if 1 == unmerge(root_config, myopts, myaction, myfiles,
mtimedb["ldpath"]):
if "--pretend" not in myopts:
post_emerge(trees, mtimedb, os.EX_OK)