src/modules/client/pkg_solver.py
author Shawn Walker-Salas <shawn.walker@oracle.com>
Fri, 26 Feb 2016 22:51:53 -0800
changeset 3317 81fca2c09539
parent 3294 6bc144461e5e
child 3328 9bfe1d86b9ce
permissions -rw-r--r--
21122796 pkg __comb_common_version branch sort can lead to odd ordering
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     1
#!/usr/bin/python
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     2
#
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     3
# CDDL HEADER START
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     4
#
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     8
#
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    12
# and limitations under the License.
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    13
#
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    19
#
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    20
# CDDL HEADER END
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    21
#
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    22
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    23
#
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
    24
# Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    25
#
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    26
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    27
"""Provides the interfaces and exceptions needed to determine which packages
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    28
should be installed, updated, or removed to perform a requested operation."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    29
3078
cef31428bd48 18588974 solver can fail with faulty rejections for incorporates
Shawn Walker <shawn.walker@oracle.com>
parents: 3030
diff changeset
    30
import operator
3234
3a90dc0b66c9 21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3213
diff changeset
    31
import six
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
    32
import time
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
    33
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
    34
import pkg.actions
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    35
import pkg.catalog           as catalog
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
    36
import pkg.client.api_errors as api_errors
2905
16b34634c06c 15817160 SUNBT7199714 Enhance IPS to monitor firmware dependencies
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2901
diff changeset
    37
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2164
diff changeset
    38
import pkg.client.image
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
    39
import pkg.fmri
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
    40
import pkg.misc as misc
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    41
import pkg.solver
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    42
import pkg.version           as version
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    43
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
    44
from collections import defaultdict
3194
185fd0ebde38 20892465 convert Python 2 code more like Python 3
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3185
diff changeset
    45
# Redefining built-in; pylint: disable=W0622
185fd0ebde38 20892465 convert Python 2 code more like Python 3
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3185
diff changeset
    46
from functools import reduce
2639
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
    47
from itertools import chain
2207
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
    48
from pkg.client.debugvalues import DebugValues
2905
16b34634c06c 15817160 SUNBT7199714 Enhance IPS to monitor firmware dependencies
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2901
diff changeset
    49
from pkg.client.firmware import Firmware
3160
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
    50
from pkg.client.pkgdefs import PKG_OP_UNINSTALL, PKG_OP_UPDATE
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
    51
from pkg.misc import EmptyI, EmptyDict, N_
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    52
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    53
SOLVER_INIT    = "Initialized"
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
    54
SOLVER_OXY     = "Not possible"
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    55
SOLVER_FAIL    = "Failed"
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    56
SOLVER_SUCCESS = "Succeeded"
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    57
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    58
#
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    59
# Constants representing reasons why packages were trimmed from possible set.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    60
# The reasons listed below do *not* always map 1:1 to the error text produced;
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    61
# instead, they indicate the 'type' of trim applied. Values below must be
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    62
# unique, but can be changed at any time.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    63
#
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    64
_TRIM_DEP_MISSING = 0              # no matching pkg version found for dep
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    65
_TRIM_DEP_OBSOLETE = 1             # all versions allowed by dep are obsolete
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    66
_TRIM_DEP_TRIMMED = 2              # all versions allowed by dep already trimmed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    67
_TRIM_FIRMWARE = 3                 # firmware version requirement
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    68
_TRIM_FREEZE = 4                   # pkg not allowed by freeze
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    69
_TRIM_INSTALLED_EXCLUDE = 5        # pkg excludes installed pkg
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    70
_TRIM_INSTALLED_INC = 6            # not allowed by installed pkg incorporation
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    71
_TRIM_INSTALLED_NEWER = 7          # newer version installed already
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    72
_TRIM_INSTALLED_ORIGIN = 8         # installed version in image too old
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    73
_TRIM_INSTALLED_ROOT_ORIGIN = 9    # installed version in root image too old
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    74
_TRIM_PARENT_MISSING = 10          # parent image must have this pkg too
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    75
_TRIM_PARENT_NEWER = 11            # parent image has newer version
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    76
_TRIM_PARENT_OLDER = 12            # parent image has older version
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    77
_TRIM_PARENT_PUB = 13              # parent image has different publisher
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    78
_TRIM_PROPOSED_INC = 14            # not allowed by requested pkg incorporation
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    79
_TRIM_PROPOSED_PUB = 15            # didn't match requested publisher
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    80
_TRIM_PROPOSED_VER = 16            # didn't match requested version
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    81
_TRIM_PUB_RANK = 17                # pkg from higher or lower ranked publisher
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    82
_TRIM_PUB_STICKY = 18              # pkg publisher != installed pkg publisher
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    83
_TRIM_REJECT = 19                  # --reject
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    84
_TRIM_UNSUPPORTED = 20             # invalid or unsupported actions
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    85
_TRIM_VARIANT = 21                 # unsupported variant (e.g. i386 on sparc)
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
    86
_TRIM_EXPLICIT_INSTALL = 22        # pkg.depend.explicit-install is true.
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
    87
_TRIM_SYNCED_INC = 23              # incorporation must be in sync with parent
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
    88
_TRIM_MAX = 24                     # number of trim constants
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    89
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    90
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
    91
class DependencyException(Exception):
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
    92
        """local exception used to pass failure to match
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
    93
        dependencies in packages out of nested evaluation"""
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
    94
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    95
        def __init__(self, reason_id, reason, fmris=EmptyI):
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
    96
                Exception.__init__(self)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
    97
                self.__fmris = fmris
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
    98
                self.__reason_id = reason_id
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
    99
                self.__reason = reason
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   100
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   101
        @property
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   102
        def fmris(self):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   103
                """The FMRIs related to the exception."""
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   104
                return self.__fmris
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   105
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   106
        @property
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   107
        def reason_id(self):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   108
                """A constant indicating why the related FMRIs were rejected."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   109
                return self.__reason_id
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   110
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   111
        @property
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   112
        def reason(self):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   113
                """A string describing why the related FMRIs were rejected."""
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   114
                return self.__reason
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   115
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   116
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   117
class PkgSolver(object):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   118
        """Provides a SAT-based solution solver to determine which packages
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   119
        should be installed, updated, or removed to perform a requested
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   120
        operation."""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   121
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   122
        def __init__(self, cat, installed_dict, pub_ranks, variants, avoids,
2450
154db1c01aec 18212 nuke extra_deps hack in pkg_solver.py asap
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2410
diff changeset
   123
            parent_pkgs, progtrack):
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   124
                """Create a PkgSolver instance; catalog should contain all
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   125
                known pkgs, installed fmris should be a dict of fmris indexed
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   126
                by name that define pkgs current installed in the image.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   127
                Pub_ranks dict contains (rank, stickiness, enabled) for each
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   128
                publisher.  variants are the current image variants; avoids is
2450
154db1c01aec 18212 nuke extra_deps hack in pkg_solver.py asap
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2410
diff changeset
   129
                the set of pkg stems being avoided in the image."""
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   130
2410
60b600d406df 18489 skip generating parent deps if we're running a build with parent deps
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2401
diff changeset
   131
                # check if we're allowed to use the solver
60b600d406df 18489 skip generating parent deps if we're running a build with parent deps
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2401
diff changeset
   132
                if DebugValues["no_solver"]:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   133
                        raise RuntimeError("no_solver set, but solver invoked")
2410
60b600d406df 18489 skip generating parent deps if we're running a build with parent deps
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2401
diff changeset
   134
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   135
                self.__catalog = cat
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   136
                self.__known_incs = set()       # stems with incorporate deps
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   137
                self.__publisher = {}           # indexed by stem
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   138
                self.__possible_dict = defaultdict(list) # indexed by stem
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   139
                self.__pub_ranks = pub_ranks    # rank indexed by pub
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   140
                self.__depend_ts = False        # flag used to indicate whether
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   141
                                                # any dependencies with
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   142
                                                # timestamps were seen; used in
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   143
                                                # error output generation
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   144
                self.__trim_dict = defaultdict(set) # fmris trimmed from
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   145
                                                # consideration
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   146
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   147
                self.__installed_dict = installed_dict.copy() # indexed by stem
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   148
                self.__installed_pkgs = frozenset(self.__installed_dict)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   149
                self.__installed_fmris = frozenset(
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   150
                    self.__installed_dict.values())
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   151
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   152
                self.__pub_trim = {}            # pkg names already
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   153
                                                # trimmed by pub.
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   154
                self.__removal_fmris = set()    # installed fmris we're
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   155
                                                # going to remove
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   156
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   157
                self.__req_pkg_names = set()    # package names that must be
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   158
                                                # present in solution by spec.
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   159
                for f in self.__installed_fmris: # record only sticky pubs
2639
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
   160
                        pub = f.publisher
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   161
                        if self.__pub_ranks[pub][1]:
2639
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
   162
                                self.__publisher[f.pkg_name] = pub
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   163
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   164
                self.__id2fmri = {}             # map ids -> fmris
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   165
                self.__fmri2id = {}             # and reverse
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   166
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   167
                self.__solver = pkg.solver.msat_solver()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   168
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   169
                self.__progtrack = progtrack    # progress tracker
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   170
                self.__progitem = None          # progress tracker plan item
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   171
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   172
                self.__addclause_failure = False
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   173
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   174
                self.__variant_dict = {}        # fmris -> variant cache
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   175
                self.__variants = variants      # variants supported by image
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   176
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   177
                self.__cache = {}
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   178
                self.__actcache = {}
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
   179
                self.__trimdone = False         # indicate we're finished
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
   180
                                                # trimming
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
   181
                self.__fmri_state = {}          # cache of obsolete, renamed
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
   182
                                                # bits so we can print something
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
   183
                                                # reasonable
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   184
                self.__state = SOLVER_INIT
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   185
                self.__iterations = 0
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   186
                self.__clauses     = 0
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   187
                self.__variables   = 0
3029
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
   188
                self.__subphasename = None
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   189
                self.__timings = []
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   190
                self.__start_time = 0
1688
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   191
                self.__inc_list = []
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   192
                self.__dependents = None
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   193
                self.__root_fmris = None        # set of fmris installed in root
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   194
                                                # image; used for origin
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   195
                                                # dependencies
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
   196
                self.__avoid_set = avoids.copy()# set of stems we're avoiding
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   197
                self.__obs_set = None           # set of obsolete stems
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
   198
                self.__reject_set = set()       # set of stems we're rejecting
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   199
                self.__linked_pkgs = set()      # pkgs that have parent deps
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
   200
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
   201
                # Internal cache of created fmri objects.  Used so that the same
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
   202
                # PkgFmri doesn't need to be created more than once.  This isn't
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
   203
                # a weakref dictionary because in two of the four places where
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
   204
                # PkgFmri's are created, the name is extracted and the PkgFmri
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
   205
                # object is immediately discarded.
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
   206
                self.__fmridict = {}
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
   207
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   208
                # Packages with explicit install action set to true.
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   209
                self.__expl_install_dict = {}
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   210
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   211
                assert isinstance(parent_pkgs, (type(None), frozenset))
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   212
                self.__parent_pkgs = parent_pkgs
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   213
                self.__parent_dict = dict()
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   214
                if self.__parent_pkgs != None:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   215
                        self.__parent_dict = dict([
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   216
                            (f.pkg_name, f)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   217
                            for f in self.__parent_pkgs
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   218
                        ])
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   219
3029
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
   220
                # cache of firmware dependencies
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
   221
                self.__firmware = Firmware()
2905
16b34634c06c 15817160 SUNBT7199714 Enhance IPS to monitor firmware dependencies
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2901
diff changeset
   222
3160
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   223
                self.__triggered_ops = {
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   224
                    PKG_OP_UNINSTALL : {
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   225
                        PKG_OP_UPDATE    : set(),
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   226
                        PKG_OP_UNINSTALL : set(),
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   227
                    },
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   228
                }
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   229
3248
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   230
                self.__allowed_downgrades = set()  # allowed downrev FMRIs
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   231
                self.__dg_incorp_cache = {}        # cache for downgradable
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   232
                                                   # incorp deps
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   233
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   234
        def __str__(self):
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   235
                s = "Solver: ["
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   236
                if self.__state in [SOLVER_FAIL, SOLVER_SUCCESS]:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   237
                        s += (" Variables: {0:d} Clauses: {1:d} Iterations: "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   238
                            "{2:d}").format(self.__variables, self.__clauses,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   239
                                self.__iterations)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   240
                s += " State: {0}]".format(self.__state)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   241
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   242
                s += "\nTimings: ["
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   243
                s += ", ".join([
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   244
                    "{0}: {1: 6.3f}".format(*a)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   245
                    for a in self.__timings
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   246
                ])
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   247
                s += "]"
1688
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   248
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   249
                if self.__inc_list:
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   250
                        incs = "\n\t".join([str(a) for a in self.__inc_list])
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   251
                else:
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   252
                        incs = "None"
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   253
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   254
                s += "\nMaintained incorporations: {0}\n".format(incs)
1688
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   255
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   256
                return s
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   257
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   258
        def __cleanup(self, rval):
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   259
                """Discards all solver information except for that needed to
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   260
                show failure information or to stringify the solver object.
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   261
                This allows early garbage collection to take place, and should
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   262
                be performed after a solution is successfully returned."""
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   263
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   264
                self.__catalog = None
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   265
                self.__installed_dict = {}
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   266
                self.__installed_pkgs = frozenset()
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   267
                self.__installed_fmris = frozenset()
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   268
                self.__publisher = {}
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   269
                self.__possible_dict = {}
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   270
                self.__pub_ranks = None
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   271
                self.__pub_trim = {}
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   272
                self.__removal_fmris = set()
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   273
                self.__id2fmri = None
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   274
                self.__fmri2id = None
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   275
                self.__solver = None
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   276
                self.__progtrack = None
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   277
                self.__addclause_failure = False
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   278
                self.__variant_dict = None
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   279
                self.__variants = None
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   280
                self.__cache = None
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   281
                self.__actcache = None
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   282
                self.__trimdone = None
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   283
                self.__fmri_state = None
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   284
                self.__start_time = None
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   285
                self.__dependents = None
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
   286
                self.__fmridict = {}
3029
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
   287
                self.__firmware = None
3248
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   288
                self.__allowed_downgrades = None
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   289
                self.__dg_incorp_cache = None
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   290
                self.__linked_pkgs = set()
2207
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
   291
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
   292
                if DebugValues["plan"]:
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
   293
                        # Remaining data must be kept.
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
   294
                        return rval
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
   295
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
   296
                self.__trim_dict = None
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   297
                return rval
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   298
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   299
        def __progress(self):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   300
                """Bump progress tracker to indicate processing is active."""
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   301
                assert self.__progitem
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   302
                self.__progtrack.plan_add_progress(self.__progitem)
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   303
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   304
        def __start_subphase(self, subphase=None, reset=False):
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   305
                """Add timing records and tickle progress tracker.  Ends
3029
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
   306
                previous subphase if ongoing."""
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   307
                if reset:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   308
                        self.__timings = []
3029
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
   309
                if self.__subphasename is not None:
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
   310
                        self.__end_subphase()
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   311
                self.__start_time = time.time()
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   312
                self.__subphasename = "phase {0:d}".format(subphase)
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   313
                self.__progress()
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   314
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   315
        def __end_subphase(self):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   316
                """Mark the end of a solver subphase, recording time taken."""
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   317
                now = time.time()
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   318
                self.__timings.append((self.__subphasename,
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   319
                    now - self.__start_time))
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   320
                self.__start_time = None
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   321
                self.__subphasename = None
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   322
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   323
        def __trim_frozen(self, existing_freezes):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   324
                """Trim any packages we cannot update due to freezes."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   325
                for f, r, _t in existing_freezes:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   326
                        if r:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   327
                                reason = (N_("This version is excluded by a "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   328
                                    "freeze on {0} at version {1}.  The "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   329
                                    "reason for the freeze is: {2}"),
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   330
                                    (f.pkg_name, f.version.get_version(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   331
                                        include_build=False), r))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   332
                        else:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   333
                                reason = (N_("This version is excluded by a "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   334
                                    "freeze on {0} at version {1}."),
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   335
                                    (f.pkg_name, f.version.get_version(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   336
                                        include_build=False)))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   337
                        self.__trim(self.__comb_auto_fmris(f, dotrim=False)[1],
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   338
                            _TRIM_FREEZE, reason)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   339
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   340
        def __raise_solution_error(self, no_version=EmptyI, no_solution=EmptyI):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   341
                """Raise a plan exception due to solution errors."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   342
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   343
                solver_errors = None
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   344
                if DebugValues["plan"]:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   345
                        solver_errors = self.get_trim_errors()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   346
                raise api_errors.PlanCreationException(no_solution=no_solution,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   347
                    no_version=no_version, solver_errors=solver_errors)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   348
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   349
        def __trim_proposed(self, proposed_dict):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   350
                """Remove any versions from proposed_dict that are in trim_dict
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   351
                and raise an exception if no matching version of a proposed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   352
                package can be installed at this point."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   353
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   354
                if proposed_dict is None:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   355
                        # Nothing to do.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   356
                        return
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   357
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   358
                # Used to de-dup errors.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   359
                already_seen = set()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   360
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   361
                ret = []
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   362
                for name in proposed_dict:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   363
                        tv = self.__dotrim(proposed_dict[name])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   364
                        if tv:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   365
                                proposed_dict[name] = tv
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   366
                                continue
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   367
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   368
                        ret.extend([_("No matching version of {0} can be "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   369
                            "installed:").format(name)])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   370
                        ret.extend(self.__fmri_list_errors(proposed_dict[name],
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   371
                            already_seen=already_seen))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   372
                        # continue processing and accumulate all errors
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   373
                if ret:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   374
                        self.__raise_solution_error(no_version=ret)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   375
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   376
        def __set_removed_and_required_packages(self, rejected, proposed=None):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   377
                """Sets the list of package to be removed from the image, the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   378
                list of packages to reject, the list of packages to avoid
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   379
                during the operation, and the list of packages that must not be
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   380
                removed from the image.
