mirror of
https://github.com/flatcar/scripts.git
synced 2025-11-22 19:11:35 +01:00
Fix --onlydeps flag.
When --onlydeps is specified, we don't want to merge packages that were
specified on the command-line. Previously, it threw an exception in this
case because it couldn't find the command-line packages in the list of
installed packages.
TEST=Run ./parallel_emerge --onlydeps autotest, and make sure it
doesn't crash.
Run ./parallel_emerge --board=x86-generic -po chromeos power_manager and make sure it does emerge power_manager, and doesn't crash.
BUG=none
Review URL: http://codereview.chromium.org/2868094
This commit is contained in:
parent
1365cf79ba
commit
56e08b2424
@ -664,16 +664,35 @@ class DepGraphGenerator(object):
|
|||||||
def RemoveInstalledPackages():
|
def RemoveInstalledPackages():
|
||||||
"""Remove installed packages, propagating dependencies."""
|
"""Remove installed packages, propagating dependencies."""
|
||||||
|
|
||||||
# If we're not in selective mode, the packages on the command line are
|
# If we're in non-selective mode, the packages specified on the command
|
||||||
# not optional.
|
# line are generally mandatory.
|
||||||
|
#
|
||||||
|
# There are a few exceptions to this rule:
|
||||||
|
# 1. If the package isn't getting installed because it's in
|
||||||
|
# package.provided, it's not mandatory.
|
||||||
|
# 2. If the package isn't getting installed because we're in --onlydeps
|
||||||
|
# mode, it's not mandatory either.
|
||||||
if "--selective" in emerge.opts:
|
if "--selective" in emerge.opts:
|
||||||
selective = emerge.opts["--selective"] != "n"
|
selective = emerge.opts["--selective"] != "n"
|
||||||
else:
|
else:
|
||||||
selective = "--noreplace" in emerge.opts or "--update" in emerge.opts
|
selective = "--noreplace" in emerge.opts or "--update" in emerge.opts
|
||||||
|
onlydeps = "--onlydeps" in emerge.opts
|
||||||
if not selective:
|
if not selective:
|
||||||
for pkg in emerge.cmdline_packages:
|
for pkg in emerge.cmdline_packages:
|
||||||
|
# If the package specified on the command-line is in our install
|
||||||
|
# list, mark it as non-optional.
|
||||||
|
found = False
|
||||||
for db_pkg in final_db.match_pkgs(pkg):
|
for db_pkg in final_db.match_pkgs(pkg):
|
||||||
deps_info[db_pkg.cpv]["optional"] = False
|
this_pkg = deps_info.get(db_pkg.cpv)
|
||||||
|
if this_pkg:
|
||||||
|
found = True
|
||||||
|
this_pkg["optional"] = False
|
||||||
|
|
||||||
|
# We didn't find the package in our final db. If we're not in
|
||||||
|
# --onlydeps mode, this likely means that the package was specified
|
||||||
|
# in package.provided.
|
||||||
|
if not found and not onlydeps and "--verbose" in emerge.opts:
|
||||||
|
print "Skipping %s (is it in package.provided?)" % pkg
|
||||||
|
|
||||||
# Schedule packages that aren't on the install list for removal
|
# Schedule packages that aren't on the install list for removal
|
||||||
rm_pkgs = set(deps_map.keys()) - set(deps_info.keys())
|
rm_pkgs = set(deps_map.keys()) - set(deps_info.keys())
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user