author | Bart Smaalders <Bart.Smaalders@Sun.COM> |
Wed, 18 Nov 2009 15:53:48 -0800 | |
changeset 1505 | cc598d70bbbe |
parent 1378 | d87edd34039a |
child 1516 | 8c950a3b4171 |
permissions | -rw-r--r-- |
409
713e20963dc2
2314 shebang lines should use minimum python version
Shawn Walker <swalker@opensolaris.org>
parents:
307
diff
changeset
|
1 |
#!/usr/bin/python2.4 |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
2 |
# |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
3 |
# CDDL HEADER START |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
4 |
# |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
5 |
# The contents of this file are subject to the terms of the |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
6 |
# Common Development and Distribution License (the "License"). |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
7 |
# You may not use this file except in compliance with the License. |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
8 |
# |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
10 |
# or http://www.opensolaris.org/os/licensing. |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
11 |
# See the License for the specific language governing permissions |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
12 |
# and limitations under the License. |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
13 |
# |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
19 |
# |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
20 |
# CDDL HEADER END |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
21 |
# |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
22 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
23 |
# |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
24 |
# Copyright 2009 Sun Microsystems, Inc. All rights reserved. |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
25 |
# Use is subject to license terms. |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
26 |
# |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
27 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
28 |
"""Action describing a package dependency. |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
29 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
30 |
This module contains the DependencyAction class, which represents a |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
31 |
relationship between the package containing the action and another package. |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
32 |
""" |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
33 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
34 |
import generic |
222
12006bf2a260
4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
180
diff
changeset
|
35 |
import pkg.fmri as fmri |
655
6eef82185057
2325 optional dependency enforcement can't handle fmris disappearing from the catalog
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
568
diff
changeset
|
36 |
import pkg.version |
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
37 |
|
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
38 |
class DependencyAction(generic.Action): |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
39 |
"""Class representing a dependency packaging object. The fmri attribute |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
40 |
is expected to be the pkg FMRI that this package depends on. The type |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
41 |
attribute is one of these: |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
42 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
43 |
optional - optional dependency on minimum version of other package. In |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
44 |
other words, if installed, other packages must be at least at specified |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
45 |
version level. |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
258
diff
changeset
|
46 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
47 |
require - dependency on minimum version of other package is needed |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
48 |
for correct function of this package. |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
258
diff
changeset
|
49 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
50 |
incorporate - optional dependency on precise version of other package; |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
51 |
non-specified portion of version is free to float. |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
258
diff
changeset
|
52 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
53 |
exclude - package may not be installed together with named version |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
54 |
or higher - reverse logic of require.""" |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
55 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
56 |
name = "depend" |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
57 |
attributes = ("type", "fmri") |
180
1f2f625cd98a
depend actions need to have a key_attr so we can diff them
Dan Price <dp@eng.sun.com>
parents:
144
diff
changeset
|
58 |
key_attr = "fmri" |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
59 |
known_types = ("optional", "require", "exclude", "incorporate") |
59
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
60 |
|
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
61 |
def __init__(self, data=None, **attrs): |
eef94b0c0694
require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents:
diff
changeset
|
62 |
generic.Action.__init__(self, data, **attrs) |
1234
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
63 |
if "type" not in self.attrs: |
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
64 |
raise pkg.actions.InvalidActionError( |
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
65 |
str(self), _("Missing type attribute")) |
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
66 |
|
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
67 |
if "fmri" not in self.attrs: |
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
68 |
raise pkg.actions.InvalidActionError( |
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
69 |
str(self), _("Missing fmri attribute")) |
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
70 |
|
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
71 |
if self.attrs["type"] not in self.known_types: |
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
72 |
raise pkg.actions.InvalidActionError(str(self), |
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
73 |
_("Unknown type (%s) in depend action") % |
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
74 |
self.attrs["type"]) |
d9885dff5d16
4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents:
1146
diff
changeset
|
75 |
|
532
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
76 |
try: |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
77 |
if "fmri" in self.attrs: |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
78 |
self.clean_fmri() |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
79 |
except ValueError: |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
80 |
print "Warning: failed to clean FMRI: %s" % \ |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
81 |
self.attrs["fmri"] |
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
82 |
|
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
83 |
def clean_fmri(self): |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
84 |
""" Clean up an invalid depend fmri into one which |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
85 |
we can recognize. |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
86 |
Example: 2.01.01.38-0.96 -> 2.1.1.38-0.96 |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
87 |
This also corrects self.attrs["fmri"] as external code |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
88 |
knows about that, too. |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
89 |
""" |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
90 |
# |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
91 |
# This hack corrects a problem in pre-2008.11 packaging |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
92 |
# metadata: some depend actions were specified with invalid |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
93 |
# fmris of the form 2.38.01.01.3 (the padding zero is considered |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
94 |
# invalid). When we get an invalid FMRI, we use regular |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
95 |
# expressions to perform a replacement operation which |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
96 |
# cleans up these problems. |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
97 |
# |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
98 |
# n.b. that this parser is not perfect: it will fix only |
532
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
99 |
# the 'release' and 'branch' part of depend fmris-- these |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
100 |
# are the only places we've seen rules violations. |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
101 |
# |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
102 |
# Lots of things could go wrong here-- the caller should |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
103 |
# catch ValueError. |
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
104 |
# |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
105 |
fmri_string = self.attrs["fmri"] |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
106 |
|
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
107 |
# |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
108 |
# Start by locating the @ and the "," or "-" or ":" which |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
109 |
# is to the right of said @. |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
110 |
# |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
111 |
verbegin = fmri_string.find("@") |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
112 |
if verbegin == -1: |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
113 |
return |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
114 |
verend = fmri_string.find(",", verbegin) |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
115 |
if verend == -1: |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
116 |
verend = fmri_string.find("-", verbegin) |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
117 |
if verend == -1: |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
118 |
verend = fmri_string.find(":", verbegin) |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
119 |
if verend == -1: |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
120 |
verend = len(fmri_string) |
532
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
121 |
|
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
122 |
# skip over the @ sign |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
123 |
verbegin += 1 |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
124 |
verdots = fmri_string[verbegin:verend] |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
125 |
dots = verdots.split(".") |
532
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
126 |
|
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
127 |
# Do the correction |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
128 |
cleanvers = ".".join([str(int(s)) for s in dots]) |
532
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
129 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
130 |
# |
532
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
131 |
# Next, find the branch if it exists, the first '-' |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
132 |
# following the version. |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
133 |
# |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
134 |
branchbegin = fmri_string.find("-", verend) |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
135 |
if branchbegin != -1: |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
136 |
branchend = fmri_string.find(":", branchbegin) |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
137 |
if branchend == -1: |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
138 |
branchend = len(fmri_string) |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
139 |
|
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
140 |
# skip over the - |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
141 |
branchbegin += 1 |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
142 |
branchdots = fmri_string[branchbegin:branchend] |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
143 |
dots = branchdots.split(".") |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
144 |
|
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
145 |
# Do the correction |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
146 |
cleanbranch = ".".join([str(int(x)) for x in dots]) |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
147 |
|
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
148 |
if branchbegin == -1: |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
149 |
cleanfmri = fmri_string[:verbegin] + cleanvers + \ |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
150 |
fmri_string[verend:] |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
151 |
else: |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
152 |
cleanfmri = fmri_string[:verbegin] + cleanvers + \ |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
153 |
fmri_string[verend:branchbegin] + cleanbranch + \ |
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
154 |
fmri_string[branchend:] |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
155 |
|
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
156 |
# XXX enable if you need to debug |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
157 |
#if cleanfmri != fmri_string: |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
158 |
# print "corrected invalid fmri: %s -> %s" % \ |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
159 |
# (fmri_string, cleanfmri) |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
160 |
self.attrs["fmri"] = cleanfmri |
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
161 |
|
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
162 |
def verify(self, image, **args): |
655
6eef82185057
2325 optional dependency enforcement can't handle fmris disappearing from the catalog
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
568
diff
changeset
|
163 |
# XXX Exclude and range between min and max not yet handled |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
258
diff
changeset
|
164 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
165 |
def __min_version(): |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
166 |
return pkg.version.Version("0", image.attrs["Build-Release"]) |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
167 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
168 |
ctype = self.attrs["type"] |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
169 |
pfmri = fmri.PkgFmri(self.attrs["fmri"], image.attrs["Build-Release"]) |
222
12006bf2a260
4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
180
diff
changeset
|
170 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
171 |
if ctype not in self.known_types: |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
172 |
return ["Unknown type (%s) in depend action" % ctype] |
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
258
diff
changeset
|
173 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
174 |
installed_version = image.get_version_installed(pfmri) |
655
6eef82185057
2325 optional dependency enforcement can't handle fmris disappearing from the catalog
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
568
diff
changeset
|
175 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
176 |
min_fmri = None |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
177 |
max_fmri = None |
222
12006bf2a260
4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
180
diff
changeset
|
178 |
|
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
179 |
if ctype == "require": |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
180 |
required = True |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
181 |
min_fmri = pfmri |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
182 |
elif ctype == "incorporate": |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
183 |
max_fmri = pfmri |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
184 |
min_fmri = pfmri |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
185 |
required = False |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
186 |
elif ctype == "optional": |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
187 |
required = False |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
188 |
min_fmri = pfmri |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
189 |
elif ctype == "exclude": |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
190 |
required = False |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
191 |
max_fmri = pfmri |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
192 |
min_fmri = pfmri.copy() |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
193 |
min_fmri.version = __min_version() |
655
6eef82185057
2325 optional dependency enforcement can't handle fmris disappearing from the catalog
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
568
diff
changeset
|
194 |
|
6eef82185057
2325 optional dependency enforcement can't handle fmris disappearing from the catalog
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
568
diff
changeset
|
195 |
if installed_version: |
6eef82185057
2325 optional dependency enforcement can't handle fmris disappearing from the catalog
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
568
diff
changeset
|
196 |
vi = installed_version.version |
659
2c35d63c360e
4455 depend.verify min_fmri checking needs to be <=, not <
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
655
diff
changeset
|
197 |
if min_fmri and min_fmri.version and \ |
2c35d63c360e
4455 depend.verify min_fmri checking needs to be <=, not <
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
655
diff
changeset
|
198 |
min_fmri.version.is_successor(vi, |
2c35d63c360e
4455 depend.verify min_fmri checking needs to be <=, not <
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
655
diff
changeset
|
199 |
pkg.version.CONSTRAINT_NONE): |
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
200 |
return ["%s dependency %s is downrev (%s)" % |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
201 |
(ctype, min_fmri, installed_version)] |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
202 |
if max_fmri and max_fmri.version and \ |
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
203 |
vi > max_fmri.version and \ |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
204 |
not vi.is_successor(max_fmri.version, |
659
2c35d63c360e
4455 depend.verify min_fmri checking needs to be <=, not <
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
655
diff
changeset
|
205 |
pkg.version.CONSTRAINT_AUTO): |
2c35d63c360e
4455 depend.verify min_fmri checking needs to be <=, not <
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
655
diff
changeset
|
206 |
return ["%s dependency %s is uprev (%s)" % |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
207 |
(ctype, max_fmri, installed_version)] |
655
6eef82185057
2325 optional dependency enforcement can't handle fmris disappearing from the catalog
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
568
diff
changeset
|
208 |
elif required: |
1505
cc598d70bbbe
4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
1378
diff
changeset
|
209 |
return ["Required dependency %s is not installed" % pfmri] |
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
210 |
|
307
3a857fd8b787
787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
258
diff
changeset
|
211 |
return [] |
222
12006bf2a260
4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
180
diff
changeset
|
212 |
|
144
ce619e0b453f
Fix unscalable search indexing
Danek Duvall <danek.duvall@sun.com>
parents:
140
diff
changeset
|
213 |
def generate_indices(self): |
1100
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
941
diff
changeset
|
214 |
"""Generates the indices needed by the search dictionary. See |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
941
diff
changeset
|
215 |
generic.py for a more detailed explanation.""" |
22a8b08d460a
7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents:
941
diff
changeset
|
216 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
217 |
ctype = self.attrs["type"] |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
218 |
pfmri = self.attrs["fmri"] |
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
219 |
|
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
220 |
if ctype not in self.known_types: |
941
e7bff46da54e
6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents:
926
diff
changeset
|
221 |
return [] |
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
59
diff
changeset
|
222 |
|
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
223 |
# |
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
59
diff
changeset
|
224 |
# XXX Ideally, we'd turn the string into a PkgFmri, and separate |
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
59
diff
changeset
|
225 |
# the stem from the version, or use get_dir_path, but we can't |
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
59
diff
changeset
|
226 |
# create a PkgFmri without supplying a build release and without |
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
59
diff
changeset
|
227 |
# it creating a dummy timestamp. So we have to split it apart |
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
59
diff
changeset
|
228 |
# manually. |
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
59
diff
changeset
|
229 |
# |
1146
7c10e9798405
3322 'depend' search index has a syntax all its own
Brock Pytlik <bpytlik@sun.com>
parents:
1100
diff
changeset
|
230 |
# XXX This code will need to change if we start using fmris |
7c10e9798405
3322 'depend' search index has a syntax all its own
Brock Pytlik <bpytlik@sun.com>
parents:
1100
diff
changeset
|
231 |
# with publishers in dependencies. |
526
8c243883ae41
822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents:
409
diff
changeset
|
232 |
# |
926
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
233 |
if pfmri.startswith("pkg:/"): |
6ee411c9026a
5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents:
659
diff
changeset
|
234 |
pfmri = pfmri[5:] |
67
62c897652bbc
Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents:
59
diff
changeset
|
235 |
# Note that this creates a directory hierarchy! |
1146
7c10e9798405
3322 'depend' search index has a syntax all its own
Brock Pytlik <bpytlik@sun.com>
parents:
1100
diff
changeset
|
236 |
inds = [ |
7c10e9798405
3322 'depend' search index has a syntax all its own
Brock Pytlik <bpytlik@sun.com>
parents:
1100
diff
changeset
|
237 |
("depend", ctype, pfmri, None) |
7c10e9798405
3322 'depend' search index has a syntax all its own
Brock Pytlik <bpytlik@sun.com>
parents:
1100
diff
changeset
|
238 |
] |
532
1b1547cb8655
3461 fmri strictness checks broke sunfreeware.com
Dan Price <dp@eng.sun.com>
parents:
526
diff
changeset
|
239 |
|
1146
7c10e9798405
3322 'depend' search index has a syntax all its own
Brock Pytlik <bpytlik@sun.com>
parents:
1100
diff
changeset
|
240 |
if "@" in pfmri: |
7c10e9798405
3322 'depend' search index has a syntax all its own
Brock Pytlik <bpytlik@sun.com>
parents:
1100
diff
changeset
|
241 |
stem = pfmri.split("@")[0] |
7c10e9798405
3322 'depend' search index has a syntax all its own
Brock Pytlik <bpytlik@sun.com>
parents:
1100
diff
changeset
|
242 |
inds.append(("depend", ctype, stem, None)) |
7c10e9798405
3322 'depend' search index has a syntax all its own
Brock Pytlik <bpytlik@sun.com>
parents:
1100
diff
changeset
|
243 |
return inds |