3104
5d93bdf1a849 15704264 variant mismatch message is cryptic
Aditya Tuteja <aditya.tuteja@oracle.com>
parents: 3094
diff changeset
   381
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   382
                'rejected' is a set of package stems to reject.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   383
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   384
                'proposed' is an optional set of FMRI objects representing
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   385
                packages to install or update.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   386
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   387
                Upon return:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   388
                  * self.__removal_fmris will contain the list of FMRIs to be
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   389
                    removed from the image due to user request or due to past
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   390
                    bugs that caused wrong variant to be installed by mistake.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   391
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   392
                  * self.__reject_set will contain the list of packages to avoid
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   393
                    or that were rejected by user request as appropriate."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   394
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   395
                if proposed is None:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   396
                        proposed = set()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   397
                else:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   398
                        # remove packages to be installed from avoid_set
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   399
                        self.__avoid_set -= proposed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   400
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   401
                self.__removal_fmris |= set([
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   402
                    self.__installed_dict[name]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   403
                    for name in rejected
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   404
                    if name in self.__installed_dict
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   405
                ] + [
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   406
                    f
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   407
                    for f in self.__installed_fmris
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   408
                    if not self.__trim_nonmatching_variants(f)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   409
                ])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   410
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   411
                self.__reject_set = rejected
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   412
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   413
                # trim fmris that user explicitly disallowed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   414
                for name in rejected:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   415
                        self.__trim(self.__get_catalog_fmris(name),
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   416
                            _TRIM_REJECT,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   417
                            N_("This version rejected by user request"))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   418
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   419
                self.__req_pkg_names = (self.__installed_pkgs |
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   420
                    proposed) - rejected
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   421
                self.__req_pkg_names -= set(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   422
                    f.pkg_name
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   423
                    for f in self.__removal_fmris
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   424
                )
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   425
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   426
        def __update_possible_closure(self, possible, excludes,
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   427
            full_trim=False, filter_explicit=True):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   428
                """Update the provided possible set of fmris with the transitive
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   429
                closure of dependencies that can be satisfied, trimming those
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   430
                packages that cannot be installed.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   431
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   432
                'possible' is a set of FMRI objects representing all possible
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   433
                versions of packages to consider for the operation.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   434
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   435
                'full_trim' is an optional boolean indicating whether a full
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   436
                trim of the dependency graph should be performed.  This is NOT
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   437
                required for the solver to find a solution.  Trimming is only
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   438
                needed to reduce the size of clauses and to provide error
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   439
                messages.  This requires multiple passes to determine if the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   440
                transitive closure of dependencies can be satisfied.  This is
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   441
                not required for correctness (and it greatly increases runtime).
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   442
                However, it does greatly improve error messaging for some error
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   443
                cases.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   444
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   445
                'filter_explicit' is an optional boolean indicating whether
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   446
                packages with pkg.depend.explicit-install set to true will be
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   447
                filtered out.
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   448
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   449
                An example of a case where full_trim will be useful (dueling
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   450
                incorporations):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   451
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   452
                Installed:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   453
                  entire
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   454
                    incorporates java-7-incorporation
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   455
                Proposed:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   456
                  osnet-incorporation
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   457
                    incorporates system/resource-mgmt/dynamic-resource-pools
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   458
                  system/resource-mgmt/dynamic-resource-pools
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   459
                    requires new version of java not allowed by installed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   460
                      java-7-incorporation"""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   461
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   462
                first = True
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   463
                while True:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   464
                        tsize = len(self.__trim_dict)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   465
                        res = self.__generate_dependency_closure(
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   466
                            possible, excludes=excludes, full_trim=full_trim,
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   467
                            filter_explicit=filter_explicit)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   468
                        if first:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   469
                                # The first pass will return the transitive
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   470
                                # closure of all dependencies; subsequent passes
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   471
                                # are only done for trimming, so need to update
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   472
                                # the possible set only on first pass.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   473
                                possible.update(res)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   474
                                first = False
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   475
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   476
                        nsize = len(self.__trim_dict)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   477
                        if not full_trim or nsize == tsize:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   478
                                # Nothing more to trim.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   479
                                break
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   480
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   481
                # Remove trimmed items from possible_set.
3234
3a90dc0b66c9 21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3213
diff changeset
   482
                possible.difference_update(six.iterkeys(self.__trim_dict))
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   483
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   484
        def __enforce_unique_packages(self, excludes):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   485
                """Constrain the solver solution so that only one version of
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   486
                each package can be installed and generate dependency clauses
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   487
                for possible packages."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   488
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   489
                # Generate clauses for only one version of each package, and
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   490
                # for dependencies for each package.  Do so for all possible
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   491
                # fmris.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   492
                for name in self.__possible_dict:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   493
                        self.__progress()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   494
                        # Ensure only one version of a package is installed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   495
                        self.__addclauses(self.__gen_highlander_clauses(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   496
                            self.__possible_dict[name]))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   497
                        # generate dependency clauses for each pkg
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   498
                        for fmri in self.__possible_dict[name]:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   499
                                for da in self.__get_dependency_actions(fmri,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   500
                                    excludes=excludes):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   501
                                        self.__addclauses(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   502
                                            self.__gen_dependency_clauses(fmri,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   503
                                            da))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   504
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   505
        def __generate_operation_clauses(self, proposed=None,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   506
            proposed_dict=None):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   507
                """Generate initial solver clauses for the proposed packages (if
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   508
                any) and installed packages.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   509
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   510
                'proposed' is a set of FMRI objects representing packages to
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   511
                install or update.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   512
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   513
                'proposed_dict' contains user specified FMRI objects indexed by
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   514
                pkg_name that should be installed or updated within an image."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   515
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   516
                assert ((proposed is None and proposed_dict is None) or
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   517
                    (proposed is not None and proposed_dict is not None))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   518
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   519
                if proposed is None:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   520
                        proposed = set()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   521
                if proposed_dict is None:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   522
                        proposed_dict = EmptyDict
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   523
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   524
                # Generate clauses for proposed and installed pkgs note that we
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   525
                # create clauses that require one of the proposed pkgs to work;
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   526
                # this allows the possible_set to always contain the existing
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   527
                # pkgs.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   528
                for name in proposed_dict:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   529
                        self.__progress()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   530
                        self.__addclauses(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   531
                            self.__gen_one_of_these_clauses(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   532
                                set(proposed_dict[name]) &
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   533
                                set(self.__possible_dict[name])))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   534
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   535
                for name in (self.__installed_pkgs - proposed -
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   536
                    self.__reject_set - self.__avoid_set):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   537
                        self.__progress()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   538
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   539
                        if (self.__installed_dict[name] in
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   540
                            self.__removal_fmris):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   541
                                # we're uninstalling this package
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   542
                                continue
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   543
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   544
                        if name in self.__possible_dict:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   545
                                self.__addclauses(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   546
                                    self.__gen_one_of_these_clauses(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   547
                                        self.__possible_dict[name]))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   548
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   549
        def __begin_solve(self):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   550
                """Prepares solver for solution creation returning a
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   551
                ProgressTracker object to be used for the operation."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   552
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   553
                # Once solution has been returned or failure has occurred, a new
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   554
                # solver must be used.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   555
                assert self.__state == SOLVER_INIT
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   556
                self.__state = SOLVER_OXY
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   557
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   558
                pt = self.__progtrack
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   559
                # Check to see if we were invoked by solve_uninstall, in
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   560
                # which case we don't want to restart what we've already
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   561
                # started.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   562
                if self.__progitem is None:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   563
                        self.__progitem = pt.PLAN_SOLVE_SETUP
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   564
                        pt.plan_start(pt.PLAN_SOLVE_SETUP)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   565
                self.__start_subphase(1, reset=True)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   566
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   567
                return pt
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   568
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   569
        def __end_solve(self, solution, excludes):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   570
                """Returns the solution result to the caller after completing
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   571
                all necessary solution cleanup."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   572
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   573
                pt = self.__progtrack
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   574
                self.__end_subphase()  # end the last subphase.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   575
                pt.plan_done(pt.PLAN_SOLVE_SOLVER)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   576
                return self.__cleanup((self.__elide_possible_renames(solution,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   577
                    excludes), (self.__avoid_set, self.__obs_set)))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   578
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   579
        def __assert_installed_allowed(self, proposed=None):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   580
                """Raises a PlanCreationException if the proposed operation
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   581
                would require the removal of installed packages that are not
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   582
                marked for removal by the proposed operation."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   583
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   584
                if proposed is None:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   585
                        proposed = set()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   586
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   587
                uninstall_fmris = []
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   588
                for name in (self.__installed_pkgs - proposed -
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   589
                    self.__reject_set - self.__avoid_set):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   590
                        self.__progress()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   591
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   592
                        if (self.__installed_dict[name] in
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   593
                            self.__removal_fmris):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   594
                                # we're uninstalling this package
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   595
                                continue
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   596
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   597
                        if name in self.__possible_dict:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   598
                                continue
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   599
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   600
                        # no version of this package is allowed
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   601
                        uninstall_fmris.append(self.__installed_dict[name])
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   602
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   603
                # Used to de-dup errors.
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   604
                already_seen = set()
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   605
                ret = []
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   606
                msg = N_("Package {0} must be uninstalled before the "
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   607
                    "requested operation can be "
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   608
                    "performed.")
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   609
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   610
                # First check for solver failures caused by missing parent
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   611
                # dependencies.  We do this because missing parent dependency
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   612
                # failures cause other cascading failures, so it's better to
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   613
                # just emit these failures first, have the user fix them, and
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   614
                # have them re-run the operation, so then we can provide more
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   615
                # concise error output about other problems.
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   616
                for fmri in uninstall_fmris:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   617
                        # Unused variable; pylint: disable=W0612
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   618
                        for reason_id, reason_t, fmris in \
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   619
                            self.__trim_dict[fmri]:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   620
                                if reason_id == _TRIM_PARENT_MISSING:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   621
                                        break
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   622
                        else:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   623
                                continue
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   624
                        res = self.__fmri_list_errors([fmri],
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   625
                            already_seen=already_seen)
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   626
                        assert res
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   627
                        ret.extend([msg.format(fmri.pkg_name)])
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   628
                        ret.extend(res)
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   629
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   630
                if ret:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   631
                        self.__raise_solution_error(no_version=ret)
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   632
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   633
                for fmri in uninstall_fmris:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   634
                        res = self.__fmri_list_errors([fmri],
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   635
                            already_seen=already_seen)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   636
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   637
                        # If no errors returned, that implies that all of the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   638
                        # reasons the FMRI was rejected aren't interesting.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   639
                        if res:
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   640
                                ret.extend([msg.format(fmri.pkg_name)])
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   641
                                ret.extend(res)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   642
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   643
                if ret:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   644
                        self.__raise_solution_error(no_version=ret)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   645
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   646
        def __assert_trim_errors(self, possible_set, excludes, proposed=None,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   647
            proposed_dict=None):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   648
                """Raises a PlanCreationException if any further trims would
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   649
                prevent the installation or update of proposed or
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   650
                installed/required packages.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   651
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   652
                'proposed' is an optional set of FMRI objects representing
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   653
                packages to install or update.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   654
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   655
                'proposed_dict' contains user specified FMRIs indexed by
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   656
                pkg_name that should be installed within an image.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   657
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   658
                'possible_set' is the set of FMRIs potentially allowed for use
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   659
                in the proposed operation."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   660
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   661
                # make sure all package trims appear
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   662
                self.__trimdone = False
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   663
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   664
                # First, perform a full trim of the package version space; this
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   665
                # is normally skipped for performance reasons as it's not
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   666
                # required for correctness.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   667
                self.__update_possible_closure(possible_set, excludes,
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
   668
                    full_trim=True, filter_explicit=False)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   669
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   670
                # Now try re-asserting that proposed (if any) and installed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   671
                # packages are allowed after the trimming; these calls will
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   672
                # raise an exception if all the proposed or any of the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   673
                # installed/required packages are trimmed.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   674
                self.__trim_proposed(proposed_dict)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   675
                self.__assign_possible(possible_set)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   676
                self.__assert_installed_allowed(proposed=proposed)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   677
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   678
        def __raise_install_error(self, exp, inc_list, proposed_dict,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   679
            possible_set, excludes):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   680
                """Private logic for solve_install() to process a
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   681
                PlanCreationException and re-raise as appropriate.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   682
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   683
                'exp' is the related exception object raised by the solver when
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   684
                no solution was found.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   685
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   686
                'inc_list' is a list of package FMRIs representing installed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   687
                incorporations that are being maintained.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   688
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   689
                'proposed_dict' contains user specified FMRIs indexed by
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   690
                pkg_name that should be installed within an image.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   691
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   692
                'possible_set' is the set of FMRIs potentially allowed for use
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   693
                in the proposed operation.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   694
                """
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   695
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   696
                # Before making a guess, apply extra trimming to see if we can
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   697
                # reject the operation based on changing packages.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   698
                self.__assert_trim_errors(possible_set, excludes,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   699
                    proposed_dict=proposed_dict)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   700
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   701
                # Despite all of the trimming done, we still don't know why the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   702
                # solver couldn't find a solution, so make a best effort guess
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   703
                # at the reason why.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   704
                info = []
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   705
                incs = []
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   706
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   707
                incs.append("")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   708
                if inc_list:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   709
                        incs.append("maintained incorporations:")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   710
                        skey = operator.attrgetter('pkg_name')
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   711
                        for il in sorted(inc_list, key=skey):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   712
                                incs.append("  {0}".format(il.get_short_fmri()))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   713
                else:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   714
                        incs.append("maintained incorporations: None")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   715
                incs.append("")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   716
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   717
                ms = self.__generate_dependency_errors([
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   718
                    b for a in proposed_dict.values()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   719
                    for b in a
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   720
                ], excludes=excludes)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   721
                if ms:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   722
                        info.append("")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   723
                        info.append(_("Plan Creation: dependency error(s) in "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   724
                            "proposed packages:"))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   725
                        info.append("")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   726
                        for s in ms:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   727
                                info.append("  {0}".format(s))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   728
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   729
                ms = self.__check_installed()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   730
                if ms:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   731
                        info.append("")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   732
                        info.append(_("Plan Creation: Errors in installed "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   733
                            "packages due to proposed changes:"))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   734
                        info.append("")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   735
                        for s in ms:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   736
                                info.append("  {0}".format(s))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   737
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   738
                if not info: # both error detection methods insufficent.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   739
                        info.append(_("Plan Creation: Package solver is "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   740
                            "unable to compute solution."))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   741
                        info.append(_("Dependency analysis is unable to "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   742
                            "determine exact cause."))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   743
                        info.append(_("Try specifying expected results to "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   744
                            "obtain more detailed error messages."))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   745
                        info.append(_("Include specific version of packages "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   746
                            "you wish installed."))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   747
                exp.no_solution = incs + info
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   748
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   749
                if DebugValues["plan"]:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   750
                        exp.solver_errors = self.get_trim_errors()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   751
                raise exp
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   752
3160
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   753
        def add_triggered_op(self, trigger_op, exec_op, fmris):
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   754
                """Add the set of FMRIs in 'fmris' to the internal dict of
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   755
                pkg-actuators. 'trigger_op' is the operation which triggered
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   756
                the pkg change, 'exec_op' is the operation which is supposed to
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   757
                be executed."""
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   758
3194
185fd0ebde38 20892465 convert Python 2 code more like Python 3
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3185
diff changeset
   759
                assert trigger_op in self.__triggered_ops, "{0} is " \
185fd0ebde38 20892465 convert Python 2 code more like Python 3
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3185
diff changeset
   760
                    "not a valid trigger op for pkg actuators".format(
185fd0ebde38 20892465 convert Python 2 code more like Python 3
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3185
diff changeset
   761
                    trigger_op)
185fd0ebde38 20892465 convert Python 2 code more like Python 3
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3185
diff changeset
   762
                assert exec_op in self.__triggered_ops[trigger_op], "{0} is " \
185fd0ebde38 20892465 convert Python 2 code more like Python 3
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3185
diff changeset
   763
                    "not a valid execution op for pkg actuators".format(exec_op)
3160
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   764
                assert isinstance(fmris, set)
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   765
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   766
                self.__triggered_ops[trigger_op][exec_op] |= fmris
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   767
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   768
        def solve_install(self, existing_freezes, proposed_dict,
2795
991aca55cea9 7193711 change-facet doesn't restore content for explicitly false facets
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2785
diff changeset
   769
            new_variants=None, excludes=EmptyI,
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   770
            reject_set=frozenset(), trim_proposed_installed=True,
3030
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   771
            relax_all=False, ignore_inst_parent_deps=False,
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   772
            exact_install=False, installed_dict_tmp=EmptyDict,
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   773
            insync=False):
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   774
                """Logic to install packages, change variants, and/or change
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   775
                facets.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   776
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   777
                Returns FMRIs to be installed / upgraded in system and a new
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   778
                set of packages to be avoided.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   779
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   780
                'existing_freezes' is a list of incorp. style FMRIs that
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   781
                constrain package motion.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   782
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   783
                'proposed_dict' contains user specified FMRIs indexed by
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   784
                pkg_name that should be installed within an image.
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
   785
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   786
                'new_variants' a dictionary containing variants which are
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   787
                being updated.  (It should not contain existing variants which
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   788
                are not changing.)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   789
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   790
                'reject_set' contains user specified package names that should
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   791
                not be present within the final image.  (These packages may or
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   792
                may not be currently installed.)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   793
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   794
                'trim_proposed_installed' is a boolean indicating whether the
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   795
                solver should elide versions of proposed packages older than
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   796
                those installed from the set of possible solutions.  If False,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   797
                package downgrades are allowed, but only for installed
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
   798
                packages matching those in the proposed_dict.
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   799
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   800
                'relax_all' indicates if the solver should relax all install
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   801
                holds, or only install holds specified by proposed packages.
2734
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
   802
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
   803
                'ignore_inst_parent_deps' indicates if the solver should
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
   804
                ignore parent dependencies for installed packages.  This
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
   805
                allows us to modify images with unsatisfied parent
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
   806
                dependencies (ie, out of sync images).  Any packaging
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
   807
                operation which needs to guarantee that we have an in sync
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
   808
                image (for example, sync-linked operations, or any recursive
3030
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   809
                packaging operations) should NOT enable this behavior.
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   810
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   811
                'exact_install' is a flag to indicate whether we treat the
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   812
                current image as an empty one. Any previously installed
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   813
                packages that are not either specified in proposed_dict or
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   814
                are a dependency (require, origin and parent dependencies)
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   815
                of those packages will be removed.
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   816
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   817
                'installed_dict_tmp' a dictionary containing the current
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   818
                installed FMRIs indexed by pkg_name. Used when exact_install
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   819
                is on.
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   820
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   821
                'insync' a flag indicating if the image is currently in sync."""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   822
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   823
                pt = self.__begin_solve()
