summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-10-10 03:08:40 +0000
committerZac Medico <zmedico@gentoo.org>2009-10-10 03:08:40 +0000
commit20491fc68d7021e7bd9c4b22755ddac960b09e5e (patch)
tree2524bd6420da273e5c18ce6d53291a621c9dad79 /pym
parentf25216e8015b231ff719c1859e3e1ca20965f216 (diff)
downloadportage-20491fc68d7021e7bd9c4b22755ddac960b09e5e.tar.gz
portage-20491fc68d7021e7bd9c4b22755ddac960b09e5e.tar.bz2
portage-20491fc68d7021e7bd9c4b22755ddac960b09e5e.zip
Revert the rest of the package sets related code and docs, to behave like the
2.1.6 branch. svn path=/main/branches/2.1.7/; revision=14549
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/SetArg.py2
-rw-r--r--pym/_emerge/actions.py4
-rw-r--r--pym/_emerge/depgraph.py2
-rw-r--r--pym/_emerge/help.py16
-rw-r--r--pym/_emerge/main.py150
-rw-r--r--pym/_emerge/search.py29
-rw-r--r--pym/_emerge/unmerge.py86
7 files changed, 42 insertions, 247 deletions
diff --git a/pym/_emerge/SetArg.py b/pym/_emerge/SetArg.py
index 949bd6f7b..9428aab26 100644
--- a/pym/_emerge/SetArg.py
+++ b/pym/_emerge/SetArg.py
@@ -10,3 +10,5 @@ class SetArg(DependencyArg):
self.set = set
self.name = self.arg[len(SETPREFIX):]
+ def __str__(self):
+ return self.name
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index cb29dd1c9..bae996be7 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -569,7 +569,7 @@ def action_depclean(settings, trees, ldpath_mtimes,
msg.append("unless *all* required dependencies have been resolved. As a\n")
msg.append("consequence, it is often necessary to run %s\n" % \
good("`emerge --update"))
- msg.append(good("--newuse --deep @system @world`") + \
+ msg.append(good("--newuse --deep world`") + \
" prior to depclean.\n")
if action == "depclean" and "--quiet" not in myopts and not myfiles:
@@ -790,7 +790,7 @@ def calc_depclean(settings, trees, ldpath_mtimes,
msg.append(" %s" % (parent,))
msg.append("")
msg.append("Have you forgotten to run " + \
- good("`emerge --update --newuse --deep @system @world`") + " prior")
+ good("`emerge --update --newuse --deep world`") + " prior")
msg.append(("to %s? It may be necessary to manually " + \
"uninstall packages that no longer") % action)
msg.append("exist in the portage tree since " + \
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 9938a72c6..175cf4f19 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -3772,7 +3772,7 @@ class depgraph(object):
if not parent_atoms:
atom = self._dynamic_config._blocked_world_pkgs.get(pkg)
if atom is not None:
- parent_atoms = set([("@world", atom)])
+ parent_atoms = set([("world", atom)])
if parent_atoms:
conflict_pkgs[pkg] = parent_atoms
diff --git a/pym/_emerge/help.py b/pym/_emerge/help.py
index 7b4c66dd9..2f269bf77 100644
--- a/pym/_emerge/help.py
+++ b/pym/_emerge/help.py
@@ -9,7 +9,7 @@ from portage.output import bold, turquoise, green
def shorthelp():
print(bold("emerge:")+" the other white meat (command-line interface to the Portage system)")
print(bold("Usage:"))
- print(" "+turquoise("emerge")+" [ "+green("options")+" ] [ "+green("action")+" ] [ "+turquoise("ebuild")+" | "+turquoise("tbz2")+" | "+turquoise("file")+" | "+turquoise("@set")+" | "+turquoise("atom")+" ] [ ... ]")
+ print(" "+turquoise("emerge")+" [ "+green("options")+" ] [ "+green("action")+" ] [ "+turquoise("ebuild")+" | "+turquoise("tbz2")+" | "+turquoise("file")+" | "+turquoise("set")+" | "+turquoise("atom")+" ] [ ... ]")
print(" "+turquoise("emerge")+" [ "+green("options")+" ] [ "+green("action")+" ] < "+turquoise("system")+" | "+turquoise("world")+" >")
#print(" "+turquoise("emerge")+" < "+turquoise("--sync")+" | "+turquoise("--metadata")+" | "+turquoise("--info")+" >")
print(" "+turquoise("emerge")+" "+turquoise("--resume")+" [ "+green("--pretend")+" | "+green("--ask")+" | "+green("--skipfirst")+" ]")
@@ -21,7 +21,7 @@ def shorthelp():
print(" [ "+green("--newuse")+" ] [ "+green("--noconfmem")+" ] [ "+green("--nospinner")+" ]")
print(" [ "+green("--oneshot")+" ] [ "+green("--onlydeps")+" ]")
print(" [ "+green("--reinstall ")+turquoise("changed-use")+" ] [ " + green("--with-bdeps")+" < " + turquoise("y") + " | "+ turquoise("n")+" > ]")
- print(bold("Actions:")+" [ "+green("--depclean")+" | "+green("--list-sets")+" | "+green("--search")+" | "+green("--sync")+" | "+green("--version")+" ]")
+ print(bold("Actions:")+" [ "+green("--depclean")+" | "+" | "+green("--search")+" | "+green("--sync")+" | "+green("--version")+" ]")
def help(myopts, havecolor=1):
# TODO: Implement a wrap() that accounts for console color escape codes.
@@ -70,8 +70,8 @@ def help(myopts, havecolor=1):
paragraph = "Cleans the system by removing packages that are " + \
"not associated with explicitly merged packages. Depclean works " + \
- "by creating the full dependency tree from the @system and " + \
- "@world sets, then comparing it to installed packages. Packages " + \
+ "by creating the full dependency tree from the system and " + \
+ "world sets, then comparing it to installed packages. Packages " + \
"installed, but not part of the dependency tree, will be " + \
"uninstalled by depclean. See --with-bdeps for behavior with " + \
"respect to build time dependencies that are not strictly " + \
@@ -80,7 +80,7 @@ def help(myopts, havecolor=1):
"emerge --noreplace <atom>. As a safety measure, depclean " + \
"will not remove any packages unless *all* required dependencies " + \
"have been resolved. As a consequence, it is often necessary to " + \
- "run emerge --update --newuse --deep @system @world " + \
+ "run emerge --update --newuse --deep world " + \
"prior to depclean."
for line in wrap(paragraph, desc_width):
@@ -128,12 +128,6 @@ def help(myopts, havecolor=1):
print(" make.{conf,globals,defaults} and the environment show up if")
print(" run with the '--verbose' flag.")
print()
- print(" " + green("--list-sets"))
- paragraph = "Displays a list of available package sets."
-
- for line in wrap(paragraph, desc_width):
- print(desc_indent + line)
- print()
print(" "+green("--metadata"))
print(" Transfers metadata cache from ${PORTDIR}/metadata/cache/ to")
print(" /var/cache/edb/dep/ as is normally done on the tail end of an")
diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
index c3322c5e2..4215d80b9 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -416,7 +416,7 @@ def parse_opts(tmpcmdline, silent=False):
actions = frozenset([
"clean", "config", "depclean", "help",
- "info", "list-sets", "metadata",
+ "info", "metadata",
"prune", "regen", "search",
"sync", "unmerge", "version",
])
@@ -766,123 +766,34 @@ def ionice(settings):
out.eerror("See the make.conf(5) man page for PORTAGE_IONICE_COMMAND usage instructions.")
def expand_set_arguments(myfiles, myaction, root_config):
- retval = os.EX_OK
- setconfig = root_config.setconfig
-
- sets = setconfig.getSets()
-
- # In order to know exactly which atoms/sets should be added to the
- # world file, the depgraph performs set expansion later. It will get
- # confused about where the atoms came from if it's not allowed to
- # expand them itself.
- do_not_expand = (None, )
- newargs = []
- for a in myfiles:
- if a in ("system", "world"):
- newargs.append(SETPREFIX+a)
- else:
- newargs.append(a)
- myfiles = newargs
- del newargs
- newargs = []
-
- # separators for set arguments
- ARG_START = "{"
- ARG_END = "}"
-
- for i in range(0, len(myfiles)):
- if myfiles[i].startswith(SETPREFIX):
- start = 0
- end = 0
- x = myfiles[i][len(SETPREFIX):]
- newset = ""
- while x:
- start = x.find(ARG_START)
- end = x.find(ARG_END)
- if start > 0 and start < end:
- namepart = x[:start]
- argpart = x[start+1:end]
-
- # TODO: implement proper quoting
- args = argpart.split(",")
- options = {}
- for a in args:
- if "=" in a:
- k, v = a.split("=", 1)
- options[k] = v
- else:
- options[a] = "True"
- setconfig.update(namepart, options)
- newset += (x[:start-len(namepart)]+namepart)
- x = x[end+len(ARG_END):]
- else:
- newset += x
- x = ""
- myfiles[i] = SETPREFIX+newset
-
- sets = setconfig.getSets()
-
- # display errors that occured while loading the SetConfig instance
- for e in setconfig.errors:
- print(colorize("BAD", "Error during set creation: %s" % e))
-
- # emerge relies on the existance of sets with names "world" and "system"
- required_sets = ("world", "system")
- missing_sets = []
-
- for s in required_sets:
- if s not in sets:
- missing_sets.append(s)
- if missing_sets:
- if len(missing_sets) > 2:
- missing_sets_str = ", ".join('"%s"' % s for s in missing_sets[:-1])
- missing_sets_str += ', and "%s"' % missing_sets[-1]
- elif len(missing_sets) == 2:
- missing_sets_str = '"%s" and "%s"' % tuple(missing_sets)
- else:
- missing_sets_str = '"%s"' % missing_sets[-1]
- msg = ["emerge: incomplete set configuration, " + \
- "missing set(s): %s" % missing_sets_str]
- if sets:
- msg.append(" sets defined: %s" % ", ".join(sets))
- msg.append(" This usually means that '%s'" % \
- (os.path.join(portage.const.GLOBAL_CONFIG_PATH, "sets.conf"),))
- msg.append(" is missing or corrupt.")
- for line in msg:
- writemsg_level(line + "\n", level=logging.ERROR, noiselevel=-1)
- return (None, 1)
- unmerge_actions = ("unmerge", "prune", "clean", "depclean")
-
- for a in myfiles:
- if a.startswith(SETPREFIX):
- s = a[len(SETPREFIX):]
- if s not in sets:
- display_missing_pkg_set(root_config, s)
- return (None, 1)
- setconfig.active.append(s)
- try:
- set_atoms = setconfig.getSetAtoms(s)
- except portage.exception.PackageSetNotFound as e:
- writemsg_level(("emerge: the given set '%s' " + \
- "contains a non-existent set named '%s'.\n") % \
- (s, e), level=logging.ERROR, noiselevel=-1)
- return (None, 1)
- if myaction in unmerge_actions and \
- not sets[s].supportsOperation("unmerge"):
- sys.stderr.write("emerge: the given set '%s' does " % s + \
- "not support unmerge operations\n")
- retval = 1
- elif not set_atoms:
- print("emerge: '%s' is an empty set" % s)
- elif myaction not in do_not_expand:
- newargs.extend(set_atoms)
- else:
- newargs.append(SETPREFIX+s)
- for e in sets[s].errors:
- print(e)
- else:
- newargs.append(a)
- return (newargs, retval)
+
+ if myaction != "search":
+
+ world = False
+ system = False
+
+ for x in myfiles:
+ if x[:1] == SETPREFIX:
+ msg = []
+ msg.append("'%s' is not a valid package atom." % (x,))
+ msg.append("Please check ebuild(5) for full details.")
+ writemsg_level("".join("!!! %s\n" % line for line in msg),
+ level=logging.ERROR, noiselevel=-1)
+ return (myfiles, 1)
+ elif x == "system":
+ system = True
+ elif x == "world":
+ world = True
+
+ if myaction is not None:
+ if system:
+ multiple_actions("system", myaction)
+ return (myfiles, 1)
+ elif world:
+ multiple_actions("world", myaction)
+ return (myfiles, 1)
+
+ return (myfiles, os.EX_OK)
def repo_name_check(trees):
missing_repo_names = set()
@@ -1071,9 +982,6 @@ def emerge_main():
break
root_config = trees[settings["ROOT"]]["root_config"]
- if myaction == "list-sets":
- writemsg_stdout("".join("%s\n" % s for s in sorted(root_config.sets)))
- return os.EX_OK
# only expand sets for actions taking package arguments
oldargs = myfiles[:]
diff --git a/pym/_emerge/search.py b/pym/_emerge/search.py
index f0611f28a..ac39efc20 100644
--- a/pym/_emerge/search.py
+++ b/pym/_emerge/search.py
@@ -182,10 +182,10 @@ class search(object):
self.packagematches = []
if self.searchdesc:
self.searchdesc=1
- self.matches = {"pkg":[], "desc":[], "set":[]}
+ self.matches = {"pkg":[], "desc":[],}
else:
self.searchdesc=0
- self.matches = {"pkg":[], "set":[]}
+ self.matches = {"pkg":[],}
print("Searching... ", end=' ')
regexsearch = False
@@ -231,21 +231,6 @@ class search(object):
if self.searchre.search(full_desc):
self.matches["desc"].append([full_package,masked])
- self.sdict = self.setconfig.getSets()
- for setname in self.sdict:
- self._spinner_update()
- if match_category:
- match_string = setname
- else:
- match_string = setname.split("/")[-1]
-
- if self.searchre.search(match_string):
- self.matches["set"].append([setname, False])
- elif self.searchdesc:
- if self.searchre.search(
- self.sdict[setname].getMetadata("DESCRIPTION")):
- self.matches["set"].append([setname, False])
-
self.mlen=0
for mtype in self.matches:
self.matches[mtype].sort()
@@ -281,15 +266,7 @@ class search(object):
elif mtype == "desc":
full_package = match
match = portage.cpv_getkey(match)
- elif mtype == "set":
- msg = []
- msg.append(green("*") + " " + bold(match) + "\n")
- if self.verbose:
- msg.append(" " + darkgreen("Description:") + \
- " " + \
- self.sdict[match].getMetadata("DESCRIPTION") \
- + "\n\n")
- writemsg_stdout(''.join(msg), noiselevel=-1)
+
if full_package:
try:
desc, homepage, license = self.portdb.aux_get(
diff --git a/pym/_emerge/unmerge.py b/pym/_emerge/unmerge.py
index 53699737e..caf6e8e68 100644
--- a/pym/_emerge/unmerge.py
+++ b/pym/_emerge/unmerge.py
@@ -280,31 +280,7 @@ def unmerge(root_config, myopts, unmerge_action,
if vdb_lock:
vartree.dbapi.flush_cache()
portage.locks.unlockdir(vdb_lock)
-
- from portage._sets.base import EditablePackageSet
-
- # generate a list of package sets that are directly or indirectly listed in "world",
- # as there is no persistent list of "installed" sets
- installed_sets = ["world"]
- stop = False
- pos = 0
- while not stop:
- stop = True
- pos = len(installed_sets)
- for s in installed_sets[pos - 1:]:
- if s not in sets:
- continue
- candidates = [x[len(SETPREFIX):] for x in sets[s].getNonAtoms() if x.startswith(SETPREFIX)]
- if candidates:
- stop = False
- installed_sets += candidates
- installed_sets = [x for x in installed_sets if x not in root_config.setconfig.active]
- del stop, pos
- # we don't want to unmerge packages that are still listed in user-editable package sets
- # listed in "world" as they would be remerged on the next update of "world" or the
- # relevant package sets.
- unknown_sets = set()
for cp in range(len(pkgmap)):
for cpv in pkgmap[cp]["selected"].copy():
try:
@@ -328,68 +304,6 @@ def unmerge(root_config, myopts, unmerge_action,
pkgmap[cp]["protected"].add(cpv)
continue
- parents = []
- for s in installed_sets:
- # skip sets that the user requested to unmerge, and skip world
- # unless we're unmerging a package set (as the package would be
- # removed from "world" later on)
- if s in root_config.setconfig.active or (s == "world" and not root_config.setconfig.active):
- continue
-
- if s not in sets:
- if s in unknown_sets:
- continue
- unknown_sets.add(s)
- out = portage.output.EOutput()
- out.eerror(("Unknown set '@%s' in %s%s") % \
- (s, root_config.root, portage.const.WORLD_SETS_FILE))
- continue
-
- # only check instances of EditablePackageSet as other classes are generally used for
- # special purposes and can be ignored here (and are usually generated dynamically, so the
- # user can't do much about them anyway)
- if isinstance(sets[s], EditablePackageSet):
-
- # This is derived from a snippet of code in the
- # depgraph._iter_atoms_for_pkg() method.
- for atom in sets[s].iterAtomsForPackage(pkg):
- inst_matches = vartree.dbapi.match(atom)
- inst_matches.reverse() # descending order
- higher_slot = None
- for inst_cpv in inst_matches:
- try:
- inst_pkg = _pkg(inst_cpv)
- except KeyError:
- # It could have been uninstalled
- # by a concurrent process.
- continue
-
- if inst_pkg.cp != atom.cp:
- continue
- if pkg >= inst_pkg:
- # This is descending order, and we're not
- # interested in any versions <= pkg given.
- break
- if pkg.slot_atom != inst_pkg.slot_atom:
- higher_slot = inst_pkg
- break
- if higher_slot is None:
- parents.append(s)
- break
- if parents:
- #print colorize("WARN", "Package %s is going to be unmerged," % cpv)
- #print colorize("WARN", "but still listed in the following package sets:")
- #print " %s\n" % ", ".join(parents)
- print(colorize("WARN", "Not unmerging package %s as it is" % cpv))
- print(colorize("WARN", "still referenced by the following package sets:"))
- print(" %s\n" % ", ".join(parents))
- # adjust pkgmap so the display output is correct
- pkgmap[cp]["selected"].remove(cpv)
- all_selected.remove(cpv)
- pkgmap[cp]["protected"].add(cpv)
-
- del installed_sets
-
numselected = len(all_selected)
if not numselected:
writemsg_level(