aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Harder <radhermit@gmail.com>2015-02-21 00:45:49 -0500
committerTim Harder <radhermit@gmail.com>2015-02-21 01:36:48 -0500
commitdd3c64836e26ca13488efa64afc5c4db2f79211f (patch)
treecc5a174ccb8c4e40f964aad2dc7ead817dc9ea58
parentreplace range with xrange (diff)
downloadpkgcore-dd3c64836e26ca13488efa64afc5c4db2f79211f.tar.gz
pkgcore-dd3c64836e26ca13488efa64afc5c4db2f79211f.tar.bz2
pkgcore-dd3c64836e26ca13488efa64afc5c4db2f79211f.zip
pmerge: drop -s/--set in favor of @set syntax
In addition, try to match some of the current portage behavior when specifying oneshot or update mode with package set arguments. This also fixes specifying multiple sets at once with @pkgset syntax. Previously the last set would override the previous one(s).
-rw-r--r--pkgcore/scripts/pmerge.py42
1 files changed, 17 insertions, 25 deletions
diff --git a/pkgcore/scripts/pmerge.py b/pkgcore/scripts/pmerge.py
index aafa6c5e..3ac8a5f6 100644
--- a/pkgcore/scripts/pmerge.py
+++ b/pkgcore/scripts/pmerge.py
@@ -14,6 +14,7 @@ __all__ = ("argparser", "AmbiguousQuery", "NoMatches")
import argparse
from functools import partial
+from itertools import chain
from time import time
from pkgcore.ebuild import resolver
@@ -32,19 +33,18 @@ from snakeoil.lists import stable_unique
class StoreTarget(argparse._AppendAction):
def __call__(self, parser, namespace, values, option_string=None):
+ sets = []
if isinstance(values, basestring):
values = [values]
for x in values:
if x.startswith('@'):
- ret = parser._parse_known_args(['--set', x[1:]], namespace)
- if ret[1]:
- raise RuntimeError(
- "failed parsing %r, %r, got back %r" %
- (option_string, values, ret[1]))
+ sets.append(x[1:])
else:
argparse._AppendAction.__call__(
self, parser, namespace,
parserestrict.parse_match(x), option_string=option_string)
+ if sets:
+ namespace.sets = sets
argparser = commandline.mk_argparser(
@@ -58,10 +58,6 @@ query_options.add_argument(
'-N', '--newuse', action='store_true',
help="check for changed useflags in installed packages "
"(implies -1)")
-query_options.add_argument(
- '-s', '--set', store_name=True,
- action=commandline.StoreConfigObject, type=str, priority=35,
- config_type='pkgset', help='specify a pkgset to use')
merge_mode = argparser.add_argument_group('Available operations')
merge_mode.add_argument(
@@ -315,8 +311,13 @@ def update_worldset(world_set, pkg, remove=False):
@argparser.bind_final_check
def _validate(parser, namespace):
+ if namespace.sets:
+ if namespace.targets is None:
+ namespace.targets = []
+ namespace.targets.extend(chain.from_iterable(
+ namespace.config.pkgset[x] for x in namespace.sets))
if namespace.unmerge:
- if namespace.set:
+ if namespace.sets:
parser.error("Using sets with -C probably isn't wise, aborting")
if namespace.upgrade:
parser.error("Cannot upgrade and unmerge simultaneously")
@@ -325,10 +326,11 @@ def _validate(parser, namespace):
if namespace.clean:
parser.error("Cannot use -C with --clean")
if namespace.clean:
- if namespace.set or namespace.targets:
+ if namespace.sets or namespace.targets:
parser.error("--clean currently cannot be used w/ any sets or "
"targets given")
- namespace.set = [(x, namespace.config.pkgset[x]) for x in ('world', 'system')]
+ namespace.targets = chain.from_iterable(
+ namespace.config.pkgset[x] for x in ('world', 'system'))
namespace.deep = True
if namespace.usepkgonly or namespace.usepkg or namespace.source_only:
parser.error(
@@ -338,9 +340,9 @@ def _validate(parser, namespace):
parser.error('--usepkg is redundant when --usepkgonly is used')
elif (namespace.usepkgonly or namespace.usepkg) and namespace.source_only:
parser.error("--source-only cannot be used with --usepkg nor --usepkgonly")
- if namespace.set:
+ if namespace.sets and not namespace.oneshot:
namespace.replace = False
- if not namespace.targets and not namespace.set and not namespace.newuse:
+ if not namespace.targets and not namespace.newuse:
parser.error('Need at least one atom/set')
if namespace.newuse:
namespace.oneshot = True
@@ -353,7 +355,6 @@ def _validate(parser, namespace):
return [val]
return val
namespace.targets = f(namespace.targets)
- namespace.set = f(namespace.set)
def parse_atom(restriction, repo, livefs_repos, return_none=False):
@@ -452,15 +453,6 @@ def main(options, out, err):
if getattr(x, 'repository_type', None) == 'source')
atoms = []
- for setname, pkgset in options.set:
- if pkgset is None:
- return 1
- l = list(pkgset)
- if not l:
- out.write("skipping set %s: set is empty, nothing to update" % setname)
- else:
- atoms.extend(l)
-
for token in options.targets:
try:
a = parse_atom(token, source_repos.combined, livefs_repos, return_none=True)
@@ -486,7 +478,7 @@ def main(options, out, err):
atoms = stable_unique(atoms)
- if (not options.set or options.clean) and not options.oneshot:
+ if options.clean and not options.oneshot:
if world_set is None:
err.write("Disable world updating via --oneshot, or fix your configuration")
return 1