3160
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   824
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   825
                # reject_set is a frozenset(), need to make copy to modify
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   826
                r_set = set(reject_set)
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   827
                for f in self.__triggered_ops[PKG_OP_UNINSTALL][PKG_OP_UPDATE]:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   828
                        if f.pkg_name in proposed_dict:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   829
                                proposed_dict[f.pkg_name].append(f)
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   830
                        else:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   831
                                proposed_dict[f.pkg_name] = [f]
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   832
                for f in \
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   833
                    self.__triggered_ops[PKG_OP_UNINSTALL][PKG_OP_UNINSTALL]:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   834
                        r_set.add(f.pkg_name)
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   835
                # re-freeze reject set
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   836
                reject_set = frozenset(r_set)
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   837
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   838
                proposed_pkgs = set(proposed_dict)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   839
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   840
                if new_variants:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   841
                        self.__variants = new_variants
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   842
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   843
                        #
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   844
                        # Entire packages can be tagged with variants thereby
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   845
                        # making those packages uninstallable in certain
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   846
                        # images.  So if we're changing variants such that
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   847
                        # some currently installed packages are becoming
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   848
                        # uninstallable add them to the removal package set.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   849
                        #
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   850
                        for f in self.__installed_fmris:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   851
                                d = self.__get_variant_dict(f)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   852
                                for k in new_variants:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   853
                                        if k in d and \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   854
                                            new_variants[k] not in d[k]:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   855
                                                self.__removal_fmris |= set([f])
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   856
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   857
                # proposed_dict already contains publisher selection logic,
2164
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   858
                # so prevent any further trimming of named packages based
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   859
                # on publisher if they are installed.
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   860
                for name in proposed_dict:
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   861
                        if name in self.__installed_dict:
2164
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   862
                                self.__mark_pub_trimmed(name)
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   863
                        else:
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   864
                                self.__publisher[name] = \
2639
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
   865
                                    proposed_dict[name][0].publisher
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   866
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   867
                # Determine which packages are to be removed, rejected, and
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   868
                # avoided and also determine which ones must not be removed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   869
                # during the operation.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   870
                self.__set_removed_and_required_packages(rejected=reject_set,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   871
                    proposed=proposed_pkgs)
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   872
                self.__progress()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   873
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   874
                # find list of incorps we don't let change as a side
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   875
                # effect of other changes; exclude any specified on
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   876
                # command line
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   877
                # translate proposed_dict into a set
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   878
                if relax_all:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   879
                        relax_pkgs = self.__installed_pkgs
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   880
                else:
2925
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
   881
                        relax_pkgs = proposed_pkgs | \
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
   882
                            self.__relax_parent_self_constrained(excludes,
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
   883
                                ignore_inst_parent_deps)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   884
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
   885
                inc_list, con_lists = self.__get_installed_unbound_inc_list(
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
   886
                    relax_pkgs, excludes=excludes)
1688
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   887
                self.__inc_list = inc_list
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
   888
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   889
                self.__start_subphase(2)
3248
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   890
                # generate set of possible fmris
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   891
                #
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   892
                # ensure existing pkgs stay installed; explicitly add in
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   893
                # installed fmris in case publisher change has occurred and
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   894
                # some pkgs aren't part of new publisher
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   895
                possible_set = set()
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   896
                self.__allowed_downgrades = set()
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   897
                for f in self.__installed_fmris - self.__removal_fmris:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   898
                        possible_set |= self.__comb_newer_fmris(f)[0] | set([f])
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   899
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   900
                # Add the proposed fmris, populate self.__expl_install_dict and
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   901
                # check for allowed downgrades.
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   902
                self.__expl_install_dict = defaultdict(list)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   903
                for name, flist in proposed_dict.items():
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   904
                        possible_set.update(flist)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   905
                        for f in flist:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   906
                                self.__progress()
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   907
                                self.__allowed_downgrades |= \
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   908
                                    self.__allow_incorp_downgrades(f,
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   909
                                    excludes=excludes)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   910
                                if self.__is_explicit_install(f):
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   911
                                        self.__expl_install_dict[name].append(f)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   912
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   913
                # For linked image sync we have to analyze all pkgs of the
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   914
                # possible_set because no proposed pkgs will be given. However,
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   915
                # that takes more time so only do this for syncs. The relax_all
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   916
                # flag is an indicator of a sync operation.
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   917
                if not proposed_dict.values() and relax_all:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   918
                        for f in possible_set:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   919
                                self.__progress()
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   920
                                self.__allowed_downgrades |= \
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   921
                                    self.__allow_incorp_downgrades(f,
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   922
                                    excludes=excludes)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   923
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   924
                possible_set |= self.__allowed_downgrades
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   925
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
   926
                self.__start_subphase(3)
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
   927
                # If requested, trim any proposed fmris older than those of
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
   928
                # corresponding installed packages.
3030
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   929
                # Because we have introduced exact-install where
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   930
                # self.__installed_fmris will be empty, in order to prevent
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   931
                # downgrading, we need to look up the full installed dictionary
3185
2e55bdb918e4 20283125 pkg set-publisher traceback for --add-property-value after --set-property
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3171
diff changeset
   932
                # stored in installed_dict_tmp.
3030
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   933
                if exact_install:
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   934
                        installed_fmris_tmp = frozenset(
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   935
                            installed_dict_tmp.values())
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   936
                        candidate_fmris = installed_fmris_tmp - \
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   937
                            self.__removal_fmris
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   938
                else:
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   939
                        candidate_fmris = self.__installed_fmris - \
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   940
                            self.__removal_fmris
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   941
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
   942
                for f in candidate_fmris:
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   943
                        self.__progress()
2119
43d21fd2abda 17296 pkg update can unintentionally go backwards
Shawn Walker <shawn.walker@oracle.com>
parents: 2089
diff changeset
   944
                        if not trim_proposed_installed and \
43d21fd2abda 17296 pkg update can unintentionally go backwards
Shawn Walker <shawn.walker@oracle.com>
parents: 2089
diff changeset
   945
                            f.pkg_name in proposed_dict:
43d21fd2abda 17296 pkg update can unintentionally go backwards
Shawn Walker <shawn.walker@oracle.com>
parents: 2089
diff changeset
   946
                                # Don't trim versions if newest version in
43d21fd2abda 17296 pkg update can unintentionally go backwards
Shawn Walker <shawn.walker@oracle.com>
parents: 2089
diff changeset
   947
                                # proposed dict is older than installed
43d21fd2abda 17296 pkg update can unintentionally go backwards
Shawn Walker <shawn.walker@oracle.com>
parents: 2089
diff changeset
   948
                                # version.
43d21fd2abda 17296 pkg update can unintentionally go backwards
Shawn Walker <shawn.walker@oracle.com>
parents: 2089
diff changeset
   949
                                verlist = proposed_dict[f.pkg_name]
43d21fd2abda 17296 pkg update can unintentionally go backwards
Shawn Walker <shawn.walker@oracle.com>
parents: 2089
diff changeset
   950
                                if verlist[-1].version < f.version:
43d21fd2abda 17296 pkg update can unintentionally go backwards
Shawn Walker <shawn.walker@oracle.com>
parents: 2089
diff changeset
   951
                                        # Assume downgrade is intentional.
43d21fd2abda 17296 pkg update can unintentionally go backwards
Shawn Walker <shawn.walker@oracle.com>
parents: 2089
diff changeset
   952
                                        continue
3160
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   953
                        valid_trigger = False
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   954
                        for tf in self.__triggered_ops[
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   955
                            PKG_OP_UNINSTALL][PKG_OP_UPDATE]:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   956
                                if tf.pkg_name == f.pkg_name:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   957
                                        self.__trim_older(tf)
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   958
                                        valid_trigger = True
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   959
                        if valid_trigger:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   960
                                continue
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
   961
2119
43d21fd2abda 17296 pkg update can unintentionally go backwards
Shawn Walker <shawn.walker@oracle.com>
parents: 2089
diff changeset
   962
                        self.__trim_older(f)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   963
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   964
                # trim fmris we excluded via proposed_fmris
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   965
                for name in proposed_dict:
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
   966
                        self.__progress()
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
   967
                        self.__trim(set(self.__get_catalog_fmris(name)) -
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   968
                            set(proposed_dict[name]),
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   969
                            _TRIM_PROPOSED_VER,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   970
                            N_("This version excluded by specified "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   971
                                "installation version"))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
   972
                        # trim packages excluded by incorps in proposed.
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
   973
                        self.__trim_recursive_incorps(proposed_dict[name],
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   974
                            excludes, _TRIM_PROPOSED_INC)
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   975
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   976
                # Trim packages with unsatisfied parent dependencies.  Then
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   977
                # if the current image is out of sync, for packages with
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   978
                # satisfied parent depencences (which will include
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   979
                # incorporations), call __trim_recursive_incorps() to trim out
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   980
                # more packages that are disallowed due to the synced
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   981
                # incorporations.
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   982
                if self.__is_child():
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   983
                        possible_linked = defaultdict(set)
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   984
                        for f in possible_set.copy():
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   985
                                self.__progress()
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   986
                                if not self.__trim_nonmatching_parents(f,
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   987
                                    excludes, ignore_inst_parent_deps):
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   988
                                        possible_set.remove(f)
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   989
                                        continue
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   990
                                if f in self.__linked_pkgs and not insync:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   991
                                        possible_linked[f.pkg_name].add(f)
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   992
                        for name in possible_linked:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   993
                                # calling __trim_recursive_incorps can be
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   994
                                # expensive so don't call it unnecessarily.
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   995
                                if name in proposed_dict:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   996
                                        possible_linked[name] -= \
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   997
                                            set(proposed_dict[name])
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   998
                                if not possible_linked[name]:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
   999
                                        continue
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1000
                                self.__progress()
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1001
                                self.__trim_recursive_incorps(
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1002
                                    list(possible_linked[name]),
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1003
                                    excludes, _TRIM_SYNCED_INC)
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1004
                        del possible_linked
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1005
3248
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1006
                self.__start_subphase(4)
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1007
                # now trim pkgs we cannot update due to maintained
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
  1008
                # incorporations
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1009
                for i, flist in zip(inc_list, con_lists):
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1010
                        reason = (N_("This version is excluded by installed "
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1011
                            "incorporation {0}"), (i.get_short_fmri(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1012
                                anarchy=True, include_scheme=False),))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1013
                        self.__trim(self.__comb_auto_fmris(i)[1],
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1014
                            _TRIM_INSTALLED_INC, reason)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1015
                        for f in flist:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1016
                                # dotrim=False here as we only want to trim
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1017
                                # packages that don't satisfy the incorporation.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1018
                                self.__trim(self.__comb_auto_fmris(f,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1019
                                    dotrim=False)[1], _TRIM_INSTALLED_INC,
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
  1020
                                    reason)
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1021
3248
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1022
                self.__start_subphase(5)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1023
                # now trim any pkgs we cannot update due to freezes
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1024
                self.__trim_frozen(existing_freezes)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1025
3248
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1026
                self.__start_subphase(6)
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
  1027
                # elide any proposed versions that don't match variants (arch
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
  1028
                # usually)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1029
                for name in proposed_dict:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1030
                        for fmri in proposed_dict[name]:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1031
                                self.__trim_nonmatching_variants(fmri)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1032
3248
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1033
                self.__start_subphase(7)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1034
                # remove any versions from proposed_dict that are in trim_dict
3128
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1035
                try:
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1036
                        self.__trim_proposed(proposed_dict)
3171
525f5bdb3f62 20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3160
diff changeset
  1037
                except api_errors.PlanCreationException as exp:
3128
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1038
                        # One or more proposed packages have been rejected.
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1039
                        self.__raise_install_error(exp, inc_list, proposed_dict,
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1040
                            set(), excludes)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1041
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1042
                self.__start_subphase(8)
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1043
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1044
                # Update the set of possible fmris with the transitive closure
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1045
                # of all dependencies.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1046
                self.__update_possible_closure(possible_set, excludes)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1047
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1048
                self.__start_subphase(9)
2666
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1049
                # trim any non-matching variants, origins or parents
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1050
                for f in possible_set:
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1051
                        self.__progress()
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1052
                        if not self.__trim_nonmatching_parents(f, excludes,
2734
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  1053
                            ignore_inst_parent_deps):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1054
                                continue
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1055
                        if not self.__trim_nonmatching_variants(f):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1056
                                continue
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1057
                        self.__trim_nonmatching_origins(f, excludes,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1058
                            exact_install=exact_install,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1059
                            installed_dict_tmp=installed_dict_tmp)
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1060
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1061
                self.__start_subphase(10)
2666
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1062
                # remove all trimmed fmris from consideration
3234
3a90dc0b66c9 21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3213
diff changeset
  1063
                possible_set.difference_update(six.iterkeys(self.__trim_dict))
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
  1064
                # remove any versions from proposed_dict that are in trim_dict
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
  1065
                # as trim dict has been updated w/ missing dependencies
3128
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1066
                try:
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1067
                        self.__trim_proposed(proposed_dict)
3171
525f5bdb3f62 20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3160
diff changeset
  1068
                except api_errors.PlanCreationException as exp:
3128
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1069
                        # One or more proposed packages have been rejected.
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1070
                        self.__raise_install_error(exp, inc_list, proposed_dict,
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1071
                            possible_set, excludes)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1072
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1073
                self.__start_subphase(11)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1074
                #
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1075
                # Generate ids, possible_dict for clause generation.  Prepare
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1076
                # the solver for invocation.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1077
                #
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1078
                self.__assign_fmri_ids(possible_set)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1079
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1080
                # Constrain the solution so that only one version of each
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1081
                # package can be installed.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1082
                self.__enforce_unique_packages(excludes)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1083
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1084
                self.__start_subphase(12)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1085
                # Add proposed and installed packages to solver.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1086
                self.__generate_operation_clauses(proposed=proposed_pkgs,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1087
                    proposed_dict=proposed_dict)
3128
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1088
                try:
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1089
                        self.__assert_installed_allowed(proposed=proposed_pkgs)
3171
525f5bdb3f62 20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3160
diff changeset
  1090
                except api_errors.PlanCreationException as exp:
3128
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1091
                        # One or more installed packages can't be retained or
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1092
                        # upgraded.
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1093
                        self.__raise_install_error(exp, inc_list, proposed_dict,
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1094
                            possible_set, excludes)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1095
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1096
                pt.plan_done(pt.PLAN_SOLVE_SETUP)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1097
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1098
                self.__progitem = pt.PLAN_SOLVE_SOLVER
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1099
                pt.plan_start(pt.PLAN_SOLVE_SOLVER)
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1100
                self.__start_subphase(13)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1101
                # save a solver instance so we can come back here
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1102
                # this is where errors happen...
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1103
                saved_solver = self.__save_solver()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1104
                try:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1105
                        saved_solution = self.__solve()
3171
525f5bdb3f62 20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3160
diff changeset
  1106
                except api_errors.PlanCreationException as exp:
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1107
                        # no solution can be found.
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1108
                        self.__raise_install_error(exp, inc_list, proposed_dict,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1109
                            possible_set, excludes)
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  1110
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1111
                self.__start_subphase(14)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1112
                # we have a solution that works... attempt to
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1113
                # reduce collateral damage to other packages
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1114
                # while still keeping command line pkgs at their
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1115
                # optimum level
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1116
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1117
                self.__restore_solver(saved_solver)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1118
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1119
                # fix the fmris that were specified on the cmd line
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1120
                # at their optimum (newest) level along with the
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1121
                # new dependencies, but try and avoid upgrading
1813
75dd7cb4911e 15007 pkg install downloads new developer/sunstudio12u1
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1798
diff changeset
  1122
                # already installed pkgs or adding un-needed new pkgs.
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1123
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1124
                for fmri in saved_solution:
1813
75dd7cb4911e 15007 pkg install downloads new developer/sunstudio12u1
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1798
diff changeset
  1125
                        if fmri.pkg_name in proposed_dict:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1126
                                self.__addclauses(
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1127
                                    self.__gen_one_of_these_clauses([fmri]))
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1128
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1129
                self.__start_subphase(15)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1130
                # save context
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1131
                saved_solver = self.__save_solver()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1132
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1133
                saved_solution = self.__solve(older=True)
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1134
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1135
                self.__start_subphase(16)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1136
                # Now we have the oldest possible original fmris
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1137
                # but we may have some that are not original
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1138
                # Since we want to move as far forward as possible
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1139
                # when we have to move a package, fix the originals
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1140
                # and drive forward again w/ the remainder
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1141
                self.__restore_solver(saved_solver)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1142
3253
a4cdd6047bbd 21744189 fix build failure due to pylint update
yiteng <yiteng.zhang@oracle.com>
parents: 3248
diff changeset
  1143
                for fmri in saved_solution & self.__installed_fmris:
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1144
                        self.__addclauses(
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1145
                            self.__gen_one_of_these_clauses([fmri]))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1146
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1147
                solution = self.__solve()
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1148
                self.__progress()
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1149
                solution = self.__update_solution_set(solution, excludes)
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1150
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1151
                return self.__end_solve(solution, excludes)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1152
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2164
diff changeset
  1153
        def solve_update_all(self, existing_freezes, excludes=EmptyI,
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1154
            reject_set=frozenset()):
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1155
                """Logic to update all packages within an image to the latest
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1156
                versions possible.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1157
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1158
                Returns FMRIs to be installed / upgraded in system and a new
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1159
                set of packages to be avoided.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1160
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1161
                'existing_freezes' is a list of incorp. style FMRIs that
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1162
                constrain pkg motion
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1163
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1164
                'reject_set' contains user specified FMRIs that should not be
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1165
                present within the final image.  (These packages may or may
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1166
                not be currently installed.)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1167
                """
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1168
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1169
                pt = self.__begin_solve()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1170
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1171
                # Determine which packages are to be removed, rejected, and
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1172
                # avoided and also determine which ones must not be removed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1173
                # during the operation.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1174
                self.__set_removed_and_required_packages(rejected=reject_set)
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1175
                self.__progress()
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2164
diff changeset
  1176
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1177
                self.__start_subphase(2)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1178
                # generate set of possible fmris
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1179
                possible_set = set()
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1180
                for f in self.__installed_fmris - self.__removal_fmris:
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1181
                        self.__progress()
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  1182
                        matching = self.__comb_newer_fmris(f)[0]
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  1183
                        if not matching:            # disabled publisher...
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  1184
                                matching = set([f]) # staying put is an option
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1185
                        possible_set |= matching
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1186
3248
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1187
                self.__allowed_downgrades = set()
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1188
                for f in possible_set:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1189
                        self.__allowed_downgrades |= \
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1190
                            self.__allow_incorp_downgrades(f, excludes=excludes)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1191
                possible_set |= self.__allowed_downgrades
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1192
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1193
                # trim fmris we cannot install because they're older
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1194
                for f in self.__installed_fmris:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1195
                        self.__progress()
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1196
                        self.__trim_older(f)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1197
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1198
                # now trim any pkgs we cannot update due to freezes
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1199
                self.__trim_frozen(existing_freezes)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  1200
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1201
                # Trim packages with unsatisfied parent dependencies.
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1202
                if self.__is_child():
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1203
                        for f in possible_set.copy():
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1204
                                self.__progress()
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1205
                                if not self.__trim_nonmatching_parents(f,
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1206
                                    excludes):
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1207
                                        possible_set.remove(f)
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1208
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1209
                self.__start_subphase(3)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1210
                # Update the set of possible FMRIs with the transitive closure
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1211
                # of all dependencies.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1212
                self.__update_possible_closure(possible_set, excludes)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1213
