author | Brock Pytlik <bpytlik@sun.com> |
Mon, 16 Aug 2010 16:48:50 -0700 | |
changeset 2026 | d1b30615bc99 |
parent 2003 | 16461c9acfee |
child 2034 | d5ee7746faeb |
permissions | -rw-r--r-- |
1516
8c950a3b4171
10485 move pkg(5) to Python 2.6
Rich Burridge <rich.burridge@sun.com>
parents:
1505
diff
changeset
|
1 |
#!/usr/bin/python |
50 | 2 |
# |
3 |
# CDDL HEADER START |
|
4 |
# |
|
5 |
# The contents of this file are subject to the terms of the |
|
6 |
# Common Development and Distribution License (the "License"). |
|
7 |
# You may not use this file except in compliance with the License. |
|
8 |
# |
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
|
10 |
# or http://www.opensolaris.org/os/licensing. |
|
11 |
# See the License for the specific language governing permissions |
|
12 |
# and limitations under the License. |
|
13 |
# |
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
|
19 |
# |
|
20 |
# CDDL HEADER END |
|
21 |
# |
|
22 |
||
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
23 |
# |
1924
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
24 |
# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
25 |
# |
50 | 26 |
|
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
27 |
from collections import namedtuple |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
28 |
import errno |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
29 |
import operator |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
30 |
import os |
1286
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
31 |
import traceback |
956
adf6bdfdb3b5
6904 image.installed_file_authority always tries to open installed file r+
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
941
diff
changeset
|
32 |
|
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1369
diff
changeset
|
33 |
from pkg.client import global_settings |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1369
diff
changeset
|
34 |
logger = global_settings.logger |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1369
diff
changeset
|
35 |
|
1306
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
36 |
import pkg.actions |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
37 |
import pkg.catalog |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
38 |
import pkg.client.actuator as actuator |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
39 |
import pkg.client.indexer as indexer |
565
1fb4f05220b9
3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents:
556
diff
changeset
|
40 |
import pkg.client.api_errors as api_errors |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
41 |
import pkg.client.pkgplan as pkgplan |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
42 |
import pkg.client.pkg_solver as pkg_solver |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
43 |
import pkg.fmri |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
44 |
import pkg.manifest as manifest |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
45 |
import pkg.search_errors as se |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
46 |
import pkg.version |
1755
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
47 |
import sys |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
48 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
49 |
from pkg.client.debugvalues import DebugValues |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
50 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
51 |
UNEVALUATED = 0 # nothing done yet |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
52 |
EVALUATED_PKGS = 1 # established fmri changes |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
53 |
EVALUATED_OK = 2 # ready to execute |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
54 |
PREEXECUTED_OK = 3 # finished w/ preexecute |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
55 |
PREEXECUTED_ERROR = 4 # whoops |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
56 |
EXECUTED_OK = 5 # finished execution |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
57 |
EXECUTED_ERROR = 6 # failed |
50 | 58 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
59 |
class ImagePlan(object): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
60 |
"""ImagePlan object contains the plan for changing the image... |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
61 |
there are separate routines for planning the various types of |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
62 |
image modifying operations; evaluation (comparing manifests |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
63 |
and buildig lists of removeal, install and update actions |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
64 |
and their execution is all common code""" |
50 | 65 |
|
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
66 |
PLANNED_NOTHING = "no-plan" |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
67 |
PLANNED_INSTALL = "install" |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
68 |
PLANNED_UNINSTALL = "uninstall" |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
69 |
PLANNED_UPDATE = "image-update" |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
70 |
PLANNED_FIX = "fix" |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
71 |
PLANNED_VARIANT = "change-variant" |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
72 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
73 |
def __init__(self, image, progtrack, check_cancel, noexecute=False): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
74 |
self.image = image |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
75 |
self.pkg_plans = [] |
50 | 76 |
|
77 |
self.state = UNEVALUATED |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
78 |
self.__progtrack = progtrack |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
79 |
self.__noexecute = noexecute |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
80 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
81 |
self.__fmri_changes = [] # install (None, fmri) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
82 |
# update (oldfmri, newfmri) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
83 |
# remove (oldfmri, None) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
84 |
# reinstall(oldfmri, oldfmri) |
50 | 85 |
|
1784
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
86 |
# Used to track users and groups that are part of operation. |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
87 |
self.added_groups = {} |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
88 |
self.removed_groups = {} |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
89 |
self.added_users = {} |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
90 |
self.removed_users = {} |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
91 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
92 |
self.update_actions = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
93 |
self.removal_actions = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
94 |
self.install_actions = [] |
556
1c3526ca7b9e
2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents:
551
diff
changeset
|
95 |
|
1859
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
96 |
# The set of processed target object directories known to be |
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
97 |
# valid (those that are not symlinks and thus are valid for |
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
98 |
# use during installation). This is used by the pkg.actions |
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
99 |
# classes during install() operations. |
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
100 |
self.valid_directories = set() |
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
101 |
|
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
102 |
# A place to keep info about saved_files; needed by file action. |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
103 |
self.saved_files = {} |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
104 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
105 |
self.__target_install_count = 0 |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
106 |
self.__target_update_count = 0 |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
107 |
self.__target_removal_count = 0 |
50 | 108 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
109 |
self.__directories = None # implement ref counting |
1924
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
110 |
self.__symlinks = None # for dirs and links and |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
111 |
self.__hardlinks = None # hardlinks |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
112 |
self.__cached_actions = {} |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
113 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
114 |
self.__old_excludes = image.list_excludes() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
115 |
self.__new_excludes = self.__old_excludes |
111 | 116 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
117 |
self.__check_cancelation = check_cancel |
838
aafbe4737188
3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
717
diff
changeset
|
118 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
119 |
self.__actuators = None |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
120 |
|
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
121 |
self.update_index = True |
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
122 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
123 |
self.__preexecuted_indexing_error = None |
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
124 |
self._planned_op = self.PLANNED_NOTHING |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
125 |
self.__pkg_solver = None |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
126 |
self.__new_variants = None |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
127 |
self.__new_facets = None |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
128 |
self.__variant_change = False |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
129 |
self.__references = {} # dict of fmri -> pattern |
1286
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
130 |
|
50 | 131 |
def __str__(self): |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
132 |
|
50 | 133 |
if self.state == UNEVALUATED: |
63
ba3a4af65479
add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents:
60
diff
changeset
|
134 |
s = "UNEVALUATED:\n" |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
135 |
return s |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
136 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
137 |
s = "%s\n" % self.__pkg_solver |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
138 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
139 |
if self.state < EVALUATED_PKGS: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
140 |
return s |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
141 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
142 |
s += "Package version changes:\n" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
143 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
144 |
for pp in self.pkg_plans: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
145 |
s += "%s -> %s\n" % (pp.origin_fmri, pp.destination_fmri) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
146 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
147 |
if self.__actuators: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
148 |
s = s + "Actuators:\n%s\n" % self.__actuators |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
149 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
150 |
if self.__old_excludes != self.__new_excludes: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
151 |
s = s + "Variants/Facet changes: %s -> %s\n" % (self.__old_excludes, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
152 |
self.__new_excludes) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
153 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
154 |
return s |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
155 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
156 |
def __verbose_str(self): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
157 |
s = str(self) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
158 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
159 |
if self.state == EVALUATED_PKGS: |
50 | 160 |
return s |
161 |
||
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
162 |
s = s + "Actions being removed:\n" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
163 |
for pplan, o_action, ignore in self.removal_actions: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
164 |
s = s + "\t%s:%s\n" % ( pplan.origin_fmri, o_action) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
165 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
166 |
s = s + "\nActions being updated:\n" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
167 |
for pplan, o_action, d_action in self.update_actions: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
168 |
s = s + "\t%s:%s -> %s%s\n" % ( |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
169 |
pplan.origin_fmri, o_action, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
170 |
pplan.destination_fmri, d_action ) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
171 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
172 |
s = s + "\nActions being installed:\n" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
173 |
for pplan, ignore, d_action in self.removal_actions: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
174 |
s = s + "\t%s:%s\n" % ( pplan.destination_fmri, d_action) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
175 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
176 |
return s |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
177 |
|
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
178 |
@property |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
179 |
def planned_op(self): |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
180 |
"""Returns a constant value indicating the type of operation |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
181 |
planned.""" |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
182 |
|
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
183 |
return self._planned_op |
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
184 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
185 |
def show_failure(self, verbose): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
186 |
"""Here's where extensive messaging needs to go""" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
187 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
188 |
if self.__pkg_solver: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
189 |
logger.info(_("Planning for %s failed: %s\n") % |
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
190 |
(self._planned_op, self.__pkg_solver.gen_failure_report(verbose))) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
191 |
|
1710
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
192 |
def __plan_op(self, op): |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
193 |
"""Private helper method used to mark the start of a planned |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
194 |
operation.""" |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
195 |
|
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
196 |
self._planned_op = op |
1710
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
197 |
self._image_lm = self.image.get_last_modified() |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
198 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
199 |
def plan_install(self, pkgs_to_install): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
200 |
"""Determine the fmri changes needed to install the specified pkgs""" |
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
201 |
self.__plan_op(self.PLANNED_INSTALL) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
202 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
203 |
# get ranking of publishers |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
204 |
pub_ranks = self.image.get_publisher_ranks() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
205 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
206 |
# build installed dict |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
207 |
installed_dict = ImagePlan.__fmris2dict(self.image.gen_installed_pkgs()) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
208 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
209 |
# build installed publisher dictionary |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
210 |
installed_pubs = dict(( |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
211 |
(f.pkg_name, f.get_publisher()) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
212 |
for f in installed_dict.values() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
213 |
)) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
214 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
215 |
proposed_dict, self.__references = self.match_user_fmris(pkgs_to_install, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
216 |
True, pub_ranks, installed_pubs) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
217 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
218 |
# instantiate solver |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
219 |
self.__pkg_solver = pkg_solver.PkgSolver( |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
220 |
self.image.get_catalog(self.image.IMG_CATALOG_KNOWN), |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
221 |
installed_dict, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
222 |
pub_ranks, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
223 |
self.image.get_variants(), |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
224 |
self.__progtrack) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
225 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
226 |
# Solve... will raise exceptions if no solution is found |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
227 |
new_vector = self.__pkg_solver.solve_install([], proposed_dict, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
228 |
self.__new_excludes) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
229 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
230 |
self.__fmri_changes = [ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
231 |
(a, b) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
232 |
for a, b in ImagePlan.__dicts2fmrichanges(installed_dict, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
233 |
ImagePlan.__fmris2dict(new_vector)) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
234 |
if a != b |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
235 |
] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
236 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
237 |
self.state = EVALUATED_PKGS |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
238 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
239 |
def plan_uninstall(self, pkgs_to_uninstall, recursive_removal=False): |
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
240 |
self.__plan_op(self.PLANNED_UNINSTALL) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
241 |
proposed_dict, self.__references = self.match_user_fmris(pkgs_to_uninstall, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
242 |
False, None, None) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
243 |
# merge patterns together |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
244 |
proposed_removals = set([ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
245 |
f |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
246 |
for each in proposed_dict.values() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
247 |
for f in each |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
248 |
]) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
249 |
|
1762
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
250 |
# build installed dict |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
251 |
installed_dict = dict([ |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
252 |
(f.pkg_name, f) |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
253 |
for f in self.image.gen_installed_pkgs() |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
254 |
]) |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
255 |
|
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
256 |
# instantiate solver |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
257 |
self.__pkg_solver = pkg_solver.PkgSolver( |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
258 |
self.image.get_catalog(self.image.IMG_CATALOG_KNOWN), |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
259 |
installed_dict, |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
260 |
self.image.get_publisher_ranks(), |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
261 |
self.image.get_variants(), |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
262 |
self.__progtrack) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
263 |
|
1762
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
264 |
new_vector = self.__pkg_solver.solve_uninstall([], |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
265 |
proposed_removals, recursive_removal, self.__new_excludes) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
266 |
|
1762
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
267 |
self.__fmri_changes = [ |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
268 |
(a, b) |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
269 |
for a, b in ImagePlan.__dicts2fmrichanges(installed_dict, |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
270 |
ImagePlan.__fmris2dict(new_vector)) |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
271 |
if a != b |
2ae663f0e049
14507 renamed packages should be removed if possible
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1755
diff
changeset
|
272 |
] |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
273 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
274 |
self.state = EVALUATED_PKGS |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
275 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
276 |
@staticmethod |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
277 |
def __fmris2dict(fmri_list): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
278 |
return dict([ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
279 |
(f.pkg_name, f) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
280 |
for f in fmri_list |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
281 |
]) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
282 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
283 |
@staticmethod |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
284 |
def __dicts2fmrichanges(olddict, newdict): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
285 |
return [ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
286 |
(olddict.get(k, None), newdict.get(k, None)) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
287 |
for k in set(olddict.keys() + newdict.keys()) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
288 |
] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
289 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
290 |
def plan_update(self): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
291 |
"""Determine the fmri changes needed to update all |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
292 |
pkgs""" |
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
293 |
self.__plan_op(self.PLANNED_UPDATE) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
294 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
295 |
# build installed dict |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
296 |
installed_dict = dict([ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
297 |
(f.pkg_name, f) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
298 |
for f in self.image.gen_installed_pkgs() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
299 |
]) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
300 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
301 |
# instantiate solver |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
302 |
self.__pkg_solver = pkg_solver.PkgSolver( |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
303 |
self.image.get_catalog(self.image.IMG_CATALOG_KNOWN), |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
304 |
installed_dict, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
305 |
self.image.get_publisher_ranks(), |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
306 |
self.image.get_variants(), |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
307 |
self.__progtrack) |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
308 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
309 |
new_vector = self.__pkg_solver.solve_update([], self.__new_excludes) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
310 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
311 |
self.__fmri_changes = [ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
312 |
(a, b) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
313 |
for a, b in ImagePlan.__dicts2fmrichanges(installed_dict, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
314 |
ImagePlan.__fmris2dict(new_vector)) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
315 |
if a != b |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
316 |
] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
317 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
318 |
self.state = EVALUATED_PKGS |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
319 |
|
1271
036d87b0bd44
6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents:
1231
diff
changeset
|
320 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
321 |
def plan_fix(self, pkgs_to_fix): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
322 |
"""Create the list of pkgs to fix""" |
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
323 |
self.__plan_op(self.PLANNED_FIX) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
324 |
# XXX complete this |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
325 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
326 |
def plan_change_varcets(self, variants, facets): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
327 |
"""Determine the fmri changes needed to change |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
328 |
the specified variants/facets""" |
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
329 |
self.__plan_op(self.PLANNED_VARIANT) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
330 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
331 |
if variants == None and facets == None: # nothing to do |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
332 |
self.state = EVALUATED_PKGS |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
333 |
return |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
334 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
335 |
self.__variant_change = True |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
336 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
337 |
# build installed dict |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
338 |
installed_dict = dict([ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
339 |
(f.pkg_name, f) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
340 |
for f in self.image.gen_installed_pkgs() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
341 |
]) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
342 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
343 |
# instantiate solver |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
344 |
self.__pkg_solver = pkg_solver.PkgSolver( |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
345 |
self.image.get_catalog(self.image.IMG_CATALOG_KNOWN), |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
346 |
installed_dict, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
347 |
self.image.get_publisher_ranks(), |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
348 |
self.image.get_variants(), |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
349 |
self.__progtrack) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
350 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
351 |
self.__new_excludes = self.image.list_excludes(variants, facets) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
352 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
353 |
new_vector = self.__pkg_solver.solve_change_varcets([], |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
354 |
variants, facets, self.__new_excludes) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
355 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
356 |
self.__new_variants = variants |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
357 |
self.__new_facets = facets |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
358 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
359 |
self.__fmri_changes = [ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
360 |
(a, b) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
361 |
for a, b in ImagePlan.__dicts2fmrichanges(installed_dict, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
362 |
ImagePlan.__fmris2dict(new_vector)) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
363 |
] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
364 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
365 |
self.state = EVALUATED_PKGS |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
366 |
return |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
367 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
368 |
def reboot_needed(self): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
369 |
"""Check if evaluated imageplan requires a reboot""" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
370 |
assert self.state >= EVALUATED_OK |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
371 |
return self.__actuators.reboot_needed() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
372 |
|
50 | 373 |
|
539
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
374 |
def get_plan(self, full=True): |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
375 |
if full: |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
376 |
return str(self) |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
377 |
|
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
378 |
output = "" |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
379 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
380 |
for t in self.__fmri_changes: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
381 |
output += "%s -> %s\n" % t |
539
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
382 |
return output |
7486304966c5
1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents:
516
diff
changeset
|
383 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
384 |
def display(self): |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
385 |
if DebugValues["plan"]: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
386 |
logger.info(self.__verbose_str()) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
387 |
else: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
388 |
logger.info(str(self)) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
389 |
|
66 | 390 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
391 |
def gen_new_installed_pkgs(self): |
838
aafbe4737188
3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
717
diff
changeset
|
392 |
""" generates all the fmris in the new set of installed pkgs""" |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
393 |
assert self.state >= EVALUATED_PKGS |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
394 |
fmri_set = set(self.image.gen_installed_pkgs()) |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
395 |
|
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
396 |
for p in self.pkg_plans: |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
397 |
p.update_pkg_set(fmri_set) |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
398 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
399 |
for pfmri in fmri_set: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
400 |
yield pfmri |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
401 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
402 |
def gen_new_installed_actions(self): |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
403 |
"""generates actions in new installed image""" |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
404 |
assert self.state >= EVALUATED_PKGS |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
405 |
for pfmri in self.gen_new_installed_pkgs(): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
406 |
m = self.image.get_manifest(pfmri) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
407 |
for act in m.gen_actions(self.__new_excludes): |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
408 |
yield act |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
409 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
410 |
def gen_new_installed_actions_bytype(self, atype): |
567
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
411 |
"""generates actions in new installed image""" |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
412 |
assert self.state >= EVALUATED_PKGS |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
413 |
for pfmri in self.gen_new_installed_pkgs(): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
414 |
m = self.image.get_manifest(pfmri) |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
415 |
for act in m.gen_actions_by_type(atype, |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
416 |
self.__new_excludes): |
567
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
417 |
yield act |
ea1d96e269a4
3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents:
565
diff
changeset
|
418 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
419 |
def get_directories(self): |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
420 |
""" return set of all directories in target image """ |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
421 |
# always consider var and var/pkg fixed in image.... |
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
422 |
# XXX should be fixed for user images |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
423 |
if self.__directories == None: |
1271
036d87b0bd44
6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents:
1231
diff
changeset
|
424 |
dirs = set(["var", |
036d87b0bd44
6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents:
1231
diff
changeset
|
425 |
"var/pkg", |
036d87b0bd44
6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents:
1231
diff
changeset
|
426 |
"var/sadm", |
956
adf6bdfdb3b5
6904 image.installed_file_authority always tries to open installed file r+
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
941
diff
changeset
|
427 |
"var/sadm/install"]) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
428 |
for pfmri in self.gen_new_installed_pkgs(): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
429 |
m = self.image.get_manifest(pfmri) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
430 |
for d in m.get_directories(self.__new_excludes): |
956
adf6bdfdb3b5
6904 image.installed_file_authority always tries to open installed file r+
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
941
diff
changeset
|
431 |
dirs.add(os.path.normpath(d)) |
adf6bdfdb3b5
6904 image.installed_file_authority always tries to open installed file r+
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
941
diff
changeset
|
432 |
self.__directories = dirs |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
433 |
return self.__directories |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
434 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
435 |
def __get_symlinks(self): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
436 |
""" return a set of all symlinks in target image""" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
437 |
if self.__symlinks == None: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
438 |
self.__symlinks = set(( |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
439 |
a.attrs["path"] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
440 |
for a in self.gen_new_installed_actions_bytype("link") |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
441 |
)) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
442 |
return self.__symlinks |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
443 |
|
1924
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
444 |
def __get_hardlinks(self): |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
445 |
""" return a set of all hardlinks in target image""" |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
446 |
if self.__hardlinks == None: |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
447 |
self.__hardlinks = set(( |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
448 |
a.attrs["path"] |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
449 |
for a in self.gen_new_installed_actions_bytype("hardlink") |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
450 |
)) |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
451 |
return self.__hardlinks |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
452 |
|
1693
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
453 |
@staticmethod |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
454 |
def default_keyfunc(name, act): |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
455 |
"""This is the default function used by get_actions when |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
456 |
the caller provides no key.""" |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
457 |
|
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
458 |
attr_name = pkg.actions.types[name].key_attr |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
459 |
return act.attrs[attr_name] |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
460 |
|
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
461 |
@staticmethod |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
462 |
def hardlink_keyfunc(name, act): |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
463 |
"""Keyfunc used in evaluate when calling get_actions |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
464 |
for hardlinks.""" |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
465 |
|
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
466 |
return act.get_target_path() |
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
467 |
|
1306
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
468 |
def get_actions(self, name, key=None): |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
469 |
"""Return a dictionary of actions of the type given by 'name' |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
470 |
describing the target image. If 'key' is given and not None, |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
471 |
the dictionary's key will be the name of the action type's key |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
472 |
attribute. Otherwise, it's a callable taking an action as an |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
473 |
argument which returns the key. This dictionary is cached for |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
474 |
quick future lookups.""" |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
475 |
if key is None: |
1693
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
476 |
key = self.default_keyfunc |
1306
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
477 |
|
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
478 |
if (name, key) in self.__cached_actions: |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
479 |
return self.__cached_actions[(name, key)] |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
480 |
|
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
481 |
d = {} |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
482 |
for act in self.gen_new_installed_actions_bytype(name): |
1693
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
483 |
t = key(name, act) |
1306
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
484 |
d.setdefault(t, []).append(act) |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
485 |
self.__cached_actions[(name, key)] = d |
9a02ddf28dea
10630 driver action gets confused by driver_aliases entries not covered by an action
Danek Duvall <danek.duvall@sun.com>
parents:
1288
diff
changeset
|
486 |
return self.__cached_actions[(name, key)] |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
487 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
2003
diff
changeset
|
488 |
def __get_manifest(self, pfmri, intent, all_variants=False): |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
489 |
"""Return manifest for pfmri""" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
490 |
if pfmri: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
491 |
return self.image.get_manifest(pfmri, |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
2003
diff
changeset
|
492 |
all_variants=all_variants or self.__variant_change, |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
2003
diff
changeset
|
493 |
intent=intent) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
494 |
else: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
495 |
return manifest.NullCachedManifest |
838
aafbe4737188
3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
717
diff
changeset
|
496 |
|
1694
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
497 |
def __create_intent(self, old_fmri, new_fmri, enabled_publishers): |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
498 |
"""Return intent strings (or None). Given a pair |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
499 |
of fmris describing a package operation, this |
1694
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
500 |
routine returns intent strings to be passed to |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
501 |
originating publisher describing manifest |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
502 |
operations. We never send publisher info to |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
503 |
prevent cross-publisher leakage of info.""" |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
504 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
505 |
if self.__noexecute: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
506 |
return None, None |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
50
diff
changeset
|
507 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
508 |
if new_fmri: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
509 |
reference = self.__references.get(new_fmri, None) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
510 |
# don't leak prev. version info across publishers |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
511 |
if old_fmri: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
512 |
if old_fmri.get_publisher() != \ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
513 |
new_fmri.get_publisher(): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
514 |
old_fmri = "unknown" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
515 |
else: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
516 |
old_fmri = old_fmri.get_fmri(anarchy=True) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
517 |
new_fmri = new_fmri.get_fmri(anarchy=True)# don't send pub |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
518 |
else: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
519 |
reference = self.__references.get(old_fmri, None) |
1694
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
520 |
# don't try to send intent info to disabled publisher |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
521 |
if old_fmri.get_publisher() in enabled_publishers: |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
522 |
old_fmri = old_fmri.get_fmri(anarchy=True)# don't send pub |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
523 |
else: |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
524 |
old_fmri = None |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
525 |
info = { |
1832
df15686547e4
6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents:
1784
diff
changeset
|
526 |
"operation": self._planned_op, |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
527 |
"old_fmri" : old_fmri, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
528 |
"new_fmri" : new_fmri, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
529 |
"reference": reference |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
530 |
} |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
531 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
532 |
s = "(%s)" % ";".join([ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
533 |
"%s=%s" % (key, info[key]) for key in info |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
534 |
if info[key] is not None |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
535 |
]) |
50 | 536 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
537 |
if new_fmri: |
1694
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
538 |
return None, s # only report new on upgrade |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
539 |
elif old_fmri: |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
540 |
return s, None # uninstall w/ enabled pub |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
541 |
else: |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
542 |
return None, None # uninstall w/ disabled pub |
1521
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
543 |
|
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
544 |
def add_actuator(self, phase, name, value): |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
545 |
"""Add an actuator to the plan. |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
546 |
|
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
547 |
The actuator name ('reboot-needed', 'restart_fmri', etc.) is |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
548 |
given in 'name', and the fmri string or callable is given in |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
549 |
'value'. The 'phase' parameter must be one of 'install', |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
550 |
'remove', or 'update'. |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
551 |
""" |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
552 |
|
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
553 |
if phase == "install": |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
554 |
d = self.__actuators.install |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
555 |
elif phase == "remove": |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
556 |
d = self.__actuators.removal |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
557 |
elif phase == "update": |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
558 |
d = self.__actuators.update |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
559 |
|
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
560 |
if callable(value): |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
561 |
d[name] = value |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
562 |
else: |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
563 |
d.setdefault(name, []).append(value) |
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
564 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
565 |
def evaluate(self, verbose=False): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
566 |
"""Given already determined fmri changes, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
567 |
build pkg plans and figure out exact impact of |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
568 |
proposed changes""" |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
569 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
570 |
assert self.state == EVALUATED_PKGS, self |
50 | 571 |
|
1710
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
572 |
if self._image_lm != self.image.get_last_modified(): |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
573 |
# State has been modified since plan was created; this |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
574 |
# plan is no longer valid. |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
575 |
raise api_errors.InvalidPlanError() |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
576 |
|
1521
946bd128177d
8647 devices not usable immediately after install
Danek Duvall <danek.duvall@sun.com>
parents:
1516
diff
changeset
|
577 |
# prefetch manifests |
1618
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
578 |
prefetch_mfsts = [] # manifest, intents to be prefetched |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
579 |
eval_list = [] # oldfmri, oldintent, newfmri, newintent |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
580 |
# prefetched intents omitted |
1694
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
581 |
enabled_publishers = set([ |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
582 |
a.prefix |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
583 |
for a in self.image.gen_publishers() |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
584 |
]) |
66 | 585 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
586 |
for oldfmri, newfmri in self.__fmri_changes: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
587 |
self.__progtrack.evaluate_progress(oldfmri) |
1694
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
588 |
old_in, new_in = self.__create_intent(oldfmri, newfmri, |
ce69ab869838
13248 client should not send intent for disabled publishers
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1693
diff
changeset
|
589 |
enabled_publishers) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
590 |
if oldfmri: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
591 |
if not self.image.has_manifest(oldfmri): |
1618
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
592 |
prefetch_mfsts.append((oldfmri, old_in)) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
593 |
old_in = None # so we don't send it twice |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
594 |
if newfmri: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
595 |
if not self.image.has_manifest(newfmri): |
1618
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
596 |
prefetch_mfsts.append((newfmri, new_in)) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
597 |
new_in = None |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
598 |
eval_list.append((oldfmri, old_in, newfmri, new_in)) |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
599 |
old_in = new_in = None |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
600 |
|
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
601 |
# No longer needed. |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
602 |
del enabled_publishers |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
603 |
self.__references = None |
66 | 604 |
|
1618
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
605 |
self.image.transport.prefetch_manifests(prefetch_mfsts, |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
606 |
progtrack=self.__progtrack, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
607 |
ccancel=self.__check_cancelation) |
66 | 608 |
|
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
609 |
# No longer needed. |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
610 |
del prefetch_mfsts |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
611 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
612 |
for oldfmri, old_in, newfmri, new_in in eval_list: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
613 |
pp = pkgplan.PkgPlan(self.image, self.__progtrack, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
614 |
self.__check_cancelation) |
235
61994d15c39b
373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents:
195
diff
changeset
|
615 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
2003
diff
changeset
|
616 |
pp.propose(oldfmri, |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
2003
diff
changeset
|
617 |
self.__get_manifest(oldfmri, old_in), |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
2003
diff
changeset
|
618 |
newfmri, self.__get_manifest(newfmri, new_in, |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
2003
diff
changeset
|
619 |
all_variants=True)) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
620 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
621 |
pp.evaluate(self.__old_excludes, self.__new_excludes) |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
622 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
623 |
if pp.origin_fmri and pp.destination_fmri: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
624 |
self.__target_update_count += 1 |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
625 |
elif pp.destination_fmri: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
626 |
self.__target_install_count += 1 |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
627 |
elif pp.origin_fmri: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
628 |
self.__target_removal_count += 1 |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
629 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
630 |
self.pkg_plans.append(pp) |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
631 |
pp = None |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
632 |
self.__progtrack.evaluate_progress() |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
633 |
|
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
634 |
# No longer needed. |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
635 |
del eval_list |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
636 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
637 |
# we now have a workable set of pkgplans to add/upgrade/remove |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
638 |
# now combine all actions together to create a synthetic single |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
639 |
# step upgrade operation, and handle editable files moving from |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
640 |
# package to package. See theory comment in execute, below. |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
641 |
|
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
642 |
ActionPlan = namedtuple("ActionPlan", "p src dst") |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
643 |
|
1784
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
644 |
self.removal_actions = [] |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
645 |
for p in self.pkg_plans: |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
646 |
for src, dest in p.gen_removal_actions(): |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
647 |
if src.name == "user": |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
648 |
self.removed_users[src.attrs["username"]] = \ |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
649 |
p.origin_fmri |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
650 |
elif src.name == "group": |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
651 |
self.removed_groups[src.attrs["groupname"]] = \ |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
652 |
p.origin_fmri |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
653 |
self.removal_actions.append(ActionPlan(p, src, |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
654 |
dest)) |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
655 |
self.__progtrack.evaluate_progress() |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
656 |
|
1784
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
657 |
self.update_actions = [] |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
658 |
for p in self.pkg_plans: |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
659 |
for src, dest in p.gen_update_actions(): |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
660 |
if dest.name == "user": |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
661 |
self.added_users[dest.attrs["username"]] = \ |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
662 |
p.destination_fmri |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
663 |
elif dest.name == "group": |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
664 |
self.added_groups[dest.attrs["groupname"]] = \ |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
665 |
p.destination_fmri |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
666 |
self.update_actions.append(ActionPlan(p, src, |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
667 |
dest)) |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
668 |
self.__progtrack.evaluate_progress() |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
669 |
|
1784
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
670 |
self.install_actions = [] |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
671 |
for p in self.pkg_plans: |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
672 |
for src, dest in p.gen_install_actions(): |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
673 |
if dest.name == "user": |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
674 |
self.added_users[dest.attrs["username"]] = \ |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
675 |
p.destination_fmri |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
676 |
elif dest.name == "group": |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
677 |
self.added_groups[dest.attrs["groupname"]] = \ |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
678 |
p.destination_fmri |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
679 |
self.install_actions.append(ActionPlan(p, src, |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
680 |
dest)) |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
681 |
self.__progtrack.evaluate_progress() |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
682 |
|
1784
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
683 |
# In case a removed user or group was added back... |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
684 |
for entry in self.added_groups.keys(): |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
685 |
if entry in self.removed_groups: |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
686 |
del self.removed_groups[entry] |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
687 |
for entry in self.added_users.keys(): |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
688 |
if entry in self.removed_users: |
e69b4aa1a6b5
791 stack trace when installing directory or file with missing mandatory attributes
Shawn Walker <srw@sun.com>
parents:
1762
diff
changeset
|
689 |
del self.removed_users[entry] |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
690 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
691 |
self.__actuators = actuator.Actuator() |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
692 |
|
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
693 |
ConsolidationEntry = namedtuple("ConsolidationEntry", "idx id") |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
694 |
|
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
695 |
# cons_named maps original_name tags to the index into |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
696 |
# removal_actions so we can retrieve them later. cons_generic |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
697 |
# maps the (action.name, action.key-attribute-value) tuple to |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
698 |
# the same thing. The reason for both is that cons_named allows |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
699 |
# us to deal with files which change their path as well as their |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
700 |
# package, while cons_generic doesn't require the "receiving" |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
701 |
# package to have marked the file in any special way, plus |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
702 |
# obviously it handles all actions even if they don't have |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
703 |
# paths. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
704 |
cons_named = {} |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
705 |
cons_generic = {} |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
706 |
for i, ap in enumerate(self.removal_actions): |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
707 |
self.__progtrack.evaluate_progress() |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
708 |
# remove dir removals if dir is still in final image |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
709 |
if ap.src.name == "dir" and \ |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
710 |
os.path.normpath(ap.src.attrs["path"]) in \ |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
711 |
self.get_directories(): |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
712 |
self.removal_actions[i] = None |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
713 |
continue |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
714 |
# remove link removal if link is still in final image |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
715 |
# (implement reference count on removal due to borked pkgs) |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
716 |
if ap.src.name == "link" and \ |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
717 |
os.path.normpath(ap.src.attrs["path"]) in \ |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
718 |
self.__get_symlinks(): |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
719 |
self.removal_actions[i] = None |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
720 |
continue |
1924
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
721 |
# discard hardlink removal if hardlink is still in final |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
722 |
# image. |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
723 |
if ap.src.name == "hardlink" and \ |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
724 |
os.path.normpath(ap.src.attrs["path"]) in \ |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
725 |
self.__get_hardlinks(): |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
726 |
self.removal_actions[i] = None |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
727 |
continue |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
728 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
729 |
# store names of files being removed under own name |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
730 |
# or original name if specified |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
731 |
if ap.src.globally_unique: |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
732 |
attrs = ap.src.attrs |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
733 |
# Store the index into removal_actions and the |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
734 |
# id of the action object in that slot. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
735 |
re = ConsolidationEntry(i, id(ap.src)) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
736 |
cons_generic[(ap.src.name, attrs[ap.src.key_attr])] = re |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
737 |
if ap.src.name == "file": |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
738 |
fname = attrs.get("original_name", |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
739 |
"%s:%s" % (ap.p.origin_fmri.get_name(), |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
740 |
attrs["path"])) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
741 |
cons_named[fname] = re |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
742 |
fname = None |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
743 |
attrs = re = None |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
744 |
|
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
745 |
self.__actuators.scan_removal(ap.src.attrs) |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
746 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
747 |
self.__progtrack.evaluate_progress() |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
748 |
|
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
749 |
# Construct a mapping from the install actions in a pkgplan to |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
750 |
# the position they have in the plan's list. This allows us to |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
751 |
# remove them efficiently later, if they've been consolidated. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
752 |
# |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
753 |
# NOTE: This means that the action ordering in the package plans |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
754 |
# must remain fixed, at least for the duration of the imageplan |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
755 |
# evaluation. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
756 |
plan_pos = {} |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
757 |
for p in self.pkg_plans: |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
758 |
for i, a in enumerate(p.gen_install_actions()): |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
759 |
plan_pos[id(a[1])] = i |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
760 |
|
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
761 |
# This keeps track of which pkgplans have had install actions |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
762 |
# consolidated away. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
763 |
pp_needs_trimming = [] |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
764 |
|
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
765 |
# This maps destination actions to the pkgplans they're |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
766 |
# associated with, which allows us to create the newly |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
767 |
# discovered update ActionPlans. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
768 |
dest_pkgplans = {} |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
769 |
|
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
770 |
new_updates = [] |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
771 |
for i, ap in enumerate(self.install_actions): |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
772 |
self.__progtrack.evaluate_progress() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
773 |
# In order to handle editable files that move their path |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
774 |
# or change pkgs, for all new files with original_name |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
775 |
# attribute, make sure file isn't being removed by |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
776 |
# checking removal list. If it is, tag removal to save |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
777 |
# file, and install to recover cached version... caching |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
778 |
# is needed if directories are removed or don't exist |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
779 |
# yet. |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
780 |
if (ap.dst.name == "file" and |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
781 |
"original_name" in ap.dst.attrs and |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
782 |
ap.dst.attrs["original_name"] in cons_named): |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
783 |
cache_name = ap.dst.attrs["original_name"] |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
784 |
index = cons_named[cache_name].idx |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
785 |
ra = self.removal_actions[index].src |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
786 |
assert(id(ra) == cons_named[cache_name].id) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
787 |
# If the paths match, don't remove and add; |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
788 |
# convert to update. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
789 |
if ap.dst.attrs["path"] == ra.attrs["path"]: |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
790 |
new_updates.append((ra, ap.dst)) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
791 |
# If we delete items here, the indices |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
792 |
# in cons_named will be bogus, so mark |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
793 |
# them for later deletion. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
794 |
self.removal_actions[index] = None |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
795 |
self.install_actions[i] = None |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
796 |
# No need to handle it in cons_generic |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
797 |
# anymore |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
798 |
del cons_generic[("file", ra.attrs["path"])] |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
799 |
dest_pkgplans[id(ap.dst)] = ap.p |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
800 |
else: |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
801 |
ra.attrs["save_file"] = cache_name |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
802 |
ap.dst.attrs["save_file"] = cache_name |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
803 |
|
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
804 |
cache_name = index = ra = None |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
805 |
|
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
806 |
# Similarly, try to prevent files (and other actions) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
807 |
# from unnecessarily being deleted and re-created if |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
808 |
# they're simply moving between packages, but only if |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
809 |
# they keep their paths (or key-attribute values). |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
810 |
keyval = ap.dst.attrs.get(ap.dst.key_attr, None) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
811 |
if (ap.dst.name, keyval) in cons_generic: |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
812 |
nkv = ap.dst.name, keyval |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
813 |
index = cons_generic[nkv].idx |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
814 |
ra = self.removal_actions[index].src |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
815 |
assert(id(ra) == cons_generic[nkv].id) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
816 |
if keyval == ra.attrs[ra.key_attr]: |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
817 |
new_updates.append((ra, ap.dst)) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
818 |
self.removal_actions[index] = None |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
819 |
self.install_actions[i] = None |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
820 |
dest_pkgplans[id(ap.dst)] = ap.p |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
821 |
# Add the action to the pkgplan's update |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
822 |
# list and mark it for removal from the |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
823 |
# install list. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
824 |
ap.p.actions.changed.append((ra, ap.dst)) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
825 |
ap.p.actions.added[plan_pos[id(ap.dst)]] = None |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
826 |
pp_needs_trimming.append(ap.p) |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
827 |
nkv = index = ra = None |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
828 |
|
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
829 |
self.__actuators.scan_install(ap.dst.attrs) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
830 |
|
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
831 |
del ConsolidationEntry, cons_generic, cons_named, plan_pos |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
832 |
|
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
833 |
# Remove from the pkgplans the install actions which have been |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
834 |
# consolidated away. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
835 |
for p in pp_needs_trimming: |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
836 |
# Can't modify the p.actions tuple, so modify the added |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
837 |
# member in-place. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
838 |
p.actions.added[:] = [ |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
839 |
a |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
840 |
for a in p.actions.added |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
841 |
if a is not None |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
842 |
] |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
843 |
del pp_needs_trimming |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
844 |
|
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
845 |
# We want to cull out actions where they've not changed at all, |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
846 |
# leaving only the changed ones to put into self.update_actions. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
847 |
nu_src = manifest.Manifest() |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
848 |
nu_src.set_content((a[0] for a in new_updates), |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
849 |
excludes=self.__old_excludes) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
850 |
nu_dst = manifest.Manifest() |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
851 |
self.__progtrack.evaluate_progress() |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
852 |
nu_dst.set_content((a[1] for a in new_updates), |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
853 |
excludes=self.__new_excludes) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
854 |
del new_updates |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
855 |
self.__progtrack.evaluate_progress() |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
856 |
nu_add, nu_chg, nu_rem = nu_dst.difference(nu_src, |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
857 |
self.__old_excludes, self.__new_excludes) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
858 |
self.__progtrack.evaluate_progress() |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
859 |
# All the differences should be updates |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
860 |
assert not nu_add |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
861 |
assert not nu_rem |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
862 |
del nu_src, nu_dst |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
863 |
|
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
864 |
# Extend update_actions with the new tuples. The package plan |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
865 |
# is the one associated with the action getting installed. |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
866 |
self.update_actions.extend([ |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
867 |
ActionPlan(dest_pkgplans[id(dst)], src, dst) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
868 |
for src, dst in nu_chg |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
869 |
]) |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
870 |
|
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
871 |
del dest_pkgplans, nu_chg |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
872 |
|
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
873 |
self.removal_actions = [ |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
874 |
a |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
875 |
for a in self.removal_actions |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
876 |
if a is not None |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
877 |
] |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
878 |
|
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
879 |
self.install_actions = [ |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
880 |
a |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
881 |
for a in self.install_actions |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
882 |
if a is not None |
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
883 |
] |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
884 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
885 |
self.__progtrack.evaluate_progress() |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
886 |
# Go over update actions |
1693
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
887 |
l_actions = self.get_actions("hardlink", self.hardlink_keyfunc) |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
888 |
l_refresh = [] |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
889 |
for a in self.update_actions: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
890 |
# For any files being updated that are the target of |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
891 |
# _any_ hardlink actions, append the hardlink actions |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
892 |
# to the update list so that they are not broken. |
1924
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
893 |
# Since we reference count hardlinks, update each one |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
894 |
# only once. |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
895 |
if a[2].name == "file": |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
896 |
path = a[2].attrs["path"] |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
897 |
if path in l_actions: |
1924
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
898 |
unique_links = dict((l.attrs["path"], l) |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
899 |
for l in l_actions[path]) |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
900 |
l_refresh.extend([ |
1713
79b3c456f189
13907 renaming SUNWcs causes renamed package delivering user to fail uninstall
Danek Duvall <danek.duvall@sun.com>
parents:
1710
diff
changeset
|
901 |
ActionPlan(a[0], l, l) |
1924
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
902 |
for l in unique_links.values() |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
903 |
]) |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
904 |
path = None |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
905 |
|
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
906 |
# scan both old and new actions |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
907 |
# repairs may result in update action w/o orig action |
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
908 |
if a[1]: |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
909 |
self.__actuators.scan_update(a[1].attrs) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
910 |
self.__actuators.scan_update(a[2].attrs) |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
911 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
912 |
self.update_actions.extend(l_refresh) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
913 |
|
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
914 |
# sort actions to match needed processing order |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
915 |
self.removal_actions.sort(key = lambda obj:obj[1], reverse=True) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
916 |
self.update_actions.sort(key = lambda obj:obj[2]) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
917 |
self.install_actions.sort(key = lambda obj:obj[2]) |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
918 |
|
1618
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
919 |
# Pre-calculate size of data retrieval for preexecute(). |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
920 |
npkgs = nfiles = nbytes = 0 |
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
921 |
for p in self.pkg_plans: |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
922 |
nf, nb = p.get_xferstats() |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
923 |
nbytes += nb |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
924 |
nfiles += nf |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
925 |
|
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
926 |
# It's not perfectly accurate but we count a download |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
927 |
# even if the package will do zero data transfer. This |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
928 |
# makes the pkg stats consistent between download and |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
929 |
# install. |
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
930 |
npkgs += 1 |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
931 |
self.__progtrack.download_set_goal(npkgs, nfiles, nbytes) |
577
cd4e8df4322b
873 Text is wrong in the General Info tab
Michal Pryc <Michal.Pryc@Sun.Com>
parents:
567
diff
changeset
|
932 |
|
1618
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
933 |
# Evaluation complete. |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
934 |
self.__progtrack.evaluate_done(self.__target_install_count, \ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
935 |
self.__target_update_count, self.__target_removal_count) |
50 | 936 |
self.state = EVALUATED_OK |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
937 |
|
329 | 938 |
def nothingtodo(self): |
368
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
939 |
""" Test whether this image plan contains any work to do """ |
329 | 940 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
941 |
# handle case w/ -n no verbose |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
942 |
if self.state == EVALUATED_PKGS: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
943 |
return not self.__fmri_changes |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
944 |
elif self.state >= EVALUATED_OK: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
945 |
return not self.pkg_plans |
329 | 946 |
|
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
947 |
def preexecute(self): |
237
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
948 |
"""Invoke the evaluated image plan |
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
949 |
preexecute, execute and postexecute |
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
950 |
execute actions need to be sorted across packages |
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
951 |
""" |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
952 |
|
50 | 953 |
assert self.state == EVALUATED_OK |
954 |
||
1710
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
955 |
if self._image_lm != self.image.get_last_modified(): |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
956 |
# State has been modified since plan was created; this |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
957 |
# plan is no longer valid. |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
958 |
self.state = PREEXECUTED_ERROR |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
959 |
raise api_errors.InvalidPlanError() |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
960 |
|
368
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
961 |
if self.nothingtodo(): |
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
962 |
self.state = PREEXECUTED_OK |
368
777fb019e807
1338 traceback when installing a package with a dependency that can not be satisfied
Brock Pytlik <bpytlik@sun.com>
parents:
329
diff
changeset
|
963 |
return |
329 | 964 |
|
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
965 |
# Checks the index to make sure it exists and is |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
966 |
# consistent. If it's inconsistent an exception is thrown. |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
967 |
# If it's totally absent, it will index the existing packages |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
968 |
# so that the incremental update that follows at the end of |
516
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
969 |
# the function will work correctly. It also repairs the index |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
970 |
# for this BE so the user can boot into this BE and have a |
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
971 |
# correct index. |
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
972 |
if self.update_index: |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
973 |
ind = None |
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
974 |
try: |
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
975 |
self.image.update_index_dir() |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
931
diff
changeset
|
976 |
ind = indexer.Indexer(self.image, |
886
8f40fc0ee8f9
6712 search shouldn't index actions for other variants of an image
Brock Pytlik <bpytlik@sun.com>
parents:
838
diff
changeset
|
977 |
self.image.get_manifest, |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
931
diff
changeset
|
978 |
self.image.get_manifest_path, |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
979 |
progtrack=self.__progtrack, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
980 |
excludes=self.__old_excludes) |
1017
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
981 |
if ind.check_index_existence(): |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
931
diff
changeset
|
982 |
try: |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
931
diff
changeset
|
983 |
ind.check_index_has_exactly_fmris( |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
931
diff
changeset
|
984 |
self.image.gen_installed_pkg_names()) |
1286
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
985 |
except se.IncorrectIndexFileHash, e: |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
986 |
self.__preexecuted_indexing_error = \ |
1286
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
987 |
api_errors.WrapSuccessfulIndexingException( |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
988 |
e, |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
989 |
traceback.format_exc(), |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
990 |
traceback.format_stack() |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
991 |
) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
931
diff
changeset
|
992 |
ind.rebuild_index_from_scratch( |
1286
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
993 |
self.image.\ |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
994 |
gen_installed_pkgs() |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
995 |
) |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
996 |
except se.IndexingException, e: |
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
997 |
# If there's a problem indexing, we want to |
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
998 |
# attempt to finish the installation anyway. If |
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
999 |
# there's a problem updating the index on the |
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
1000 |
# new image, that error needs to be |
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
1001 |
# communicated to the user. |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1002 |
self.__preexecuted_indexing_error = \ |
1286
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1003 |
api_errors.WrapSuccessfulIndexingException( |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1004 |
e, traceback.format_exc(), |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1005 |
traceback.format_stack()) |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
1006 |
|
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1007 |
# No longer needed. |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1008 |
del ind |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1009 |
|
1448
ff6208d2ff22
10919 Perform downloads in smaller chunks
johansen <johansen@sun.com>
parents:
1431
diff
changeset
|
1010 |
# Remove history about manifest/catalog transactions. This |
ff6208d2ff22
10919 Perform downloads in smaller chunks
johansen <johansen@sun.com>
parents:
1431
diff
changeset
|
1011 |
# helps the stats engine by only considering the performance of |
ff6208d2ff22
10919 Perform downloads in smaller chunks
johansen <johansen@sun.com>
parents:
1431
diff
changeset
|
1012 |
# bulk downloads. |
ff6208d2ff22
10919 Perform downloads in smaller chunks
johansen <johansen@sun.com>
parents:
1431
diff
changeset
|
1013 |
self.image.transport.stats.reset() |
1618
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1014 |
|
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1015 |
lic_errors = [] |
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1016 |
try: |
1618
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1017 |
# Check for license acceptance issues first to avoid |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1018 |
# wasted time in the download phase and so failure |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1019 |
# can occur early. |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1020 |
for p in self.pkg_plans: |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1021 |
try: |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1022 |
p.preexecute() |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1023 |
except api_errors.PkgLicenseErrors, e: |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1024 |
# Accumulate all license errors. |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1025 |
lic_errors.append(e) |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1026 |
except EnvironmentError, e: |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1027 |
if e.errno == errno.EACCES: |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1028 |
raise api_errors.PermissionsException( |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1029 |
e.filename) |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1030 |
if e.errno == errno.EROFS: |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1031 |
raise api_errors.ReadOnlyFileSystemException( |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1032 |
e.filename) |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1033 |
raise |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1034 |
|
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1035 |
if lic_errors: |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1036 |
raise api_errors.PlanLicenseErrors(lic_errors) |
04f7471c9e72
5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents:
1521
diff
changeset
|
1037 |
|
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1038 |
try: |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1039 |
for p in self.pkg_plans: |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1040 |
p.download() |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1041 |
except EnvironmentError, e: |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1042 |
if e.errno == errno.EACCES: |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1043 |
raise api_errors.PermissionsException( |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1044 |
e.filename) |
1431
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1369
diff
changeset
|
1045 |
if e.errno == errno.EROFS: |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1369
diff
changeset
|
1046 |
raise api_errors.ReadOnlyFileSystemException( |
62b6033670e4
10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents:
1369
diff
changeset
|
1047 |
e.filename) |
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1048 |
raise |
481
9fa0541013b3
2402 pkg unable to remove executable file that is in use on Windows
Tom Mueller <Tom.Mueller@sun.com>
parents:
472
diff
changeset
|
1049 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1050 |
self.__progtrack.download_done() |
1634
915de177f257
13746 transport should close connections after download phase
johansen <johansen@sun.com>
parents:
1618
diff
changeset
|
1051 |
self.image.transport.shutdown() |
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1052 |
except: |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1053 |
self.state = PREEXECUTED_ERROR |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1054 |
raise |
235
61994d15c39b
373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents:
195
diff
changeset
|
1055 |
|
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1056 |
self.state = PREEXECUTED_OK |
235
61994d15c39b
373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents:
195
diff
changeset
|
1057 |
|
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1058 |
def execute(self): |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1059 |
"""Invoke the evaluated image plan |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1060 |
preexecute, execute and postexecute |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1061 |
execute actions need to be sorted across packages |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1062 |
""" |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1063 |
assert self.state == PREEXECUTED_OK |
235
61994d15c39b
373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents:
195
diff
changeset
|
1064 |
|
1710
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
1065 |
if self._image_lm != self.image.get_last_modified(): |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
1066 |
# State has been modified since plan was created; this |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
1067 |
# plan is no longer valid. |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
1068 |
self.state = EXECUTED_ERROR |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
1069 |
raise api_errors.InvalidPlanError() |
139720e2e756
1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents:
1694
diff
changeset
|
1070 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
1071 |
# |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1072 |
# what determines execution order? |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1073 |
# |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1074 |
# The following constraints are key in understanding imageplan |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1075 |
# execution: |
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1076 |
# |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1077 |
# 1) All non-directory actions (files, users, hardlinks, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1078 |
# symbolic links, etc.) must appear in only a single installed |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1079 |
# package. |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
1080 |
# |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1081 |
# 2) All installed packages must be consistent in their view of |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1082 |
# action types; if /usr/openwin is a directory in one package, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1083 |
# it must be a directory in all packages, never a symbolic link; |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1084 |
# this includes implicitly defined directories. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1085 |
# |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1086 |
# A key goal in IPS is to be able to undergo an arbtrary |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1087 |
# transformation in package contents in a single step. Packages |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1088 |
# must be able to exchange files, convert directories to |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1089 |
# symbolic links, etc.; so long as the start and end states meet |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1090 |
# the above two constraints IPS must be able to transition |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1091 |
# between the states directly. This leads to the following: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1092 |
# |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1093 |
# 1) All actions must be ordered across packages; packages |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1094 |
# cannot be updated one at a time. |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1095 |
# |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1096 |
# This is readily apparent when one considers two packages |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1097 |
# exchanging files in their new versions; in each case the |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1098 |
# package now owning the file must be installed last, but it |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1099 |
# is not possible for each package to be installed before the |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1100 |
# other. Clearly, all the removals must be done first, |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1101 |
# followed by the installs and updates. |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1102 |
# |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1103 |
# 2) Installs of new actions must preceed updates of existing |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1104 |
# ones. |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1105 |
# |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1106 |
# In order to accomodate changes of file ownership of |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1107 |
# existing files to a newly created user, it is necessary |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1108 |
# for the installation of that user to preceed the update of |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1109 |
# files to reflect their new ownership. |
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1110 |
# |
417
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1111 |
|
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1112 |
if self.nothingtodo(): |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1113 |
self.state = EXECUTED_OK |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1114 |
return |
be3c47d9061f
1249 create snapshot & be after downloading package
Brock Pytlik <bpytlik@sun.com>
parents:
409
diff
changeset
|
1115 |
|
1017
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1116 |
# It's necessary to do this check here because the state of the |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1117 |
# image before the current operation is performed is desired. |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1118 |
empty_image = self.__is_image_empty() |
1271
036d87b0bd44
6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents:
1231
diff
changeset
|
1119 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1120 |
self.__actuators.exec_prep(self.image) |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
1121 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1122 |
self.__actuators.exec_pre_actuators(self.image) |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
1123 |
|
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1124 |
# List of tuples of (src, dest) used to track each pkgplan so |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1125 |
# that it can be discarded after execution. |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1126 |
executed_pp = [] |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
1127 |
try: |
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1128 |
try: |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1129 |
|
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1130 |
# execute removals |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1131 |
self.__progtrack.actions_set_goal( |
1271
036d87b0bd44
6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents:
1231
diff
changeset
|
1132 |
_("Removal Phase"), |
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1133 |
len(self.removal_actions)) |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1134 |
for p, src, dest in self.removal_actions: |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1135 |
p.execute_removal(src, dest) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1136 |
self.__progtrack.actions_add_progress() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1137 |
self.__progtrack.actions_done() |
237
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
1138 |
|
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1139 |
# Done with removals; discard them so memory can |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1140 |
# be re-used. |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1141 |
self.removal_actions = [] |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1142 |
|
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1143 |
# execute installs |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1144 |
self.__progtrack.actions_set_goal( |
1271
036d87b0bd44
6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents:
1231
diff
changeset
|
1145 |
_("Install Phase"), |
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1146 |
len(self.install_actions)) |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
1147 |
|
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1148 |
for p, src, dest in self.install_actions: |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1149 |
p.execute_install(src, dest) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1150 |
self.__progtrack.actions_add_progress() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1151 |
self.__progtrack.actions_done() |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
1152 |
|
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1153 |
# Done with installs, so discard them so memory |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1154 |
# can be re-used. |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1155 |
self.install_actions = [] |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1156 |
|
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1157 |
# execute updates |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1158 |
self.__progtrack.actions_set_goal( |
1271
036d87b0bd44
6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents:
1231
diff
changeset
|
1159 |
_("Update Phase"), |
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1160 |
len(self.update_actions)) |
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
1161 |
|
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1162 |
for p, src, dest in self.update_actions: |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1163 |
p.execute_update(src, dest) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1164 |
self.__progtrack.actions_add_progress() |
237
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
1165 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1166 |
self.__progtrack.actions_done() |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
296
diff
changeset
|
1167 |
|
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1168 |
# Done with updates, so discard them so memory |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1169 |
# can be re-used. |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1170 |
self.update_actions = [] |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1171 |
|
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1172 |
# handle any postexecute operations |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1173 |
while self.pkg_plans: |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1174 |
# postexecute in reverse, but pkg_plans |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1175 |
# aren't ordered, so does it matter? |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1176 |
# This allows the pkgplan objects to be |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1177 |
# discarded as they're executed which |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1178 |
# allows memory to be-reused sooner. |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1179 |
p = self.pkg_plans.pop() |
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1180 |
p.postexecute() |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1181 |
executed_pp.append((p.destination_fmri, |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1182 |
p.origin_fmri)) |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1183 |
p = None |
237
6ece196588cb
348 files that move from pkg to pkg can cause problems during upgrade
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
235
diff
changeset
|
1184 |
|
1358
6fec8fbc15a6
11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
1185 |
# save package state |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1186 |
self.image.update_pkg_installed_state( |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1187 |
executed_pp) |
1358
6fec8fbc15a6
11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents:
1352
diff
changeset
|
1188 |
|
1271
036d87b0bd44
6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents:
1231
diff
changeset
|
1189 |
# write out variant changes to the image config |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1190 |
if self.__variant_change: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1191 |
self.image.image_config_update( |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1192 |
self.__new_variants, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1193 |
self.__new_facets) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1194 |
|
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1195 |
except EnvironmentError, e: |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1196 |
if e.errno == errno.EACCES or \ |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1197 |
e.errno == errno.EPERM: |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1198 |
raise api_errors.PermissionsException( |
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1199 |
e.filename) |
1335
3dde2385d05c
516 Clean up traceback for installs to read-only filesystems
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents:
1306
diff
changeset
|
1200 |
elif e.errno == errno.EROFS: |
1755
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1201 |
raise api_errors.ReadOnlyFileSystemException( |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1202 |
e.filename) |
717
c40259b4ce98
4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents:
690
diff
changeset
|
1203 |
raise |
1755
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1204 |
except pkg.actions.ActionError: |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1205 |
exc_type, exc_value, exc_tb = sys.exc_info() |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1206 |
self.state = EXECUTED_ERROR |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1207 |
try: |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1208 |
self.__actuators.exec_fail_actuators(self.image) |
1859
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
1209 |
except: |
1755
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1210 |
# Ensure the real cause of failure is raised. |
1859
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
1211 |
pass |
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
1212 |
raise api_errors.InvalidPackageErrors([ |
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
1213 |
exc_value]), None, exc_tb |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
1214 |
except: |
1755
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1215 |
exc_type, exc_value, exc_tb = sys.exc_info() |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1216 |
self.state = EXECUTED_ERROR |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1217 |
try: |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1218 |
self.__actuators.exec_fail_actuators(self.image) |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1219 |
finally: |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1220 |
# This ensures that the original exception and |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1221 |
# traceback are used if exec_fail_actuators |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1222 |
# fails. |
8e1ed1373f93
9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents:
1713
diff
changeset
|
1223 |
raise exc_value, None, exc_tb |
584
22bc748edce6
577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
580
diff
changeset
|
1224 |
else: |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1225 |
self.__actuators.exec_post_actuators(self.image) |
516
53da6297fb65
3039 Install and Image-update should check index consistency with installed packages
Brock Pytlik <bpytlik@sun.com>
parents:
495
diff
changeset
|
1226 |
|
50 | 1227 |
self.state = EXECUTED_OK |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1228 |
|
462
910600c14093
45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
456
diff
changeset
|
1229 |
# reduce memory consumption |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1230 |
self.added_groups = {} |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1231 |
self.removed_groups = {} |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1232 |
self.added_users = {} |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1233 |
self.removed_users = {} |
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1234 |
self.saved_files = {} |
1859
6e6e866921e7
529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents:
1842
diff
changeset
|
1235 |
self.valid_directories = set() |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1236 |
self.__fmri_changes = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1237 |
self.__directories = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1238 |
self.__actuators = [] |
1693
1d855833b718
3720 Race condition exists for cancelation using the API
johansen <johansen@sun.com>
parents:
1634
diff
changeset
|
1239 |
self.__cached_actions = {} |
1924
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
1240 |
self.__symlinks = None |
ce58b6a5daa5
16066 hard links should be reference counted
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents:
1859
diff
changeset
|
1241 |
self.__hardlinks = None |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
886
diff
changeset
|
1242 |
|
2003
16461c9acfee
1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents:
1924
diff
changeset
|
1243 |
# Clear out the primordial user and group caches. |
16461c9acfee
1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents:
1924
diff
changeset
|
1244 |
self.image._users = set() |
16461c9acfee
1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents:
1924
diff
changeset
|
1245 |
self.image._groups = set() |
16461c9acfee
1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents:
1924
diff
changeset
|
1246 |
self.image._usersbyname = {} |
16461c9acfee
1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents:
1924
diff
changeset
|
1247 |
self.image._groupsbyname = {} |
16461c9acfee
1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents:
1924
diff
changeset
|
1248 |
|
429
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
1249 |
# Perform the incremental update to the search indexes |
6c9cbb6e6600
983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents:
423
diff
changeset
|
1250 |
# for all changed packages |
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
1251 |
if self.update_index: |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1252 |
self.__progtrack.actions_set_goal(_("Index Phase"), |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1253 |
len(executed_pp)) |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
931
diff
changeset
|
1254 |
self.image.update_index_dir() |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
931
diff
changeset
|
1255 |
ind = indexer.Indexer(self.image, |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
931
diff
changeset
|
1256 |
self.image.get_manifest, |
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
931
diff
changeset
|
1257 |
self.image.get_manifest_path, |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1258 |
progtrack=self.__progtrack, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1259 |
excludes=self.__new_excludes) |
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
1260 |
try: |
1017
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1261 |
if empty_image: |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1262 |
ind.setup() |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1263 |
if empty_image or ind.check_index_existence(): |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1264 |
ind.client_update_index(([], |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1265 |
executed_pp), self.image) |
1286
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1266 |
except KeyboardInterrupt: |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1267 |
raise |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1268 |
except se.ProblematicPermissionsIndexException: |
1017
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1269 |
# ProblematicPermissionsIndexException |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1270 |
# is included here as there's little |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1271 |
# chance that trying again will fix this |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1272 |
# problem. |
1286
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1273 |
raise api_errors.WrapIndexingException(e, |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1274 |
traceback.format_exc(), |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1275 |
traceback.format_stack()) |
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
1276 |
except Exception, e: |
1017
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1277 |
# It's important to delete and rebuild |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1278 |
# from scratch rather than using the |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1279 |
# existing indexer because otherwise the |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1280 |
# state will become confused. |
1842
b71de8f65cc8
15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents:
1832
diff
changeset
|
1281 |
del ind |
1017
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1282 |
# XXX Once we have a framework for |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1283 |
# emitting a message to the user in this |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1284 |
# spot in the code, we should tell them |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1285 |
# something has gone wrong so that we |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1286 |
# continue to get feedback to allow |
598
c53f6107fdb6
2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents:
584
diff
changeset
|
1287 |
# us to debug the code. |
1286
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1288 |
try: |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1289 |
ind = indexer.Indexer(self.image, |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1290 |
self.image.get_manifest, |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1291 |
self.image.get_manifest_path, |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1292 |
progtrack=self.__progtrack, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1293 |
excludes=self.__new_excludes) |
1286
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1294 |
ind.rebuild_index_from_scratch( |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1295 |
self.image.gen_installed_pkgs()) |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1296 |
except Exception, e: |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1297 |
raise api_errors.WrapIndexingException( |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1298 |
e, traceback.format_exc(), |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1299 |
traceback.format_stack()) |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1300 |
raise \ |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1301 |
api_errors.WrapSuccessfulIndexingException( |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1302 |
e, traceback.format_exc(), |
2e5bb564a9e2
8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents:
1271
diff
changeset
|
1303 |
traceback.format_stack()) |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1304 |
if self.__preexecuted_indexing_error is not None: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1305 |
raise self.__preexecuted_indexing_error |
1017
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1306 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1307 |
def __is_image_empty(self): |
1017
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1308 |
try: |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1309 |
self.image.gen_installed_pkg_names().next() |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1310 |
return False |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1311 |
except StopIteration: |
124cd379d3f6
7835 we must not rebuild the whole search index on first pkg install
Brock Pytlik <bpytlik@sun.com>
parents:
959
diff
changeset
|
1312 |
return True |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1313 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1314 |
def match_user_fmris(self, patterns, all_known, pub_ranks, installed_pubs): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1315 |
"""Given a user-specified list of patterns, return a dictionary |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1316 |
of matching fmris: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1317 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1318 |
{pkgname: [fmri1, fmri2, ...] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1319 |
pkgname: [fmri1, fmri2, ...], |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1320 |
... |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1321 |
} |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1322 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1323 |
Constraint used is always AUTO as per expected UI behavior. |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1324 |
If all_known is true, matching is done against all known package, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1325 |
otherwise just all installed pkgs. |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1326 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1327 |
Note that patterns starting w/ pkg:/ require an exact match; patterns |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1328 |
containing '*' will using fnmatch rules; the default trailing match |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1329 |
rules are used for remaining patterns. |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1330 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1331 |
Exactly duplicated patterns are ignored. |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1332 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1333 |
Routine raises PlanCreationException if errors occur: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1334 |
it is illegal to specify multiple different pattens that match |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1335 |
the same pkg name. Only patterns that contain wildcards are allowed |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1336 |
to match multiple packages. |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1337 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1338 |
Fmri lists are trimmed by publisher, either by pattern specification, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1339 |
installed version or publisher ranking, in that order when all_known |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1340 |
is True. |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1341 |
""" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1342 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1343 |
# problems we check for |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1344 |
illegals = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1345 |
nonmatch = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1346 |
multimatch = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1347 |
not_installed = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1348 |
multispec = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1349 |
wrongpub = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1350 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1351 |
matchers = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1352 |
fmris = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1353 |
pubs = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1354 |
versions = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1355 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1356 |
wildcard_patterns = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1357 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1358 |
renamed_fmris = {} |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1359 |
obsolete_fmris = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1360 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1361 |
# ignore dups |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1362 |
patterns = list(set(patterns)) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1363 |
# print patterns, all_known, pub_ranks, installed_pubs |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1364 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1365 |
# figure out which kind of matching rules to employ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1366 |
try: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1367 |
for pat in patterns: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1368 |
if "*" in pat or "?" in pat: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1369 |
matcher = pkg.fmri.glob_match |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1370 |
fmri = pkg.fmri.MatchingPkgFmri( |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1371 |
pat, "5.11") |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1372 |
wildcard_patterns.append(pat) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1373 |
elif pat.startswith("pkg:/"): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1374 |
matcher = pkg.fmri.exact_name_match |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1375 |
fmri = pkg.fmri.PkgFmri(pat, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1376 |
"5.11") |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1377 |
else: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1378 |
matcher = pkg.fmri.fmri_match |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1379 |
fmri = pkg.fmri.PkgFmri(pat, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1380 |
"5.11") |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1381 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1382 |
matchers.append(matcher) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1383 |
pubs.append(fmri.get_publisher()) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1384 |
versions.append(fmri.version) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1385 |
fmris.append(fmri) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1386 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1387 |
except pkg.fmri.IllegalFmri, e: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1388 |
illegals.append(e) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1389 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1390 |
# Create a dictionary of patterns, with each value being |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1391 |
# a dictionary of pkg names & fmris that match that pattern. |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1392 |
ret = dict(zip(patterns, [dict() for i in patterns])) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1393 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1394 |
# keep track of publishers we reject due to implict selection of |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1395 |
# installed publisher to produce better error message. |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1396 |
rejected_pubs = {} |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1397 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1398 |
if all_known: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1399 |
cat = self.image.get_catalog(self.image.IMG_CATALOG_KNOWN) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1400 |
info_needed = [pkg.catalog.Catalog.DEPENDENCY] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1401 |
else: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1402 |
cat = self.image.get_catalog(self.image.IMG_CATALOG_INSTALLED) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1403 |
info_needed = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1404 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1405 |
for name in cat.names(): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1406 |
for pat, matcher, fmri, version, pub in \ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1407 |
zip(patterns, matchers, fmris, versions, pubs): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1408 |
if not matcher(name, fmri.pkg_name): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1409 |
continue # name doesn't match |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1410 |
for ver, entries in cat.entries_by_version(name, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1411 |
info_needed=info_needed): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1412 |
if version and not ver.is_successor(version, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1413 |
pkg.version.CONSTRAINT_AUTO): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1414 |
continue # version doesn't match |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1415 |
for f, metadata in entries: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1416 |
fpub = f.get_publisher() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1417 |
if pub and pub != fpub: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1418 |
continue # specified pubs conflict |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1419 |
elif not pub and all_known and \ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1420 |
name in installed_pubs and \ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1421 |
pub_ranks[installed_pubs[name]][1] \ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1422 |
== True and installed_pubs[name] != \ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1423 |
fpub: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1424 |
rejected_pubs.setdefault(pat, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1425 |
set()).add(fpub) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1426 |
continue # installed sticky pub |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1427 |
ret[pat].setdefault(f.pkg_name, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1428 |
[]).append(f) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1429 |
states = metadata["metadata"]["states"] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1430 |
if self.image.PKG_STATE_OBSOLETE in states: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1431 |
obsolete_fmris.append(f) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1432 |
if self.image.PKG_STATE_RENAMED in states and \ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1433 |
"actions" in metadata: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1434 |
renamed_fmris[f] = metadata["actions"] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1435 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1436 |
# remove multiple matches if all versions are obsolete |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1437 |
for p in patterns: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1438 |
if len(ret[p]) > 1 and p not in wildcard_patterns: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1439 |
# create dictionary of obsolete status vs pkg_name |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1440 |
obsolete = dict([ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1441 |
(pkg_name, reduce(operator.or_, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1442 |
[f in obsolete_fmris for f in ret[p][pkg_name]])) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1443 |
for pkg_name in ret[p] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1444 |
]) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1445 |
# remove all obsolete match if non-obsolete match also exists |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1446 |
if set([True, False]) == set(obsolete.values()): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1447 |
for pkg_name in obsolete: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1448 |
if obsolete[pkg_name]: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1449 |
del ret[p][pkg_name] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1450 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1451 |
# remove newer multiple match if renamed version exists |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1452 |
for p in patterns: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1453 |
if len(ret[p]) > 1 and p not in wildcard_patterns: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1454 |
targets = [] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1455 |
renamed_matches = ( |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1456 |
pfmri |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1457 |
for pkg_name in ret[p] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1458 |
for pfmri in ret[p][pkg_name] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1459 |
if pfmri in renamed_fmris |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1460 |
) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1461 |
for f in renamed_matches: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1462 |
for a in renamed_fmris[f]: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1463 |
a = pkg.actions.fromstr(a) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1464 |
if a.name != "depend": |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1465 |
continue |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1466 |
if a.attrs["type"] != "require": |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1467 |
continue |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1468 |
targets.append(pkg.fmri.PkgFmri( |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1469 |
a.attrs["fmri"], "5.11" |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1470 |
).pkg_name) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1471 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1472 |
for pkg_name in ret[p].keys(): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1473 |
if pkg_name in targets: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1474 |
del ret[p][pkg_name] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1475 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1476 |
matchdict = {} |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1477 |
for p in patterns: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1478 |
l = len(ret[p]) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1479 |
if l == 0: # no matches at all |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1480 |
if not all_known or p not in rejected_pubs: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1481 |
nonmatch.append(p) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1482 |
elif p in rejected_pubs: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1483 |
wrongpub.append((p, rejected_pubs[p])) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1484 |
elif l > 1 and p not in wildcard_patterns: # multiple matches |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1485 |
multimatch.append((p, [n for n in ret[p]])) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1486 |
else: # single match or wildcard |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1487 |
for k in ret[p].keys(): # for each matching package name |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1488 |
matchdict.setdefault(k, []).append(p) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1489 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1490 |
for name in matchdict: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1491 |
if len(matchdict[name]) > 1: # different pats, same pkg |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1492 |
multispec.append(tuple([name] + matchdict[name])) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1493 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1494 |
if not all_known: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1495 |
not_installed, nonmatch = nonmatch, not_installed |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1496 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1497 |
if illegals or nonmatch or multimatch or not_installed or \ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1498 |
multispec or wrongpub: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1499 |
raise api_errors.PlanCreationException(unmatched_fmris=nonmatch, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1500 |
multiple_matches=multimatch, illegal=illegals, |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1501 |
missing_matches=not_installed, multispec=multispec, wrong_publishers=wrongpub) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1502 |
# merge patterns together now that there are no conflicts |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1503 |
proposed_dict = {} |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1504 |
for d in ret.values(): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1505 |
proposed_dict.update(d) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1506 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1507 |
# eliminate lower ranked publishers |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1508 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1509 |
if all_known: # no point for installed pkgs.... |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1510 |
for pkg_name in proposed_dict: |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1511 |
pubs_found = set([ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1512 |
f.get_publisher() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1513 |
for f in proposed_dict[pkg_name] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1514 |
]) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1515 |
# 1000 is hack for installed but unconfigured publishers |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1516 |
best_pub = sorted([ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1517 |
(pub_ranks.get(p, (1000, True))[0], p) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1518 |
for p in pubs_found |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1519 |
])[0][1] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1520 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1521 |
proposed_dict[pkg_name] = [ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1522 |
f |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1523 |
for f in proposed_dict[pkg_name] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1524 |
if f.get_publisher() == best_pub |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1525 |
] |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1526 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1527 |
# construct references so that we can know which pattern |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1528 |
# generated which fmris... |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1529 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1530 |
references = dict([ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1531 |
(f, p) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1532 |
for p in ret.keys() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1533 |
for flist in ret[p].values() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1534 |
for f in flist |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1535 |
]) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1536 |
|
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1461
diff
changeset
|
1537 |
return proposed_dict, references |