2666
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1214
                # trim any non-matching origins or parents
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1215
                for f in possible_set:
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1216
                        if self.__trim_nonmatching_parents(f, excludes):
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1217
                                if self.__trim_nonmatching_variants(f):
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1218
                                        self.__trim_nonmatching_origins(f,
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1219
                                            excludes)
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1220
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1221
                self.__start_subphase(4)
2666
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1222
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  1223
                # remove all trimmed fmris from consideration
3234
3a90dc0b66c9 21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3213
diff changeset
  1224
                possible_set.difference_update(six.iterkeys(self.__trim_dict))
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2164
diff changeset
  1225
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1226
                #
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1227
                # Generate ids, possible_dict for clause generation.  Prepare
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1228
                # the solver for invocation.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1229
                #
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1230
                self.__assign_fmri_ids(possible_set)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1231
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1232
                # Constrain the solution so that only one version of each
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1233
                # package can be installed.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1234
                self.__enforce_unique_packages(excludes)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1235
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1236
                self.__start_subphase(5)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1237
                # Add installed packages to solver.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1238
                self.__generate_operation_clauses()
3128
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1239
                try:
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1240
                        self.__assert_installed_allowed()
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1241
                except api_errors.PlanCreationException:
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1242
                        # Attempt a full trim to see if we can raise a sensible
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1243
                        # error.  If not, re-raise.
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1244
                        self.__assert_trim_errors(possible_set, excludes)
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1245
                        raise
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1246
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1247
                pt.plan_done(pt.PLAN_SOLVE_SETUP)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1248
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1249
                self.__progitem = pt.PLAN_SOLVE_SOLVER
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1250
                pt.plan_start(pt.PLAN_SOLVE_SOLVER)
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1251
                self.__start_subphase(6)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1252
                try:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1253
                        solution = self.__solve()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1254
                except api_errors.PlanCreationException:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1255
                        # No solution can be found; attempt a full trim to see
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1256
                        # if we can raise a sensible error.  If not, re-raise.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1257
                        self.__assert_trim_errors(possible_set, excludes)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1258
                        raise
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1259
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1260
                self.__update_solution_set(solution, excludes)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1261
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1262
                for f in solution.copy():
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1263
                        if self.__fmri_is_obsolete(f):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1264
                                solution.remove(f)
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1265
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1266
                # If solution doesn't match installed set of packages, then an
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1267
                # upgrade solution was found (heuristic):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1268
                if solution != self.__installed_fmris:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1269
                        return self.__end_solve(solution, excludes)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1270
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1271
                incorps = self.__get_installed_upgradeable_incorps(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1272
                    excludes)
3277
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  1273
                if not incorps or self.__is_child():
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1274
                        # If there are no installed, upgradeable incorporations,
3277
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  1275
                        # then assume that no updates were available.  Also if
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  1276
                        # we're a linked image child we may not be able to
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  1277
                        # update to the latest available incorporations due to
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  1278
                        # parent constraints, so don't generate an error.
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1279
                        return self.__end_solve(solution, excludes)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1280
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1281
                # Before making a guess, apply extra trimming to see if we can
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1282
                # reject the operation based on changing packages.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1283
                self.__assert_trim_errors(possible_set, excludes)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1284
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1285
                # Despite all of the trimming done, we still don't know why the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1286
                # solver couldn't find a solution, so make a best-effort guess
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1287
                # at the reason why.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1288
                skey = operator.attrgetter('pkg_name')
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1289
                info = []
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1290
                info.append(_("No solution found to update to latest available "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1291
                    "versions."))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1292
                info.append(_("This may indicate an overly constrained set of "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1293
                    "packages are installed."))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1294
                info.append(" ")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1295
                info.append(_("latest incorporations:"))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1296
                info.append(" ")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1297
                info.extend((
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1298
                    "  {0}".format(f)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1299
                    for f in sorted(incorps, key=skey)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1300
                ))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1301
                info.append(" ")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1302
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1303
                ms = self.__generate_dependency_errors(incorps,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1304
                    excludes=excludes)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1305
                ms.extend(self.__check_installed())
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1306
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1307
                if ms:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1308
                        info.append(_("The following indicates why the system "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1309
                            "cannot update to the latest version:"))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1310
                        info.append(" ")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1311
                        for s in ms:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1312
                                info.append("  {0}".format(s))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1313
                else:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1314
                        info.append(_("Dependency analysis is unable to "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1315
                            "determine the cause."))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1316
                        info.append(_("Try specifying expected versions to "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1317
                            "obtain more detailed error messages."))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1318
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1319
                self.__raise_solution_error(no_solution=info)
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1320
2734
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  1321
        def solve_uninstall(self, existing_freezes, uninstall_list, excludes,
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  1322
            ignore_inst_parent_deps=False):
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1323
                """Compute changes needed for uninstall"""
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1324
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1325
                self.__begin_solve()
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1326
2461
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1327
                # generate list of installed pkgs w/ possible renames removed to
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1328
                # forestall failing removal due to presence of unneeded renamed
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1329
                # pkg
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1330
                orig_installed_set = self.__installed_fmris
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1331
                renamed_set = orig_installed_set - \
1768
38fe0f4bd5ca 14624 KeyError in eliminating renamed packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1762
diff changeset
  1332
                    self.__elide_possible_renames(orig_installed_set, excludes)
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1333
3260
5592df722091 21911413 pkg triggered uninstalls fail if pkg to be removed depends on trigger
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3253
diff changeset
  1334
                proposed_removals = set(uninstall_list) | renamed_set | \
5592df722091 21911413 pkg triggered uninstalls fail if pkg to be removed depends on trigger
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3253
diff changeset
  1335
                    self.__triggered_ops[PKG_OP_UNINSTALL][PKG_OP_UNINSTALL]
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1336
3160
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1337
                # find pkgs which are going to be installed/updated
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1338
                triggered_set = set()
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1339
                for f in self.__triggered_ops[PKG_OP_UNINSTALL][PKG_OP_UPDATE]:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1340
                        triggered_set.add(f)
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1341
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1342
                # check for dependents
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1343
                for pfmri in proposed_removals:
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1344
                        self.__progress()
2461
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1345
                        dependents = self.__get_dependents(pfmri, excludes) - \
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1346
                            proposed_removals
3160
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1347
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1348
                        # Check if any of the dependents are going to be updated
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1349
                        # to a different version which might not have the same
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1350
                        # dependency constraints. If so, remove from dependents
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1351
                        # list.
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1352
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1353
                        # Example:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1354
                        # A@1 depends on B
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1355
                        # A@2 does not depend on B
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1356
                        #
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1357
                        # A@1 is currently installed, B is requested for removal
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1358
                        # -> not allowed
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1359
                        # pkg actuator updates A to 2
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1360
                        # -> now removal of B is allowed
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1361
                        candidates = dict(
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1362
                             (tf, f)
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1363
                             for f in dependents
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1364
                             for tf in triggered_set
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1365
                             if f.pkg_name == tf.pkg_name
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1366
                        )
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1367
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1368
                        for tf in candidates:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1369
                                remove = True
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1370
                                for da in self.__get_dependency_actions(tf,
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1371
                                    excludes):
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1372
                                        if da.attrs["type"] != "require":
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1373
                                                continue
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1374
                                        pkg_name = pkg.fmri.PkgFmri(
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1375
                                            da.attrs["fmri"]).pkg_name
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1376
                                        if pkg_name == pfmri.pkg_name:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1377
                                                remove = False
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1378
                                                break
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1379
                                if remove:
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1380
                                        dependents.remove(candidates[tf])
4ff47d7a70ae 18779149 pkg uninstall should support automatic downgrades from pkg metadata
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3128
diff changeset
  1381
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1382
                        if dependents:
2461
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1383
                                raise api_errors.NonLeafPackageException(pfmri,
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1384
                                    dependents)
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1385
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1386
                reject_set = set(f.pkg_name for f in proposed_removals)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1387
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1388
                # Run it through the solver; with more complex dependencies
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1389
                # we're going to be out of luck without it.
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1390
                self.__state = SOLVER_INIT # reset to initial state
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1391
                return self.solve_install(existing_freezes, {},
2734
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  1392
                    excludes=excludes, reject_set=reject_set,
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  1393
                    ignore_inst_parent_deps=ignore_inst_parent_deps)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1394
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1395
        def __update_solution_set(self, solution, excludes):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1396
                """Update avoid set w/ any missing packages (due to reject).
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1397
                Remove obsolete packages from solution.
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1398
                Keep track of which obsolete packages have group
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1399
                dependencies so verify of group packages w/ obsolete
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1400
                members works."""
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1401
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1402
                solution_stems = set(f.pkg_name for f in solution)
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1403
                tracked_stems = set()
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1404
                for fmri in solution:
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1405
                        for a in self.__get_dependency_actions(fmri,
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1406
                            excludes=excludes, trim_invalid=False):
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1407
                                if a.attrs["type"] != "group":
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1408
                                        continue
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1409
                                t = a.attrs["fmri"]
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1410
                                try:
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1411
                                        tmp = self.__fmridict[t]
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1412
                                except KeyError:
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1413
                                        tmp = pkg.fmri.PkgFmri(t)
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1414
                                        self.__fmridict[t] = tmp
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1415
                                tracked_stems.add(tmp.pkg_name)
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1416
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1417
                self.__avoid_set |= (tracked_stems - solution_stems)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1418
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1419
                ret = solution.copy()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1420
                obs = set()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1421
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1422
                for f in solution:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1423
                        if self.__fmri_is_obsolete(f):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1424
                                ret.remove(f)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1425
                                obs.add(f.pkg_name)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1426
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1427
                self.__obs_set = obs & tracked_stems
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1428
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1429
                return ret
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1430
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1431
        def __save_solver(self):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1432
                """Duplicate current current solver state and return it."""
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1433
                return (self.__addclause_failure,
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1434
                    pkg.solver.msat_solver(self.__solver))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1435
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1436
        def __restore_solver(self, solver):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1437
                """Set the current solver state to the previously saved one"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1438
                self.__addclause_failure, self.__solver = solver
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1439
                self.__iterations = 0
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1440
1786
14c232a5a4a0 14788 sometimes upgrade from osol 133 to onips 133 (with renames) doesn't work
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1768
diff changeset
  1441
        def __solve(self, older=False, max_iterations=2000):
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1442
                """Perform iterative solution; try for newest pkgs unless
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1443
                older=True"""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1444
                solution_vector = []
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1445
                self.__state = SOLVER_FAIL
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  1446
                eliminated = set()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1447
                while not self.__addclause_failure and self.__solver.solve([]):
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1448
                        self.__progress()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1449
                        self.__iterations += 1
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  1450
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  1451
                        if self.__iterations > max_iterations:
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1452
                                break
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  1453
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1454
                        solution_vector = self.__get_solution_vector()
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1455
                        if not solution_vector:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1456
                                break
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1457
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1458
                        # prevent the selection of any older pkgs
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1459
                        for fid in solution_vector:
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1460
                                pfmri = self.__getfmri(fid)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1461
                                matching, remaining = \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1462
                                    self.__comb_newer_fmris(pfmri)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1463
                                if not older:
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1464
                                        remove = remaining
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1465
                                else:
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1466
                                        remove = matching - set([pfmri]) - \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1467
                                            eliminated
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1468
                                for f in remove:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1469
                                        self.__addclauses([[-self.__getid(f)]])
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1470
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1471
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1472
                        # prevent the selection of this exact combo;
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1473
                        # permit [] solution
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1474
                        self.__addclauses([[-i for i in solution_vector]])
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1475
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1476
                if not self.__iterations:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1477
                        self.__raise_solution_error(no_solution=True)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1478
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1479
                self.__state = SOLVER_SUCCESS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1480
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1481
                solution = set([self.__getfmri(i) for i in solution_vector])
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1482
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1483
                return solution
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1484
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1485
        def __get_solution_vector(self):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1486
                """Return solution vector from solver"""
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1487
                return frozenset([
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1488
                    (i + 1) for i in range(self.__solver.get_variables())
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1489
                    if self.__solver.dereference(i)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1490
                ])
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1491
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1492
        def __assign_possible(self, possible_set):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1493
                """Assign __possible_dict of possible package FMRIs by pkg stem
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1494
                and mark trimming complete."""
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1495
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1496
                # generate dictionary of possible pkgs fmris by pkg stem
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1497
                self.__possible_dict.clear()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1498
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1499
                for f in possible_set:
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1500
                        self.__possible_dict[f.pkg_name].append(f)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1501
                for name in self.__possible_dict:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1502
                        self.__possible_dict[name].sort()
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1503
                self.__trimdone = True
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1504
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1505
        def __assign_fmri_ids(self, possible_set):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1506
                """ give a set of possible fmris, assign ids"""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1507
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1508
                self.__assign_possible(possible_set)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1509
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1510
                # assign clause numbers (ids) to possible pkgs
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1511
                pkgid = 1
3234
3a90dc0b66c9 21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3213
diff changeset
  1512
                for name in sorted(six.iterkeys(self.__possible_dict)):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1513
                        for fmri in reversed(self.__possible_dict[name]):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1514
                                self.__id2fmri[pkgid] = fmri
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1515
                                self.__fmri2id[fmri] = pkgid
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1516
                                pkgid += 1
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1517
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1518
                self.__variables = pkgid - 1
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1519
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1520
        def __getid(self, fmri):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1521
                """Translate fmri to variable number (id)"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1522
                return self.__fmri2id[fmri]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1523
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1524
        def __getfmri(self, fid):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1525
                """Translate variable number (id) to fmris"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1526
                return self.__id2fmri[fid]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1527
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1528
        def __get_fmris_by_version(self, pkg_name):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1529
                """Cache for catalog entries; helps performance"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1530
                if pkg_name not in self.__cache:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1531
                        self.__cache[pkg_name] = [
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1532
                            t
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1533
                            for t in self.__catalog.fmris_by_version(pkg_name)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1534
                        ]
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1535
                return self.__cache[pkg_name]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1536
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1537
        def __get_catalog_fmris(self, pkg_name):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1538
                """ return the list of fmris in catalog for this pkg name"""
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1539
                if pkg_name not in self.__pub_trim:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1540
                        self.__filter_publishers(pkg_name)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1541
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1542
                if self.__trimdone:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1543
                        return self.__possible_dict.get(pkg_name, [])
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1544
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1545
                return [
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1546
                    f
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1547
                    for tp in self.__get_fmris_by_version(pkg_name)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1548
                    for f in tp[1]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1549
                ]
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1550
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1551
        def __comb_newer_fmris(self, fmri, dotrim=True, obsolete_ok=True):
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2084
diff changeset
  1552
                """Returns tuple of set of fmris that are matched within
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1553
                CONSTRAINT.NONE of specified version and set of remaining
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1554
                fmris."""
2639
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  1555
3317
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1556
                return self.__comb_common(fmri, dotrim,
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1557
                    version.CONSTRAINT_NONE, obsolete_ok)
3078
cef31428bd48 18588974 solver can fail with faulty rejections for incorporates
Shawn Walker <shawn.walker@oracle.com>
parents: 3030
diff changeset
  1558
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1559
        def __comb_common(self, fmri, dotrim, constraint, obsolete_ok):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1560
                """Underlying impl. of other comb routines"""
2639
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  1561
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1562
                self.__progress()
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1563
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  1564
                tp = (fmri, dotrim, constraint, obsolete_ok) # cache index
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1565
                # determine if the data is cacheable or cached:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1566
                if (not self.__trimdone and dotrim) or tp not in self.__cache:
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1567
                        # use frozensets so callers don't inadvertently update
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1568
                        # these sets (which may be cached).
3317
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1569
                        all_fmris = set(self.__get_catalog_fmris(fmri.pkg_name))
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1570
                        matching = frozenset([
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1571
                            f
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1572
                            for f in all_fmris
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1573
                            if f not in self.__trim_dict or not dotrim
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1574
                            if not fmri.version or
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1575
                                fmri.version == f.version or
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1576
                                f.version.is_successor(fmri.version,
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1577
                                    constraint=constraint)
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1578
                            if obsolete_ok or not self.__fmri_is_obsolete(f)
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1579
                        ])
81fca2c09539 21122796 pkg __comb_common_version branch sort can lead to odd ordering
Shawn Walker-Salas <shawn.walker@oracle.com>
parents: 3294
diff changeset
  1580
                        remaining = frozenset(all_fmris - matching)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1581
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1582
                        # if we haven't finished trimming, don't cache this
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1583
                        if not self.__trimdone:
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1584
                                return matching, remaining
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1585
                        # cache the result
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1586
                        self.__cache[tp] = (matching, remaining)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1587
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1588
                return self.__cache[tp]
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1589
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1590
        def __comb_older_fmris(self, fmri, dotrim=True, obsolete_ok=True):
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1591
                """Returns tuple of set of fmris that are older than
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1592
                specified version and set of remaining fmris."""
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1593
                newer, older = self.__comb_newer_fmris(fmri, dotrim=False,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1594
                    obsolete_ok=obsolete_ok)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1595
                if not dotrim:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1596
                        return older, newer
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1597
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1598
                # we're going to return the older packages, so we need
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1599
                # to make sure that any trimmed packages are removed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1600
                # from the matching set and added to the non-matching
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1601
                # ones.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1602
                trimmed_older = set([
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1603
                    f
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1604
                    for f in older
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1605
                    if f in self.__trim_dict
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1606
                ])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1607
                return older - trimmed_older, newer | trimmed_older
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1608
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1609
        def __comb_auto_fmris(self, fmri, dotrim=True, obsolete_ok=True):
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1610
                """Returns tuple of set of fmris that are match within
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1611
                CONSTRAINT.AUTO of specified version and set of remaining
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1612
                fmris."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1613
                return self.__comb_common(fmri, dotrim, version.CONSTRAINT_AUTO,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1614
                    obsolete_ok)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1615
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1616
        def __fmri_loadstate(self, fmri, excludes):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1617
                """load fmri state (obsolete == True, renamed == True)"""
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1618
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1619
                try:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1620
                        relevant = dict([
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1621
                                (a.attrs["name"], a.attrs["value"])
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1622
                                for a in self.__catalog.get_entry_actions(fmri,
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1623
                                [catalog.Catalog.DEPENDENCY], excludes=excludes)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1624
                                if a.name == "set" and \
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1625
                                    a.attrs["name"] in ["pkg.renamed",
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1626
                                    "pkg.obsolete"]
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1627
                                ])
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1628
                except api_errors.InvalidPackageErrors:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1629
                        # Trim package entries that have unparseable action data
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1630
                        # so that they can be filtered out later.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1631
                        self.__fmri_state[fmri] = ("false", "false")
3104
5d93bdf1a849 15704264 variant mismatch message is cryptic
Aditya Tuteja <aditya.tuteja@oracle.com>
parents: 3094
diff changeset
  1632
                        self.__trim_unsupported(fmri)
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1633
                        return
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1634
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1635
                self.__fmri_state[fmri] = (
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1636
                    relevant.get("pkg.obsolete", "false").lower() == "true",
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1637
                    relevant.get("pkg.renamed", "false").lower() == "true")
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1638
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1639
        def __fmri_is_obsolete(self, fmri, excludes=EmptyI):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1640
                """check to see if fmri is obsolete"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1641
                if fmri not in self.__fmri_state:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1642
                        self.__fmri_loadstate(fmri, excludes)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1643
                return self.__fmri_state[fmri][0]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1644
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1645
        def __fmri_is_renamed(self, fmri, excludes=EmptyI):
1688
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
  1646
                """check to see if fmri is renamed"""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1647
                if fmri not in self.__fmri_state:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1648
                        self.__fmri_loadstate(fmri, excludes)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1649
                return self.__fmri_state[fmri][1]
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1650
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1651
        def __get_actions(self, fmri, name, excludes=EmptyI,
2461
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1652
            trim_invalid=True):
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1653
                """Return list of actions of type 'name' for this 'fmri' in
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1654
                Catalog.DEPENDENCY section."""
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2164
diff changeset
  1655
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  1656
                try:
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1657
                        return self.__actcache[(fmri, name)]
2639
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  1658
                except KeyError:
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  1659
                        pass
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  1660
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  1661
                try:
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1662
                        self.__actcache[(fmri, name)] = [
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  1663
                            a
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  1664
                            for a in self.__catalog.get_entry_actions(fmri,
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1665
                            [catalog.Catalog.DEPENDENCY], excludes=excludes)
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1666
                            if a.name == name
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1667
                        ]
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1668
                        return self.__actcache[(fmri, name)]
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  1669
                except api_errors.InvalidPackageErrors:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1670
                        if not trim_invalid:
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  1671
                                raise
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2164
diff changeset
  1672
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1673
                        # Trim package entries that have unparseable action
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1674
                        # data so that they can be filtered out later.
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1675
                        self.__fmri_state[fmri] = ("false", "false")
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1676
                        self.__trim_unsupported(fmri)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1677
                        return []
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1678
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1679
        def __get_dependency_actions(self, fmri, excludes=EmptyI,
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1680
            trim_invalid=True):
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1681
                """Return list of all dependency actions for this fmri."""
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1682
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1683
                return self.__get_actions(fmri, "depend",
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1684
                    excludes=excludes, trim_invalid=trim_invalid)
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1685
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1686
        def __get_set_actions(self, fmri, excludes=EmptyI,
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1687
            trim_invalid=True):
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1688
                """Return list of all set actions for this fmri in
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1689
                Catalog.DEPENDENCY section."""
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1690
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1691
                return self.__get_actions(fmri, "set",
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1692
                    excludes=excludes, trim_invalid=trim_invalid)
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1693
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1694
        def __get_variant_dict(self, fmri):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1695
                """Return dictionary of variants suppported by fmri"""
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1696
                try:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1697
                        if fmri not in self.__variant_dict:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1698
                                self.__variant_dict[fmri] = dict(
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1699
                                    self.__catalog.get_entry_all_variants(fmri))
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1700
                except api_errors.InvalidPackageErrors:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1701
                        # Trim package entries that have unparseable action data
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1702
                        # so that they can be filtered out later.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1941
diff changeset
  1703
                        self.__variant_dict[fmri] = {}
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1704
                        self.__trim_unsupported(fmri)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1705
                return self.__variant_dict[fmri]
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1706
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1707
        def __is_explicit_install(self, fmri):
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1708
                """check if given fmri has explicit install actions."""
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1709
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1710
                for sa in self.__get_set_actions(fmri):
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1711
                        if sa.attrs["name"] == "pkg.depend.explicit-install" \
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1712
                            and sa.attrs["value"].lower() == "true":
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1713
                                return True
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1714
                return False
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1715
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1716
        def __filter_explicit_install(self, fmri):
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1717
                """Check packages which have 'pkg.depend.explicit-install'
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1718
                action set to true, and prepare to filter."""
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1719
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1720
                will_filter = True
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1721
                # Filter out fmris with 'pkg.depend.explicit-install' set to
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1722
                # true and not present in self.__expl_install_dict or
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1723
                # self.__installed_dict.
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1724
                if self.__is_explicit_install(fmri):
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1725
                        pkg_name = fmri.pkg_name
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1726
                        if pkg_name in self.__expl_install_dict and \
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1727
                            fmri in self.__expl_install_dict[pkg_name]:
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1728
                                will_filter = False
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1729
                        elif pkg_name in self.__installed_dict and \
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1730
                            fmri == self.__installed_dict[pkg_name]:
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1731
                                will_filter = False
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1732
                else:
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1733
                        will_filter = False
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1734
                return will_filter
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1735
2461
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1736
        def __generate_dependency_closure(self, fmri_set, excludes=EmptyI,
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1737
            dotrim=True, full_trim=False, filter_explicit=True):
2461
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1738
                """return set of all fmris the set of specified fmris could
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1739
                depend on; while trimming those packages that cannot be
555e8b858d35 18653 conditional deps and uninstall: two great tastes that don't taste great together?
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2452
diff changeset
  1740
                installed"""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1741
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1742
                # Use a copy of the set provided by the caller to prevent
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1743
                # unexpected modification!
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1744
                needs_processing = set(fmri_set)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1745
                already_processed = set()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1746
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1747
                while needs_processing:
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  1748
                        self.__progress()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1749
                        fmri = needs_processing.pop()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1750
                        already_processed.add(fmri)
3197
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1751
                        # Trim filtered packages.
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1752
                        if filter_explicit and \
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1753
                            self.__filter_explicit_install(fmri):
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1754
                                reason = (N_("Uninstalled fmri {0} can "
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1755
                                    "only be installed if explicitly "
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1756
                                    "requested"), (fmri,))
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1757
                                self.__trim(fmri, _TRIM_EXPLICIT_INSTALL,
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1758
                                    reason)
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1759
                                continue
6699b44d5dee 20533255 pkg should have a mechanism to prevent pkgs from getting installed implicitly
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3194
diff changeset
  1760
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1761
                        needs_processing |= (self.__generate_dependencies(fmri,
3128
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1762
                            excludes, dotrim, full_trim) - already_processed)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1763
                return already_processed
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1764
3128
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1765
        def __generate_dependencies(self, fmri, excludes=EmptyI, dotrim=True,
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1766
            full_trim=False):
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1767
                """return set of direct (possible) dependencies of this pkg;
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1768
                trim those packages whose dependencies cannot be satisfied"""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1769
                try:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1770
                        return set([
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1771
                             f
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1772
                             for da in self.__get_dependency_actions(fmri,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1773
                                 excludes)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1774
                             # check most common ones first; what is checked
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1775
                             # here is a matter of optimization / messaging, not
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1776
                             # correctness.
2669
c43f0f4b768a 7165703 onu cannot uninstall entire
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2666
diff changeset
  1777
                             if da.attrs["type"] == "require" or
c43f0f4b768a 7165703 onu cannot uninstall entire
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2666
diff changeset
  1778
                                 da.attrs["type"] == "group" or
c43f0f4b768a 7165703 onu cannot uninstall entire
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2666
diff changeset
  1779
                                 da.attrs["type"] == "conditional" or
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1780
                                 da.attrs["type"] == "require-any" or
3128
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1781
                                 (full_trim and (
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1782
                                     da.attrs["type"] == "incorporate" or
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1783
                                     da.attrs["type"] == "optional" or
1b7c998226e0 19816038 pkg planning phase performance needs improvement
Shawn Walker <shawn.walker@oracle.com>
parents: 3104
diff changeset
  1784
                                     da.attrs["type"] == "exclude"))
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1785
                             for f in self.__parse_dependency(da, fmri,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1786
                                 dotrim, check_req=True)[1]
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1787
                        ])
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1788
3171
525f5bdb3f62 20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3160
diff changeset
  1789
                except DependencyException as e:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1790
                        self.__trim(fmri, e.reason_id, e.reason,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1791
                            fmri_adds=e.fmris)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1792
                        return set([])
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1793
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1794
        def __elide_possible_renames(self, fmris, excludes=EmptyI):
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1795
                """Return fmri list (which must be self-complete) with all
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1796
                renamed fmris that have no other fmris depending on them
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1797
                removed"""
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1798
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1799
                # figure out which have been renamed
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1800
                renamed_fmris = set([
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1801
                    pfmri
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1802
                    for pfmri in fmris
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1803
                    if self.__fmri_is_renamed(pfmri, excludes)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1804
                ])
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1805
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1806
                # return if nothing has been renamed
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1807
                if not renamed_fmris:
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1808
                        return set(fmris)
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1809
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1810
                fmris_by_name = dict(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1811
                    (pfmri.pkg_name, pfmri)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1812
                    for pfmri in fmris
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1813
                )
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1814
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1815
                # figure out which renamed fmris have dependencies; compute
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1816
                # transitively so we can handle multiple renames
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1817
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1818
                needs_processing = set(fmris) - renamed_fmris
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1819
                already_processed = set()
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1820
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1821
                while needs_processing:
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1822
                        pfmri = needs_processing.pop()
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1823
                        already_processed.add(pfmri)
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1824
                        for da in self.__get_dependency_actions(
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1825
                            pfmri, excludes):
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1826
                                if da.attrs["type"] not in \
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1827
                                    ("incorporate", "optional", "origin"):
2267
d8b8d0f7afab 18043 renamed packages in an image cause problems with require-any dependencies
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2228
diff changeset
  1828
                                        for f in da.attrlist("fmri"):
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1829
                                                try:
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1830
                                                        tmp = self.__fmridict[f]
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1831
                                                except KeyError:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1832
                                                        tmp = \
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1833
                                                            pkg.fmri.PkgFmri(f)
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1834
                                                        self.__fmridict[f] = tmp
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1835
                                                name = tmp.pkg_name
2267
d8b8d0f7afab 18043 renamed packages in an image cause problems with require-any dependencies
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2228
diff changeset
  1836
                                                if name not in fmris_by_name:
d8b8d0f7afab 18043 renamed packages in an image cause problems with require-any dependencies
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2228
diff changeset
  1837
                                                        continue
d8b8d0f7afab 18043 renamed packages in an image cause problems with require-any dependencies
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2228
diff changeset
  1838
                                                new_fmri = fmris_by_name[name]
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1839
                                                # since new_fmri will not be
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1840
                                                # treated as renamed, make sure
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1841
                                                # we check any dependencies it
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1842
                                                # has
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1843
                                                if new_fmri not in \
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1844
                                                    already_processed:
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1845
                                                        needs_processing.add(
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1846
                                                            new_fmri)
2267
d8b8d0f7afab 18043 renamed packages in an image cause problems with require-any dependencies
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2228
diff changeset
  1847
                                                renamed_fmris.discard(new_fmri)
1762
2ae663f0e049 14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1731
diff changeset
  1848
                return set(fmris) - renamed_fmris
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1849
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  1850
1688
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
  1851
        def __get_dependents(self, pfmri, excludes=EmptyI):
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1852
                """return set of installed fmris that have require dependencies
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  1853
                on specified installed fmri"""
1688
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
  1854
                if self.__dependents is None:
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
  1855
                        self.__dependents = {}
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1856
                        for f in self.__installed_fmris:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1857
                                for da in self.__get_dependency_actions(f,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1858
                                    excludes):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1859
                                        if da.attrs["type"] != "require":
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1860
                                                continue
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1861
                                        pkg_name = pkg.fmri.PkgFmri(
2958
868e07939116 16851082 build_release (aka build version) should not be displayed
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 2925
diff changeset
  1862
                                            da.attrs["fmri"]).pkg_name
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1863
                                        self.__dependents.setdefault(
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1864
                                            self.__installed_dict[pkg_name],
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1865
                                            set()).add(f)
1688
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
  1866
                return self.__dependents.get(pfmri, set())
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
  1867
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1868
        def __trim_recursive_incorps(self, fmri_list, excludes, reason_id):
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1869
                """trim packages affected by incorporations"""
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1870
                processed = set()
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1871
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1872
                work = [fmri_list]
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1873
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1874
                if reason_id == _TRIM_PROPOSED_INC:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1875
                        reason = N_(
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1876
                            "Excluded by proposed incorporation '{0}'")
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1877
                elif reason_id == _TRIM_SYNCED_INC:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1878
                        reason = N_(
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1879
                            "Excluded by synced parent incorporation '{0}'")
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1880
                else:
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1881
                        raise AssertionError(
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1882
                            "Invalid reason_id value: {0}".format(reason_id))
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1883
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1884
                while work:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1885
                        fmris = work.pop()
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1886
                        processed.add(frozenset(fmris))
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1887
                        d = self.__combine_incorps(fmris, excludes)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1888
                        for name in d:
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1889
                                self.__trim(d[name][1], reason_id,
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  1890
                                    (reason, (fmris[0].pkg_name,)))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1891
                                to_do = d[name][0]
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1892
                                if to_do and frozenset(to_do) not in processed:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1893
                                        work.append(list(to_do))
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1894
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1895
        def __combine_incorps(self, fmri_list, excludes):
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1896
                """Given a list of fmris, one of which must be present, produce
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1897
                a dictionary indexed by package name, which contains a tuple
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1898
                of two sets (matching fmris, nonmatching)"""
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1899
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1900
                dict_list = [
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1901
                    self.__get_incorp_nonmatch_dict(f, excludes)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1902
                    for f in fmri_list
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1903
                ]
2202
044dc70500ff 17795 DC builds for 158 are pulling 153 pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2197
diff changeset
  1904
                # The following ignores constraints that appear in only some of
044dc70500ff 17795 DC builds for 158 are pulling 153 pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2197
diff changeset
  1905
                # the versions.  This also handles obsoletions & renames.
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1906
                all_keys = reduce(set.intersection,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1907
                    (set(d.keys()) for d in dict_list))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1908
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1909
                return dict(
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1910
                    (k,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1911
                     (reduce(set.union,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1912
                         (d.get(k, (set(), set()))[0]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1913
                          for d in dict_list)),
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1914
                      reduce(set.intersection,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1915
                         (d.get(k, (set(), set()))[1]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1916
                          for d in dict_list))))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1917
                    for k in all_keys
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1918
                )
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1919
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1920
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1921
        def __get_incorp_nonmatch_dict(self, fmri, excludes):
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1922
                """Given a fmri with incorporation dependencies, produce a
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1923
                dictionary containing (matching, non matching fmris),
3029
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1924
                indexed by pkg name.  Note that some fmris may be
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1925
                incorporated more than once at different levels of
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1926
                specificity"""
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1927
                ret = dict()
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1928
                for da in self.__get_dependency_actions(fmri,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1929
                    excludes=excludes):
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1930
                        if da.attrs["type"] != "incorporate":
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1931
                                continue
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1932
                        nm, m, _c, _d, _r, f = self.__parse_dependency(da, fmri,
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1933
                            dotrim=False)
3029
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1934
                        # Collect all incorp. dependencies affecting
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1935
                        # a package in a list.  Note that it is
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1936
                        # possible for both matching and non-matching
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1937
                        # sets to be NULL, and we'll need at least
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1938
                        # one item in the list for reduce to work.
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1939
                        ret.setdefault(f.pkg_name, (list(), list()))
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1940
                        ret[f.pkg_name][0].append(set(m))
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1941
                        ret[f.pkg_name][1].append(set(nm))
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1942
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1943
                # For each of the packages constrained, combine multiple
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1944
                # incorporation dependencies.  Matches are intersected,
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1945
                # non-matches form a union.
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1946
                for pkg_name in ret:
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1947
                        ret[pkg_name] = (
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1948
                            reduce(set.intersection, ret[pkg_name][0]),
6bbe73288425 15713570 SUNBT7140112 solver error messaging unclear when installed, unincorporated packa
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2958
diff changeset
  1949
                            reduce(set.union, ret[pkg_name][1]))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1950
                return ret
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1951
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1952
        def __parse_dependency(self, dependency_action, source,
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1953
            dotrim=True, check_req=False):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1954
                """Return tuple of (disallowed fmri list, allowed fmri list,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1955
                conditional_list, dependency_type, required)"""
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  1956
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1957
                dtype = dependency_action.attrs["type"]
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1958
                fmris = []
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1959
                for fmristr in dependency_action.attrlist("fmri"):
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1960
                        try:
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1961
                                fmri = self.__fmridict[fmristr]
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1962
                        except KeyError:
2958
868e07939116 16851082 build_release (aka build version) should not be displayed
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 2925
diff changeset
  1963
                                fmri = pkg.fmri.PkgFmri(fmristr)
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1964
                                self.__fmridict[fmristr] = fmri
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1965
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1966
                        if not self.__depend_ts:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1967
                                fver = fmri.version
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1968
                                if fver and fver.timestr:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1969
                                        # Include timestamp in all error
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1970
                                        # output for dependencies.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1971
                                        self.__depend_ts = True
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1972
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1973
                        fmris.append(fmri)
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  1974
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  1975
                fmri = fmris[0]
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  1976
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1977
                # true if match is required for containing pkg
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1978
                required = True
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1979
                # if this dependency has conditional fmris
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1980
                conditional = None
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1981
                # true if obsolete pkgs satisfy this dependency
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1982
                obsolete_ok = False
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1983
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1984
                if dtype == "require":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1985
                        matching, nonmatching = \
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1986
                            self.__comb_newer_fmris(fmri, dotrim,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  1987
                                obsolete_ok=obsolete_ok)
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  1988
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1989
                elif dtype == "optional":
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1990
                        obsolete_ok = True
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1991
                        matching, nonmatching = \
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1992
                            self.__comb_newer_fmris(fmri, dotrim,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1993
                            obsolete_ok=obsolete_ok)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1994
                        if fmri.pkg_name not in self.__req_pkg_names:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1995
                                required = False
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  1996
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1997
                elif dtype == "exclude":
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  1998
                        obsolete_ok = True
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1999
                        matching, nonmatching = \
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2000
                            self.__comb_older_fmris(fmri, dotrim,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2001
                            obsolete_ok=obsolete_ok)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2002
                        if fmri.pkg_name not in self.__req_pkg_names:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2003
                                required = False
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2004
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2005
                elif dtype == "incorporate":
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2006
                        obsolete_ok = True
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2007
                        matching, nonmatching = \
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2008
                            self.__comb_auto_fmris(fmri, dotrim,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2009
                            obsolete_ok=obsolete_ok)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2010
                        if fmri.pkg_name not in self.__req_pkg_names:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2011
                                required = False
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2012
                        # Track packages that deliver incorporate deps.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2013
                        self.__known_incs.add(source.pkg_name)
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2014
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2015
                elif dtype == "conditional":
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2016
                        cond_fmri = pkg.fmri.PkgFmri(
2958
868e07939116 16851082 build_release (aka build version) should not be displayed
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 2925
diff changeset
  2017
                            dependency_action.attrs["predicate"])
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2018
                        conditional, nonmatching = self.__comb_newer_fmris(
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2019
                            cond_fmri, dotrim, obsolete_ok=obsolete_ok)
2468
ce77b64883c4 18710 conditional dependencies can cause install and uninstall failure when dependency cannot be installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2461
diff changeset
  2020
                        # Required is only really helpful for solver error
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2021
                        # messaging.  The only time we know that this dependency
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2022
                        # is required is when the predicate package must be part
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2023
                        # of the solution.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2024
                        if cond_fmri.pkg_name not in self.__req_pkg_names:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2025
                                required = False
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2026
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2027
                        matching, nonmatching = \
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2028
                            self.__comb_newer_fmris(fmri, dotrim,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2029
                            obsolete_ok=obsolete_ok)
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2030
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2031
                elif dtype == "require-any":
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2032
                        matching = []
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2033
                        nonmatching = []
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2034
                        for f in fmris:
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2035
                                m, nm = self.__comb_newer_fmris(f, dotrim,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2036
                                    obsolete_ok=obsolete_ok)
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2037
                                matching.extend(m)
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2164
diff changeset
  2038
                                nonmatching.extend(nm)
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2039
2347
d65d04108db1 18308 solver can traceback if no solution is found and require-any dependency was parsed
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  2040
                        matching = set(matching)
d65d04108db1 18308 solver can traceback if no solution is found and require-any dependency was parsed
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  2041
                        nonmatching = set(nonmatching)
d65d04108db1 18308 solver can traceback if no solution is found and require-any dependency was parsed
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  2042
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2043
                elif dtype == "parent":
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  2044
                        # Parent dependency fmris must exist outside of the
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  2045
                        # current image, so we don't report any new matching
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  2046
                        # or nonmatching requirements for the solver.
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  2047
                        matching = nonmatching = frozenset()
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2048
                        required = False
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2049
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2050
                elif dtype == "origin":
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2051
                        matching, nonmatching = \
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2052
                            self.__comb_newer_fmris(fmri, dotrim=False,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2053
                            obsolete_ok=obsolete_ok)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2054
                        required = False
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2055
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2056
                elif dtype == "group":
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2057
                        obsolete_ok = True
2697
228d1e19d461 7178308 parse_dependency corrupts shared cache if pkg:/consolidation/osnet/osnet-all is installed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2693
diff changeset
  2058
                        # remove version explicitly; don't modify cached fmri
228d1e19d461 7178308 parse_dependency corrupts shared cache if pkg:/consolidation/osnet/osnet-all is installed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2693
diff changeset
  2059
                        if fmri.version is not None:
228d1e19d461 7178308 parse_dependency corrupts shared cache if pkg:/consolidation/osnet/osnet-all is installed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2693
diff changeset
  2060
                                fmri = fmri.copy()
228d1e19d461 7178308 parse_dependency corrupts shared cache if pkg:/consolidation/osnet/osnet-all is installed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2693
diff changeset
  2061
                                fmri.version = None
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2062
                        if fmri.pkg_name in self.__avoid_set or \
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2063
                            fmri.pkg_name in self.__reject_set:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2064
                                required = False
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2065
                                matching = nonmatching = frozenset()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2066
                        else:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2067
                                matching, nonmatching = self.__comb_newer_fmris(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2068
                                    fmri, dotrim, obsolete_ok=obsolete_ok)
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2069
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2070
                else: # only way this happens is if new type is incomplete
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2071
                        raise api_errors.InvalidPackageErrors(
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2072
                            "Unknown dependency type {0}".format(dtype))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2073
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2074
                # check if we're throwing exceptions and we didn't find any
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2075
                # matches on a required package
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2076
                if not check_req or matching or not required:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2077
                        return (nonmatching, matching, conditional, dtype,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2078
                            required, fmri)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2079
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2080
                # Neither build or publisher is interesting for dependencies.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2081
                fstr = fmri.get_fmri(anarchy=True, include_build=False,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2082
                    include_scheme=False)
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2083
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2084
                # we're going to toss an exception
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2085
                if dtype == "exclude":
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2086
                        # If we reach this point, we know that a required
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2087
                        # package (already installed or proposed) was excluded.
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2088
                        matching, nonmatching = self.__comb_older_fmris(
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2089
                            fmri, dotrim=False, obsolete_ok=False)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2090
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2091
                        # Determine if excluded package is already installed.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2092
                        installed = False
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2093
                        for f in nonmatching:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2094
                                if f in self.__installed_fmris:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2095
                                        installed = True
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2096
                                        break
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2097
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2098
                        if not matching and installed:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2099
                                # The exclude dependency doesn't allow the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2100
                                # version of the package that is already
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2101
                                # installed.
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2102
                                raise DependencyException(
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2103
                                    _TRIM_INSTALLED_EXCLUDE,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2104
                                    (N_("Package contains 'exclude' dependency "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2105
                                        "{0} on installed package"), (fstr,)))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2106
                        elif not matching and not installed:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2107
                                # The exclude dependency doesn't allow any
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2108
                                # version of the package that is proposed.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2109
                                raise DependencyException(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2110
                                    _TRIM_INSTALLED_EXCLUDE,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2111
                                    (N_("Package contains 'exclude' dependency "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2112
                                        "{0} on proposed package"), (fstr,)))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2113
                        else:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2114
                                # All versions of the package allowed by the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2115
                                # exclude dependency were trimmed by other
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2116
                                # dependencies.  If changed, update _fmri_errors
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2117
                                # _TRIM_DEP_TRIMMED.
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2118
                                raise DependencyException(
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2119
                                    _TRIM_DEP_TRIMMED,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2120
                                    (N_("No version allowed by 'exclude' "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2121
                                        "dependency {0} could be installed"),
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2122
                                        (fstr,)), matching)
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2123
                        # not reached
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2124
                elif dtype == "incorporate":
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2125
                        matching, nonmatching = \
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2126
                            self.__comb_auto_fmris(fmri, dotrim=False,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2127
                            obsolete_ok=obsolete_ok)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2128
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2129
                # check if allowing obsolete packages helps
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2130
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2131
                elif obsolete_ok == False:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2132
                        # see if allowing obsolete pkgs gets us some matches
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2133
                        if len(fmris) == 1:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2134
                                matching, nonmatching = \
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2135
                                    self.__comb_newer_fmris(fmri, dotrim,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2136
                                    obsolete_ok=True)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2137
                        else:
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2138
                                matching = []
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2139
                                nonmatching = []
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2140
                                for f in fmris:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2141
                                        m, nm = self.__comb_newer_fmris(f,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2142
                                            dotrim, obsolete_ok=True)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2143
                                        matching.extend(m)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2144
                                        nonmatching.extend(nm)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2145
                        if matching:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2146
                                if len(fmris) == 1:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2147
                                        raise DependencyException(
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2148
                                            _TRIM_DEP_OBSOLETE,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2149
                                            (N_("All acceptable versions of "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2150
                                                "'{0}' dependency on {1} are "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2151
                                                "obsolete"), (dtype, fstr)))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2152
                                else:
3213
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2153
                                        sfmris = frozenset([
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2154
                                            fmri.get_fmri(anarchy=True,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2155
                                                include_build=False,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2156
                                                include_scheme=False)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2157
                                            for f in fmris
3213
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2158
                                        ])
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2159
                                        raise DependencyException(
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2160
                                            _TRIM_DEP_OBSOLETE,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2161
                                            (N_("All acceptable versions of "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2162
                                                "'{0}' dependencies on {1} are "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2163
                                                "obsolete"), (dtype, sfmris)))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2164
                        # something else is wrong
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2165
                        matching, nonmatching = self.__comb_newer_fmris(fmri,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2166
                            dotrim=False, obsolete_ok=obsolete_ok)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2167
                else:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2168
                        # try w/o trimming anything
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2169
                        matching, nonmatching = self.__comb_newer_fmris(fmri,
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2170
                            dotrim=False, obsolete_ok=obsolete_ok)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2171
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2172
                if not matching:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2173
                        raise DependencyException(_TRIM_DEP_MISSING,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2174
                            (N_("No version for '{0}' dependency on {1} can "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2175
                                "be found"), (dtype, fstr)))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2176
                else:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2177
                        # If changed, update _fmri_errors _TRIM_DEP_TRIMMED.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2178
                        raise DependencyException(_TRIM_DEP_TRIMMED,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2179
                            (N_("No version matching '{0}' dependency {1} "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2180
                                "can be installed"),
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2181
                                (dtype, fstr)), matching)
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2182
2925
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2183
        def __relax_parent_self_constrained(self, excludes, \
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2184
            ignore_inst_parent_deps):
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2185
                """If we're a child image then we need to relax packages
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2186
                that are dependent upon themselves in the parent image.  This
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2187
                is necessary to keep those packages in sync."""
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2188
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2189
                relax_pkgs = set()
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2190
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2191
                # check if we're a child image.
3277
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  2192
                if not self.__is_child():
2925
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2193
                        return relax_pkgs
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2194
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2195
                # if we're ignoring parent dependencies there is no reason to
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2196
                # relax install-holds in packages constrained by those
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2197
                # dependencies.
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2198
                if ignore_inst_parent_deps:
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2199
                        return relax_pkgs
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2200
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2201
                for f in self.__installed_fmris:
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2202
                        for da in self.__get_dependency_actions(f, excludes):
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2203
                                if da.attrs["type"] != "parent":
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2204
                                        continue
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  2205
                                self.__linked_pkgs.add(f)
2925
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2206
                                if pkg.actions.depend.DEPEND_SELF in \
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2207
                                    da.attrlist("fmri"):
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2208
                                        relax_pkgs.add(f.pkg_name)
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2209
                                        break
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2210
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2211
                return relax_pkgs
3e1fbeb31067 15743323 linked images should propagate incorporation facet version locks
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2905
diff changeset
  2212
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2213
        def __generate_dependency_errors(self, fmri_list, excludes=EmptyI):
2207
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2214
                """ Returns a list of strings describing why fmris cannot
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2215
                be installed, or returns an empty list if installation
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2216
                is possible. """
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2217
                ret = []
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2218
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2219
                needs_processing = set(fmri_list)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2220
                already_processed = set()
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2221
                already_seen = set()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2222
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2223
                while needs_processing:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2224
                        fmri = needs_processing.pop()
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2225
                        errors, newfmris = self.__do_error_work(fmri,
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2226
                            excludes, already_seen)
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2227
                        ret.extend(errors)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2228
                        already_processed.add(fmri)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2229
                        needs_processing |= newfmris - already_processed
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2230
                return ret
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  2231
2207
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2232
        def get_trim_errors(self):
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2233
                """Returns a list of strings for all FMRIs evaluated by the
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2234
                solver explaining why they were rejected.  (All packages
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2235
                found in solver's trim database.)"""
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2236
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2237
                # At a minimum, a solve_*() method must have been called first.
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2238
                assert self.__state != SOLVER_INIT
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2239
                assert DebugValues["plan"]
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2240
3234
3a90dc0b66c9 21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3213
diff changeset
  2241
                return self.__fmri_list_errors(six.iterkeys(self.__trim_dict),
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2242
                    already_seen=set(), verbose=True)
2207
029ca014fced 17797 plan debugging should also display solver trim database
Shawn Walker <shawn.walker@oracle.com>
parents: 2202
diff changeset
  2243
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2244
        def __check_installed(self):
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2245
                """Generate list of strings describing why currently
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2246
                installed packages cannot be installed, or empty list"""
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2247
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2248
                # Used to de-dup errors.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2249
                already_seen = set()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2250
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2251
                ret = []
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2252
                for f in self.__installed_fmris - self.__removal_fmris:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2253
                        matching = self.__comb_newer_fmris(f, dotrim=True,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2254
                            obsolete_ok=True)[0]
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2255
                        if matching:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2256
                                continue
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2257
                        # no matches when disallowed packages are excluded
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2258
                        matching = self.__comb_newer_fmris(f, dotrim=False,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2259
                            obsolete_ok=True)[0]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2260
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2261
                        ret.append(_("No suitable version of installed package "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2262
                            "{0} found").format(f.pkg_name))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2263
                        ret.extend(self.__fmri_list_errors(matching,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2264
                            already_seen=already_seen))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2265
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2266
                return ret
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2267
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2268
        def __fmri_list_errors(self, fmri_list, indent="", already_seen=None,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2269
            omit=None, verbose=False):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2270
                """Given a list of FMRIs, return indented strings indicating why
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2271
                they were rejected."""
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2272
                ret = []
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2273
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2274
                if omit is None:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2275
                        omit = set()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2276
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2277
                fmri_reasons = []
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2278
                skey = operator.attrgetter('pkg_name')
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2279
                for f in sorted(fmri_list, key=skey):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2280
                        res = self.__fmri_errors(f, indent,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2281
                            already_seen=already_seen, omit=omit,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2282
                            verbose=verbose)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2283
                        # If None was returned, that implies that all of the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2284
                        # reasons the FMRI was rejected aren't interesting.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2285
                        if res is not None:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2286
                                fmri_reasons.append(res)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2287
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2288
                last_run = []
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2289
                def collapse_fmris():
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2290
                        """Collapse a range of FMRIs into format:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2291
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2292
                           first_fmri
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2293
                             to
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2294
                           last_fmri
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2295
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2296
                           ...based on verbose state."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2297
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2298
                        if last_run:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2299
                                indent = last_run.pop(0)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2300
                                if verbose or len(last_run) <= 1:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2301
                                        ret.extend(last_run)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2302
                                elif (not self.__depend_ts and
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2303
                                    ret[-1].endswith(last_run[-1].strip())):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2304
                                        # If timestamps are not being displayed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2305
                                        # and the last FMRI is the same as the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2306
                                        # first in the range then we only need
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2307
                                        # to show the first.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2308
                                        pass
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2309
                                else:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2310
                                        ret.append(indent + "  " + _("to"))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2311
                                        ret.append(last_run[-1])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2312
                        last_run[::] = []
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  2313
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2314
                last_reason = None
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2315
                for fmri_id, reason in fmri_reasons:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2316
                        if reason == last_reason:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2317
                                indent = " " * len(fmri_id[0])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2318
                                if not last_run:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2319
                                        last_run.append(indent)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2320
                                last_run.append(indent + fmri_id[1])
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2321
                                continue
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2322
                        else: # ends run
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2323
                                collapse_fmris()
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2324
                                if last_reason:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2325
                                        ret.extend(last_reason)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2326
                                ret.append(fmri_id[0] + fmri_id[1])
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2327
                                last_reason = reason
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2328
                if last_reason:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2329
                        collapse_fmris()
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2330
                        ret.extend(last_reason)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2331
                return ret
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2332
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2333
        def __fmri_errors(self, fmri, indent="", already_seen=None,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2334
            omit=None, verbose=False):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2335
                """return a list of strings w/ indents why this fmri is not
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2336
                suitable"""
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2337
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2338
                if already_seen is None:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2339
                        already_seen = set()
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2340
                if omit is None:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2341
                        omit = set()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2342
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2343
                fmri_id = [_("{0}  Reject:  ").format(indent)]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2344
                if not verbose and not self.__depend_ts:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2345
                        # Exclude build and timestamp for brevity.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2346
                        fmri_id.append(fmri.get_short_fmri())
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2347
                else:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2348
                        # Include timestamp for clarity if any dependency
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2349
                        # included a timestamp; exclude build for brevity.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2350
                        fmri_id.append(fmri.get_fmri(include_build=False))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2351
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2352
                tag = _("Reason:")
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2353
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2354
                if fmri in already_seen:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2355
                        if fmri in omit:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2356
                                return
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2357
2826
cae308eb6426 7185135 i18n messages should use parameterized values
Tim Foster <tim.s.foster@oracle.com>
parents: 2795
diff changeset
  2358
                        # note to translators: 'indent' will be a series of
cae308eb6426 7185135 i18n messages should use parameterized values
Tim Foster <tim.s.foster@oracle.com>
parents: 2795
diff changeset
  2359
                        # whitespaces.
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2360
                        reason = _("{indent}  {tag}  [already rejected; see "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2361
                            "above]").format(indent=indent, tag=tag)
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2362
                        return fmri_id, [reason]
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2363
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2364
                already_seen.add(fmri)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2365
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2366
                if not verbose:
3213
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2367
                        # By default, omit packages from errors that were only
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2368
                        # rejected due to a newer version being installed, or
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2369
                        # because they didn't match user-specified input.  It's
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2370
                        # tempting to omit _TRIM_REJECT here as well, but that
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2371
                        # leads to some very mysterious errors for
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2372
                        # administrators if the only reason an operation failed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2373
                        # is because a required dependency was rejected.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2374
                        for reason_id, reason_t, fmris in \
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2375
                            self.__trim_dict[fmri]:
3213
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2376
                                if reason_id not in (_TRIM_INSTALLED_NEWER,
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2377
                                    _TRIM_PROPOSED_PUB, _TRIM_PROPOSED_VER):
3213
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2378
                                        break
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2379
                        else:
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2380
                                omit.add(fmri)
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2381
                                return
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2382
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2383
                ms = []
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2384
                for reason_id, reason_t, fmris in sorted(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2385
                    self.__trim_dict[fmri]):
3213
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2386
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2387
                        if not verbose:
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2388
                                if reason_id in (_TRIM_INSTALLED_NEWER,
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2389
                                    _TRIM_PROPOSED_PUB, _TRIM_PROPOSED_VER):
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2390
                                        continue
674fcb41d554 21130996 pkg solver doesn't print error if pkg has two issues and one is not print-worthy
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3197
diff changeset
  2391
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2392
                        if isinstance(reason_t, tuple):
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2393
                                reason = _(reason_t[0]).format(*reason_t[1])
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  2394
                        else:
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2395
                                reason = _(reason_t)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2396
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2397
                        ms.append("{0}  {1}  {2}".format(indent, tag, reason))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2398
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2399
                        if reason in already_seen:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2400
                                # If we've already explained why something was
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2401
                                # rejected before, skip it.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2402
                                continue
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2403
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2404
                        # Use the reason text and not the id, as the text is
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2405
                        # specific to a particular rejection.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2406
                        already_seen.add(reason)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2407
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2408
                        # By default, don't include error output for
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2409
                        # dependencies on incorporation packages that don't
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2410
                        # specify a version since any version-specific
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2411
                        # dependencies will have caused a rejection elsewhere.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2412
                        if (not verbose and
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2413
                            reason_id == _TRIM_DEP_TRIMMED and
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2414
                            len(reason_t[1]) == 2):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2415
                                dtype, fstr = reason_t[1]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2416
                                if dtype == "require" and "@" not in fstr:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2417
                                        # Assumes fstr does not include
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2418
                                        # publisher or scheme.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2419
                                        if fstr in self.__known_incs:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2420
                                                continue
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2421
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2422
                        # Add the reasons why each package version that
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2423
                        # satisfied a dependency was rejected.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2424
                        res = self.__fmri_list_errors([
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2425
                                f
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2426
                                for f in sorted(fmris)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2427
                                if f not in already_seen
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2428
                                if verbose or f not in omit
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2429
                            ],
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2430
                            indent + "  ",
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2431
                            already_seen=already_seen,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2432
                            omit=omit,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2433
                            verbose=verbose
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2434
                        )
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2435
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2436
                        if res:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2437
                                ms.append(indent + "    " + ("-" * 40))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2438
                                ms.extend(res)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2439
                                ms.append(indent + "    " + ("-" * 40))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2440
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2441
                return fmri_id, ms
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  2442
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2443
        def __do_error_work(self, fmri, excludes, already_seen):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2444
                """Private helper function used by __generate_dependency_errors
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2445
                to determine why packages were rejected."""
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2446
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2447
                needs_processing = set()
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2448
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2449
                if fmri in self.__trim_dict:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2450
                        return self.__fmri_list_errors([fmri],
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2451
                            already_seen=already_seen), needs_processing
1688
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
  2452
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2453
                for a in self.__get_dependency_actions(fmri, excludes):
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2454
                        try:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2455
                                matching = self.__parse_dependency(a, fmri,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2456
                                    check_req=True)[1]
3171
525f5bdb3f62 20434301 change exception handling syntax for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3160
diff changeset
  2457
                        except DependencyException as e:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2458
                                self.__trim(fmri, e.reason_id, e.reason,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2459
                                    fmri_adds=e.fmris)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2460
                                s = _("No suitable version of required package "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2461
                                    "{0} found:").format(fmri.pkg_name)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2462
                                return ([s] + self.__fmri_list_errors([fmri],
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2463
                                    already_seen=already_seen),
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2464
                                    set())
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2465
                        needs_processing |= matching
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2466
                return [], needs_processing
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  2467
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2468
        # clause generation routines
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2469
        def __gen_dependency_clauses(self, fmri, da, dotrim=True):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2470
                """Return clauses to implement this dependency"""
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2471
                nm, m, cond, dtype, _req, _depf = self.__parse_dependency(da,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2472
                    fmri, dotrim)
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2473
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2474
                if dtype == "require" or dtype == "require-any":
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2475
                        return self.__gen_require_clauses(fmri, m)
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2476
                elif dtype == "group":
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2477
                        if not m and not nm:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2478
                                return [] # no clauses needed; pkg avoided
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2479
                        else:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2207
diff changeset
  2480
                                return self.__gen_require_clauses(fmri, m)
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2481
                elif dtype == "conditional":
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2482
                        return self.__gen_require_conditional_clauses(fmri, m,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2483
                            cond)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2484
                elif dtype in ["origin", "parent"]:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2485
                        # handled by trimming proposed set, not by solver
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2486
                        return []
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2487
                else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2488
                        return self.__gen_negation_clauses(fmri, nm)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2489
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2490
        def __gen_highlander_clauses(self, fmri_list):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2491
                """Return a list of clauses that specifies only one or zero
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2492
                of the fmris in fmri_list may be installed.  This prevents
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2493
                multiple versions of the same package being installed
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2494
                at once"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2495
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2496
                # pair wise negation
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  2497
                # if a has 4 versions, we need
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2498
                # [
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2499
                #  [-a.1, -a.2],
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  2500
                #  [-a.1, -a.3],
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2501
                #  [-a.1, -a.4],
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2502
                #  [-a.2, -a.3],
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2503
                #  [-a.2, -a.4],
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2504
                #  [-a.3, -a.4]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2505
                # ]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2506
                # n*(n-1)/2 algorithms suck
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2507
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2508
                if len(fmri_list) == 1: # avoid generation of singletons
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2509
                        return []
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2510
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2511
                id_list = [ -self.__getid(fmri) for fmri in fmri_list]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2512
                l = len(id_list)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2513
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2514
                return [
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2515
                    [id_list[i], id_list[j]]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2516
                    for i in range(l-1)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2517
                    for j in range(i+1, l)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2518
                ]
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2519
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2520
        def __gen_require_clauses(self, fmri, matching_fmri_list):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2521
                """generate clause for require dependency: if fmri is
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2522
                installed, one of fmri_list is required"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2523
                # if a.1 requires b.2, b.3 or b.4:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2524
                # !a.1 | b.2 | b.3 | b.4
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2525
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2526
                return [
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2527
                    [-self.__getid(fmri)] +
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2528
                    [self.__getid(fmri) for fmri in matching_fmri_list]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2529
                ]
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2530
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2164
diff changeset
  2531
        def __gen_require_conditional_clauses(self, fmri, matching_fmri_list,
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2532
            conditional_fmri_list):
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2533
                """Generate clauses for conditional dependency: if
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2534
                fmri is installed and one of conditional_fmri_list is installed,
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2535
                one of fmri list is required"""
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2536
                # if a.1 requires c.2, c.3, c.4 if b.2 or newer is installed:
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2537
                # !a.1 | !b.2 | c.2 | c.3 | c.4
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2538
                # !a.1 | !b.3 | c.2 | c.3 | c.4
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2539
                mlist = [self.__getid(f) for f in matching_fmri_list]
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2540
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2541
                return [
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2542
                    [-self.__getid(fmri)] + [-self.__getid(c)] + mlist
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2543
                    for c in conditional_fmri_list
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2544
                ]
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2545
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2546
        def __gen_negation_clauses(self, fmri, non_matching_fmri_list):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2547
                """ generate clauses for optional, incorporate and
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2548
                exclude dependencies to exclude non-acceptable versions"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2549
                # if present, fmri must match ok list
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2550
                # if a.1 optionally requires b.3:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2551
                # [
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2552
                #   [!a.1 | !b.1],
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2553
                #   [!a.1 | !b.2]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2554
                # ]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2555
                fmri_id = self.__getid(fmri)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2556
                return [
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2557
                    [-fmri_id, -self.__getid(f)]
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2558
                    for f in non_matching_fmri_list
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2559
                ]
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2560
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2561
        def __gen_one_of_these_clauses(self, fmri_list):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2562
                """generate clauses such that at least one of the fmri_list
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2563
                members gets installed"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2564
                # If a has four versions,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2565
                # a.1|a.2|a.3|a.4
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2566
                # plus highlander clauses
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2567
                assert fmri_list, "Empty list of which one is required"
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2568
                return [[self.__getid(fmri) for fmri in fmri_list]]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2569
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2570
        def __addclauses(self, clauses):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2571
                """add list of clause lists to solver"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2572
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2573
                for c in clauses:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2574
                        try:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2575
                                if not self.__solver.add_clause(c):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2576
                                        self.__addclause_failure = True
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2577
                                self.__clauses += 1
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  2578
                        except TypeError:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2579
                                raise TypeError(_("List of integers, not {0}, "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2580
                                    "expected").format(c))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2581
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2582
        def __get_child_holds(self, install_holds, pkg_cons, inc_set):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2583
                """Returns the list of installed packages that are incorporated
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2584
                by packages, delivering an install-hold, and that do not have an
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2585
                install-hold but incorporate packages.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2586
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2587
                'install_holds' is a dict of installed package stems indicating
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2588
                the pkg.depend.install-hold delivered by the package that are
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2589
                not being removed.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2590
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2591
                'pkg_cons' is a dict of installed package fmris and the
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2592
                incorporate constraints they deliver.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2593
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2594
                'inc_set' is a list of packages that incorporate other packages
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2595
                and deliver install-hold actions.  It acts as the starting point
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2596
                where we fan out to find "child" packages that incorporate other
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2597
                packages."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2598
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2599
                unprocessed = set(inc_set)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2600
                processed = set()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2601
                proc_cons = set()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2602
                incorps = set()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2603
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2604
                while unprocessed:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2605
                        self.__progress()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2606
                        ifmri = unprocessed.pop()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2607
                        processed.add(ifmri)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2608
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2609
                        if ifmri in self.__removal_fmris:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2610
                                # This package will be removed, so
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2611
                                # nothing to do.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2612
                                continue
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2613
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2614
                        cons = pkg_cons.get(ifmri, [])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2615
                        if cons and ifmri.pkg_name not in install_holds:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2616
                                # If this package incorporates other
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2617
                                # packages and does not deliver an
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2618
                                # install-hold, then consider it a
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2619
                                # 'child' hold.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2620
                                incorps.add(ifmri)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2621
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2622
                        # Find all incorporation constraints that result
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2623
                        # in only one possible match.  If there is only
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2624
                        # one possible match for an incorporation
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2625
                        # constraint then that package will not be
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2626
                        # upgraded and should be checked for
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2627
                        # incorporation constraints.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2628
                        for con in cons:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2629
                                if (con.pkg_name in install_holds or
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2630
                                    con in proc_cons):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2631
                                        # Already handled.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2632
                                        continue
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2633
                                matching = list(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2634
                                    self.__comb_auto_fmris(con)[0])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2635
                                if len(matching) == 1:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2636
                                        if matching[0] not in processed:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2637
                                                unprocessed.add(matching[0])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2638
                                else:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2639
                                        # Track which constraints have
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2640
                                        # already been processed
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2641
                                        # seperately from which
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2642
                                        # package FMRIs have been
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2643
                                        # processed to avoid (unlikely)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2644
                                        # collision.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2645
                                        proc_cons.add(con)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2646
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2647
                return incorps
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2648
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2649
        def __get_installed_upgradeable_incorps(self, excludes=EmptyI):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2650
                """Return the latest version of installed upgradeable
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2651
                incorporations w/ install holds"""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2652
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2653
                installed_incs = []
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2654
                for f in self.__installed_fmris - self.__removal_fmris:
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2655
                        for d in self.__catalog.get_entry_actions(f,
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2656
                            [catalog.Catalog.DEPENDENCY], excludes=excludes):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2657
                                if (d.name == "set" and d.attrs["name"] ==
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2658
                                    "pkg.depend.install-hold"):
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2659
                                        installed_incs.append(f)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2660
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2661
                ret = []
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2662
                for f in installed_incs:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2663
                        matching = self.__comb_newer_fmris(f, dotrim=False)[0]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2664
                        latest = sorted(matching, reverse=True)[0]
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2665
                        if latest != f:
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2666
                                ret.append(latest)
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2667
                return ret
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2668
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2669
        def __get_installed_unbound_inc_list(self, proposed_pkgs,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2670
            excludes=EmptyI):
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  2671
                """Return the list of incorporations that are to not to change
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2672
                during this install operation, and the lists of fmris they
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2673
                constrain."""
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2674
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2675
                incorps = set()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2676
                versioned_dependents = set()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2677
                pkg_cons = {}
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2678
                install_holds = {}
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2679
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2680
                # Determine installed packages that contain incorporation
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2681
                # dependencies, those packages that are depended on by explict
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2682
                # version, and those that have pkg.depend.install-hold values.
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2683
                for f in self.__installed_fmris - self.__removal_fmris:
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2684
                        for d in self.__catalog.get_entry_actions(f,
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2685
                            [catalog.Catalog.DEPENDENCY],
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2686
                            excludes=excludes):
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2687
                                if d.name == "depend":
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  2688
                                        fmris = []
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  2689
                                        for fl in d.attrlist("fmri"):
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  2690
                                                try:
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  2691
                                                        tmp = self.__fmridict[
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  2692
                                                            fl]
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  2693
                                                except KeyError:
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  2694
                                                        tmp = pkg.fmri.PkgFmri(
2958
868e07939116 16851082 build_release (aka build version) should not be displayed
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 2925
diff changeset
  2695
                                                            fl)
2608
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  2696
                                                        self.__fmridict[fl] = \
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  2697
                                                            tmp
2231afa43dc7 19104 CliTestCase.pkgsend needs to display traceback when pkgsend tracesback
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2568
diff changeset
  2698
                                                fmris.append(tmp)
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2699
                                        if d.attrs["type"] == "incorporate":
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2700
                                                incorps.add(f.pkg_name)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2701
                                                pkg_cons.setdefault(f,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2702
                                                    []).append(fmris[0])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2703
                                        versioned_dependents.update(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2704
                                            fmri.pkg_name
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2705
                                            for fmri in fmris
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2706
                                            if fmri.version is not None
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2707
                                        )
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2708
                                elif (d.name == "set" and d.attrs["name"] ==
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2709
                                    "pkg.depend.install-hold"):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2710
                                        install_holds[f.pkg_name] = \
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2711
                                            d.attrs["value"]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2712
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2713
                # find install holds that appear on command line and are thus
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2714
                # relaxed
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2715
                relaxed_holds = set([
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2716
                    install_holds[name]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2717
                    for name in proposed_pkgs
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2718
                    if name in install_holds
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2719
                ])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2720
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2721
                # add any other install holds that are relaxed because they have
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2722
                # values that start w/ the relaxed ones...
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2723
                relaxed_holds |= set([
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2724
                    hold
3234
3a90dc0b66c9 21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3213
diff changeset
  2725
                    for hold in six.itervalues(install_holds)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2726
                    if [ r for r in relaxed_holds if hold.startswith(r + ".") ]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2727
                ])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2728
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2729
                # Expand the list of install holds to include packages that are
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2730
                # incorporated by packages delivering an install-hold and that
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2731
                # do not have an install-hold, but incorporate packages.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2732
                child_holds = self.__get_child_holds(install_holds, pkg_cons,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2733
                    set(inc for inc in pkg_cons
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2734
                        if inc.pkg_name in install_holds and
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2735
                        install_holds[inc.pkg_name] not in relaxed_holds
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2736
                    )
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2737
                )
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2738
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2739
                for child_hold in child_holds:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2740
                        assert child_hold.pkg_name not in install_holds
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2741
                        install_holds[child_hold.pkg_name] = child_hold.pkg_name
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2742
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2743
                # versioned_dependents contains all the packages that are
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2744
                # depended on w/ a explicit version.  We now modify this list so
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2745
                # that it does not contain any packages w/ install_holds, unless
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2746
                # those holds were relaxed.
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2747
                versioned_dependents -= set([
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2748
                    pkg_name
3234
3a90dc0b66c9 21188662 use six library for python 3 migration
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 3213
diff changeset
  2749
                    for pkg_name, hold_value in six.iteritems(install_holds)
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2750
                    if hold_value not in relaxed_holds
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2751
                ])
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2752
                # Build the list of fmris that 1) contain incorp. dependencies
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2753
                # 2) are not in the set of versioned_dependents and 3) do not
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2754
                # explicitly appear on the install command line.
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2755
                installed_dict = self.__installed_dict
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2756
                ret = [
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2757
                    installed_dict[pkg_name]
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1813
diff changeset
  2758
                    for pkg_name in incorps - versioned_dependents
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2759
                    if pkg_name not in proposed_pkgs
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2760
                    if installed_dict[pkg_name] not in self.__removal_fmris
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2761
                ]
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2762
                # For each incorporation above that will not change, return a
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2763
                # list of the fmris that incorporation constrains
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2764
                con_lists = [
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2765
                    [ i for i in pkg_cons[inc] ]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2766
                    for inc in ret
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2767
                ]
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2768
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1688
diff changeset
  2769
                return ret, con_lists
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2770
2164
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  2771
        def __mark_pub_trimmed(self, pkg_name):
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  2772
                """Record that a given package stem has been trimmed based on
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  2773
                publisher."""
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  2774
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  2775
                self.__pub_trim[pkg_name] = True
a84726bfb9fc 17489 pkg install/update ignores package versions from publishers other than installed if installed publisher allowed by pattern
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  2776
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2777
        def __filter_publishers(self, pkg_name):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2778
                """Given a list of fmris for various versions of
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2779
                a package from various publishers, trim those
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2780
                that are not suitable"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2781
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2782
                if pkg_name in self.__pub_trim: # already done
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2783
                        return
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2784
                self.__mark_pub_trimmed(pkg_name)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2785
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2786
                fmri_list = self.__get_catalog_fmris(pkg_name)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2787
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2788
                if pkg_name in self.__publisher:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2789
                        acceptable_pubs = [self.__publisher[pkg_name]]
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2790
                        if pkg_name in self.__installed_dict:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2791
                                reason_id = _TRIM_PUB_STICKY
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2792
                                reason = (N_("Currently installed package "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2793
                                    "'{0}' is from sticky publisher '{1}'."),
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2794
                                    (pkg_name, self.__publisher[pkg_name]))
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2795
                        else:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2796
                                reason_id = _TRIM_PROPOSED_PUB
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2797
                                reason = N_("Package is from publisher other "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2798
                                    "than specified one.")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2799
                else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2800
                        # order by pub_rank; choose highest possible tier for
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2801
                        # pkgs; guard against unconfigured publishers in known
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2802
                        # catalog
2639
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  2803
                        pubs_found = set((f.publisher for f in fmri_list))
1688
b46c4942b045 13846 pkg awakes after reboot to discover that it has made a mistake
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1601
diff changeset
  2804
                        ranked = sorted([
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2805
                            (self.__pub_ranks[p][0], p)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2806
                            for p in pubs_found
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2807
                            if self.__pub_ranks.get(p, (0, False, False))[2]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2808
                        ])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2809
                        acceptable_pubs = [
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2810
                            r[1]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2811
                            for r in ranked
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2812
                            if r[0] == ranked[0][0]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2813
                        ]
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2814
                        reason_id = _TRIM_PUB_RANK
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2815
                        if acceptable_pubs:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2816
                                reason = (N_("Higher ranked publisher {0} was "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2817
                                    "selected"), (acceptable_pubs[0],))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2818
                        else:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2819
                                reason = N_("Package publisher is ranked lower "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2820
                                    "in search order")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2821
1601
e0922fa5b56b 12817 Traceback installing a package which depends(?) on an installed package from a disabled publisher
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1505
diff changeset
  2822
                # allow installed packages to co-exist to meet dependency reqs.
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2823
                # in case new publisher not proper superset of original.  avoid
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2824
                # multiple publishers w/ the exact same fmri to prevent
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2825
                # thrashing in the solver due to many equiv. solutions.
2639
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  2826
                inst_f = self.__installed_dict.get(pkg_name)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2827
                self.__trim([
2639
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  2828
                    f
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  2829
                    for f in fmri_list
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  2830
                    if (f.publisher not in acceptable_pubs and
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  2831
                            (not inst_f or f != inst_f)) or
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  2832
                        (inst_f and f.publisher != inst_f.publisher and
06a370373267 7145683 explore general pkg performance improvements
Shawn Walker <shawn.walker@oracle.com>
parents: 2608
diff changeset
  2833
                            f.version == inst_f.version)
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2834
                ], reason_id, reason)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2835
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2836
        # routines to manage the trim dictionary
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2837
        # trim dictionary contains the reasons an fmri was rejected for
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2838
        # consideration reason is a tuple of a string w/ format chars and args,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2839
        # or just a string.  fmri_adds are any fmris that caused the rejection
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2840
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2841
        def __trim(self, fmri_list, reason_id, reason, fmri_adds=EmptyI):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2842
                """Remove specified fmri(s) from consideration for specified
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2843
                reason."""
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2844
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2669
diff changeset
  2845
                self.__progress()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2846
                try:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2847
                        it = iter(fmri_list)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2848
                except TypeError:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2849
                        it = [fmri_list]
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2850
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2851
                assert reason_id in range(_TRIM_MAX)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2852
                tup = (reason_id, reason, frozenset(fmri_adds))
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2853
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2854
                for fmri in it:
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2855
                        self.__trim_dict[fmri].add(tup)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2856
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2857
        def __trim_older(self, fmri):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2858
                """Trim any fmris older than this one"""
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  2859
                reason = (N_("Newer version {0} is already installed"), (fmri,))
3248
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  2860
                self.__trim(self.__comb_newer_fmris(fmri, dotrim=False)[1] -
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  2861
                    self.__allowed_downgrades, _TRIM_INSTALLED_NEWER, reason)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2862
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2863
        def __trim_nonmatching_variants(self, fmri):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2864
                """Trim packages that don't support image architecture or other
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2865
                image variant."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2866
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2867
                vd = self.__get_variant_dict(fmri)
2666
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  2868
                reason = ""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2869
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2870
                for v in self.__variants.keys():
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2871
                        if v in vd and self.__variants[v] not in vd[v]:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2872
                                if vd == "variant.arch":
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2873
                                        reason = N_("Package doesn't support "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2874
                                            "image architecture")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2875
                                else:
3104
5d93bdf1a849 15704264 variant mismatch message is cryptic
Aditya Tuteja <aditya.tuteja@oracle.com>
parents: 3094
diff changeset
  2876
                                        reason = (N_("Package supports image "
3291
37027f7ff904 21267571 solver traceback because Set requires its items to be hashable
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3277
diff changeset
  2877
                                            "variant {0}={1} but doesn't "
37027f7ff904 21267571 solver traceback because Set requires its items to be hashable
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3277
diff changeset
  2878
                                            "support this image's {0}={2}"),
37027f7ff904 21267571 solver traceback because Set requires its items to be hashable
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3277
diff changeset
  2879
                                            (v, str(vd[v]),
37027f7ff904 21267571 solver traceback because Set requires its items to be hashable
Erik Trauschke <Erik.Trauschke@oracle.com>
parents: 3277
diff changeset
  2880
                                            str(self.__variants[v])))
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2881
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2882
                                self.__trim(fmri, _TRIM_VARIANT, reason)
2666
7e8037e15e47 7133915 pkg update leaves out some needed packages
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2658
diff changeset
  2883
                return reason == ""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  2884
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2885
        def __trim_nonmatching_parents1(self, pkg_fmri, fmri):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2886
                """Private helper function for __trim_nonmatching_parents that
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2887
                trims any pkg_fmri that matches a parent dependency and that is
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2888
                not installed in the parent image, that is from a different
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2889
                publisher than the parent image, or that is a different version
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2890
                than the parent image."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2891
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2892
                if fmri in self.__parent_pkgs:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2893
                        # exact fmri installed in parent
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2894
                        return True
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2895
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2896
                if fmri.pkg_name not in self.__parent_dict:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2897
                        # package is not installed in parent
2901
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2898
                        if self.__is_zone():
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2899
                                reason = (N_("Package {0} is not installed in "
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2900
                                    "global zone."), (fmri.pkg_name,))
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2901
                        else:
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2902
                                reason = (N_("Package {0} is not installed in "
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2903
                                    "parent image."), (fmri.pkg_name,))
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2904
                        self.__trim(pkg_fmri, _TRIM_PARENT_MISSING, reason)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2905
                        return False
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2906
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2907
                pf = self.__parent_dict[fmri.pkg_name]
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2908
                if fmri.publisher and fmri.publisher != pf.publisher:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2909
                        # package is from a different publisher in the parent
2901
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2910
                        if self.__is_zone():
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2911
                                reason = (N_("Package in global zone is from "
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2912
                                    "a different publisher: {0}"), (pf,))
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2913
                        else:
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2914
                                reason = (N_("Package in parent is from a "
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2915
                                    "different publisher: {0}"), (pf,))
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2916
                        self.__trim(pkg_fmri, _TRIM_PARENT_PUB, reason)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2917
                        return False
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2918
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2919
                if pf.version == fmri.version or pf.version.is_successor(
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2920
                    fmri.version, version.CONSTRAINT_AUTO):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2921
                        # parent dependency is satisfied
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2922
                        return True
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2923
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2924
                # version mismatch
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2925
                if pf.version.is_successor(fmri.version,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2926
                    version.CONSTRAINT_NONE):
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2927
                        reason_id = _TRIM_PARENT_NEWER
2901
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2928
                        if self.__is_zone():
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2929
                                reason = (N_("Global zone has a "
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2930
                                    "newer version: {0}"), (pf,))
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2931
                        else:
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2932
                                reason = (N_("Parent image has a "
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2933
                                    "newer version: {0}"), (pf,))
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2934
                else:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2935
                        reason_id = _TRIM_PARENT_OLDER
2901
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2936
                        if self.__is_zone():
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2937
                                reason = (N_("Global zone has an older "
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2938
                                    "version of package: {0}"), (pf,))
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2939
                        else:
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2940
                                reason = (N_("Parent image has an older "
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  2941
                                    "version of package: {0}"), (pf,))
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2942
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  2943
                self.__trim(pkg_fmri, reason_id, reason)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2944
                return False
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2945
2734
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  2946
        def __trim_nonmatching_parents(self, pkg_fmri, excludes,
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  2947
            ignore_inst_parent_deps=False):
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2948
                """Trim any pkg_fmri that contains a parent dependency that
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2949
                is not satisfied by the parent image."""
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2950
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2951
                # the fmri for the package should include a publisher
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2952
                assert pkg_fmri.publisher
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2953
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2954
                # if we're not a child then ignore "parent" dependencies.
3277
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  2955
                if not self.__is_child():
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2956
                        return True
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2957
2734
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  2958
                # check if we're ignoring parent dependencies for installed
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  2959
                # packages.
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  2960
                if ignore_inst_parent_deps and \
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  2961
                    pkg_fmri in self.__installed_fmris:
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  2962
                        return True
013b8ba5a172 7140215 pkg uninstall should probably ignore parent dependencies
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2697
diff changeset
  2963
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2964
                # Find all the fmris that we depend on in our parent.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2965
                # Use a set() to eliminate any dups.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2966
                pkg_deps = set([
2958
868e07939116 16851082 build_release (aka build version) should not be displayed
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 2925
diff changeset
  2967
                    pkg.fmri.PkgFmri(f)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2968
                    for da in self.__get_dependency_actions(pkg_fmri, excludes)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2969
                    if da.attrs["type"] == "parent"
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2970
                    for f in da.attrlist("fmri")
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2971
                ])
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2972
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2973
                if not pkg_deps:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2974
                        # no parent dependencies.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2975
                        return True
3294
6bc144461e5e 15743613 need better error messages for failures caused by synced packages
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3291
diff changeset
  2976
                self.__linked_pkgs.add(pkg_fmri)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2977
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2978
                allowed = True
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2979
                for f in pkg_deps:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2980
                        fmri = f
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2981
                        if f.pkg_name == pkg.actions.depend.DEPEND_SELF:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2982
                                # check if this package depends on itself.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2983
                                fmri = pkg_fmri
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2984
                        if not self.__trim_nonmatching_parents1(pkg_fmri, fmri):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2985
                                allowed = False
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2986
                return allowed
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2987
3030
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  2988
        def __trim_nonmatching_origins(self, fmri, excludes,
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  2989
            exact_install=False, installed_dict_tmp=EmptyDict):
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2990
                """Trim any fmri that contains a origin dependency that is
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2991
                not satisfied by the current image or root-image"""
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  2992
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2993
                for da in self.__get_dependency_actions(fmri, excludes):
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2994
                        if da.attrs["type"] != "origin":
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2995
                                continue
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2996
2958
868e07939116 16851082 build_release (aka build version) should not be displayed
Yiteng Zhang <yiteng.zhang@oracle.com>
parents: 2925
diff changeset
  2997
                        req_fmri = pkg.fmri.PkgFmri(da.attrs["fmri"])
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2998
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  2999
                        if da.attrs.get("root-image", "").lower() == "true":
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3000
                                if req_fmri.pkg_name.startswith(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3001
                                    "feature/firmware/"):
3030
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3002
                                        # this is a firmware dependency
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3003
                                        fw_ok, reason = \
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3004
                                            self.__firmware.check_firmware(da,
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3005
                                            req_fmri.pkg_name)
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3006
                                        if not fw_ok:
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3007
                                                self.__trim(fmri,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3008
                                                    _TRIM_FIRMWARE, reason)
3030
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3009
                                                return False
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3010
                                        continue
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3011
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3012
                                if self.__root_fmris is None:
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3013
                                        img = pkg.client.image.Image(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3014
                                            misc.liveroot(),
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3015
                                            allow_ondisk_upgrade=False,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3016
                                            user_provided_dir=True,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3017
                                            should_exist=True)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3018
                                        self.__root_fmris = dict([
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3019
                                            (f.pkg_name, f)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3020
                                            for f in img.gen_installed_pkgs()
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3021
                                        ])
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3022
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3023
                                installed = self.__root_fmris.get(
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3024
                                    req_fmri.pkg_name)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3025
                                reason_id = _TRIM_INSTALLED_ROOT_ORIGIN
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3026
                                reason = (N_("Installed version in root image "
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3027
                                    "is too old for origin " "dependency {0}"),
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3028
                                    (req_fmri,))
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  3029
                        else:
3030
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3030
                                # Always use the full installed dict for origin
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3031
                                # dependency.
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3032
                                if exact_install:
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3033
                                        installed = installed_dict_tmp.get(
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3034
                                            req_fmri.pkg_name)
3030
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3035
                                else:
4f12fb27479c 17699233 pkg install could have an option to ignore any installed packages (new subcommand)
Xiaobo Shen <xiaobo.shen@oracle.com>
parents: 3029
diff changeset
  3036
                                        installed = self.__installed_dict.get(
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3037
                                            req_fmri.pkg_name)
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3038
                                reason_id = _TRIM_INSTALLED_ORIGIN
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  3039
                                reason = (N_("Installed version in image "
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  3040
                                    "being upgraded is too old for origin "
2658
215862b35a26 7157309 origin dependency error message is using the wrong type of format specifier
abhinandan.ekande@oracle.com
parents: 2639
diff changeset
  3041
                                    "dependency {0}"), (req_fmri,))
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  3042
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  3043
                        # assumption is that for root-image, publishers align;
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  3044
                        # otherwise these sorts of cross-environment
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2295
diff changeset
  3045
                        # dependencies don't work well
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  3046
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3047
                        if (not installed or not req_fmri.version or
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3048
                            req_fmri.version == installed.version or
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3049
                            installed.version.is_successor(req_fmri.version,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3050
                                version.CONSTRAINT_NONE)):
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  3051
                                continue
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  3052
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3053
                        self.__trim(fmri, reason_id, reason)
2197
f0a833446218 13054 solver could emit a directed error message for over-revved incorporated pkgs
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  3054
2084
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  3055
                        return False
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  3056
                return True
d591b4ed5cf3 16327 New dependency types desired
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2034
diff changeset
  3057
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3058
        def __trim_unsupported(self, fmri):
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3059
                """Indicate given package FMRI is unsupported."""
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3060
                self.__trim(fmri, _TRIM_UNSUPPORTED,
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3061
                    N_("Package contains invalid or unsupported actions"))
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3062
3248
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3063
        def __get_older_incorp_pkgs(self, fmri, install_holds, excludes=EmptyI,
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3064
            candidates=None, depth=0):
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3065
                """Get all incorporated pkgs for the given 'fmri' whose versions
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3066
                are older than what is currently installed in the image."""
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3067
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3068
                if not candidates:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3069
                        candidates = set()
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3070
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3071
                if fmri in self.__dg_incorp_cache:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3072
                        candidates |= self.__dg_incorp_cache[fmri]
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3073
                        return candidates
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3074
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3075
                if depth > 10:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3076
                        # Safeguard against circular dependencies.
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3077
                        # If it happens, just end the recursion tree.
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3078
                        return candidates
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3079
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3080
                self.__dg_incorp_cache[fmri] = set()
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3081
                self.__progress()
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3082
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3083
                # Get all incorporated packages for this fmri.
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3084
                matching_incorp_sets = [
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3085
                    m[0]
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3086
                    for m in
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3087
                    self.__get_incorp_nonmatch_dict(fmri,excludes).values()
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3088
                ]
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3089
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3090
                for df in chain.from_iterable(matching_incorp_sets):
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3091
                        if df.pkg_name not in self.__installed_dict:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3092
                                continue
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3093
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3094
                        # Ignore pkgs which are incorporated at a higher or
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3095
                        # the same version.
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3096
                        inst_ver = self.__installed_dict[df.pkg_name].version
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3097
                        if df.version.is_successor(inst_ver, None) or \
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3098
                            df.version == inst_ver:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3099
                                continue
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3100
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3101
                        # Do not allow implicit publisher switches
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3102
                        if df.get_publisher() != fmri.get_publisher():
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3103
                                continue
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3104
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3105
                        # Do not allow pkgs which are marked for removal.
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3106
                        if fmri in self.__removal_fmris:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3107
                                continue
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3108
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3109
                        # Do not allow pkgs with install-holds but filter out
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3110
                        # child holds
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3111
                        install_hold = False
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3112
                        for ha in [
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3113
                            sa
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3114
                            for sa in self.__get_actions(df, "set")
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3115
                            if sa.attrs["name"] == "pkg.depend.install-hold"
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3116
                        ]:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3117
                                install_hold = True
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3118
                                for h in install_holds:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3119
                                        if ha.attrs["value"].startswith(h):
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3120
                                                # This is a child hold of an
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3121
                                                # incorporating pkg, ignore.
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3122
                                                install_hold = False
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3123
                                                break
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3124
                                if not install_hold:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3125
                                        break
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3126
                        if install_hold:
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3127
                                continue
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3128
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3129
                        self.__dg_incorp_cache[fmri].add(df)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3130
                        candidates.add(df)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3131
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3132
                        # Check if this pkgs has incorporate deps of its own.
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3133
                        self.__get_older_incorp_pkgs(df, install_holds,
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3134
                            excludes, candidates, depth+1)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3135
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3136
                return candidates
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3137
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3138
        def __allow_incorp_downgrades(self, fmri, excludes=EmptyI):
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3139
                """Find packages which have lower versions than installed but
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3140
                are incorporated by a package in the proposed list."""
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3141
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3142
                install_holds = set([
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3143
                    sa.attrs["value"]
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3144
                    for sa in self.__get_actions(fmri, "set")
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3145
                    if sa.attrs["name"] == "pkg.depend.install-hold"
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3146
                ])
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3147
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3148
                # Get all pkgs which are incorporated by 'fmri',
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3149
                # including nested incorps.
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3150
                candidates = self.__get_older_incorp_pkgs(fmri, install_holds,
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3151
                    excludes=excludes)
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3152
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3153
                return candidates
30587e6b1c49 17699319 we could make downgrade easier in the case of incorporated packages
Erik Trauschke <erik.trauschke@oracle.com>
parents: 3234
diff changeset
  3154
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  3155
        def __dotrim(self, fmri_list):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  3156
                """Return fmri_list trimmed of any fmris in self.__trim_dict"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  3157
3094
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3158
                return [
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3159
                    f
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3160
                    for f in fmri_list
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3161
                    if f not in self.__trim_dict
15de2efea709 15618618 solver plan errors could explain incorporation-related failures better
Shawn Walker <shawn.walker@oracle.com>
parents: 3078
diff changeset
  3162
                ]
2901
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  3163
3277
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  3164
        def __is_child(self):
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  3165
                """Return True if this image is a linked image child."""
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  3166
                return self.__parent_pkgs is not None
1d44a3c7c415 21211465 zoneadm attach -U tries to overcome GZ constraints and fails
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 3260
diff changeset
  3167
2901
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  3168
        def __is_zone(self):
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  3169
                """Return True if image is a nonglobal zone"""
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  3170
                if 'variant.opensolaris.zone' in self.__variants:
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  3171
                        return self.__variants['variant.opensolaris.zone'] == \
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  3172
                            'nonglobal'
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  3173
                else:
2e90c693f302 15960202 'parent image' strings in ngz pkg operations should reference 'global zone'
Albert White <albert.white@oracle.com>
parents: 2826
diff changeset
  3174
                        return False