src/client.py
author Shawn Walker <srw@sun.com>
Wed, 02 Dec 2009 22:07:06 -0600
changeset 1538 78ac66abc186
parent 1537 00a5b4d54eb8
child 1543 223040b72119
permissions -rwxr-xr-x
12130 install/update operations should always refresh publisher metadata (when allowed) 4419 misleading error message when pkg not found because refresh failed 10976 operations should report when refresh failed if appropriate
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1516
8c950a3b4171 10485 move pkg(5) to Python 2.6
Rich Burridge <rich.burridge@sun.com>
parents: 1505
diff changeset
     1
#!/usr/bin/python2.6
1
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
     2
#
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
     3
# CDDL HEADER START
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
     4
#
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
     5
# The contents of this file are subject to the terms of the
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
     6
# Common Development and Distribution License (the "License").
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
     7
# You may not use this file except in compliance with the License.
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
     8
#
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    11
# See the License for the specific language governing permissions
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    12
# and limitations under the License.
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    13
#
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    19
#
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    20
# CDDL HEADER END
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    21
#
835
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
    22
# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
1
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    23
# Use is subject to license terms.
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    24
#
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 14
diff changeset
    25
# pkg - package system client utility
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 14
diff changeset
    26
#
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    27
# We use urllib2 for GET and POST operations, but httplib for PUT and DELETE
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    28
# operations.
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
    29
#
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
    30
# The client is going to maintain an on-disk cache of its state, so that
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
    31
# startup assembly of the graph is reduced.
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
    32
#
14
969c85e852af start pkg graph management, annotate pkgsend with server states
"Stephen Hahn <sch@sun.com>"
parents: 3
diff changeset
    33
# Client graph is of the entire local catalog.  As operations progress, package
969c85e852af start pkg graph management, annotate pkgsend with server states
"Stephen Hahn <sch@sun.com>"
parents: 3
diff changeset
    34
# states will change.
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
    35
#
14
969c85e852af start pkg graph management, annotate pkgsend with server states
"Stephen Hahn <sch@sun.com>"
parents: 3
diff changeset
    36
# Deduction operation allows the compilation of the local component of the
969c85e852af start pkg graph management, annotate pkgsend with server states
"Stephen Hahn <sch@sun.com>"
parents: 3
diff changeset
    37
# catalog, only if an authoritative repository can identify critical files.
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 14
diff changeset
    38
#
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 14
diff changeset
    39
# Environment variables
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 14
diff changeset
    40
#
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 14
diff changeset
    41
# PKG_IMAGE - root path of target image
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 14
diff changeset
    42
# PKG_IMAGE_TYPE [entire, partial, user] - type of image
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 14
diff changeset
    43
#       XXX or is this in the Image configuration?
14
969c85e852af start pkg graph management, annotate pkgsend with server states
"Stephen Hahn <sch@sun.com>"
parents: 3
diff changeset
    44
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    45
import calendar
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    46
import datetime
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    47
import errno
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    48
import getopt
116
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
    49
import gettext
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    50
import itertools
660
ea2809ad4582 4126 I10n update for IPS CLI PM and UM
John Rice <john.rice@sun.com>
parents: 653
diff changeset
    51
import locale
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
    52
import logging
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    53
import os
391
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
    54
import socket
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    55
import sys
1389
1827f487a235 8868 Changes needed to handle package descriptions in the pkg Python API.
Brock Pytlik <bpytlik@sun.com>
parents: 1370
diff changeset
    56
import textwrap
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    57
import time
192
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
    58
import traceback
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    59
import urllib2
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    60
import urlparse
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
    61
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    62
import pkg
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
    63
import pkg.actions as actions
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
    64
import pkg.client.api as api
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
    65
import pkg.client.api_errors as api_errors
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    66
import pkg.client.bootenv as bootenv
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    67
import pkg.client.history as history
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    68
import pkg.client.image as image
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    69
import pkg.client.imagetypes as imgtypes
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    70
import pkg.client.progress as progress
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    71
import pkg.client.publisher as publisher
296
576858fb8376 398 disambiguate packages matching the default authority
johansen <johansen@sun.com>
parents: 289
diff changeset
    72
import pkg.fmri as fmri
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
    73
import pkg.misc as misc
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
    74
import pkg.version as version
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
    75
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    76
from pkg.client import global_settings
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    77
from pkg.client.debugvalues import DebugValues
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
    78
from pkg.client.history import (RESULT_CANCELED, RESULT_FAILED_BAD_REQUEST,
1035
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
    79
    RESULT_FAILED_CONFIGURATION, RESULT_FAILED_TRANSPORT, RESULT_FAILED_UNKNOWN,
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
    80
    RESULT_FAILED_OUTOFMEMORY)
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
    81
from pkg.misc import EmptyI, msg, PipeError
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
    82
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
    83
CLIENT_API_VERSION = 26
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
    84
PKG_CLIENT_NAME = "pkg"
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
    85
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
    86
JUST_UNKNOWN = 0
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
    87
JUST_LEFT = -1
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
    88
JUST_RIGHT = 1
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
    89
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
    90
#pkg exit codes
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
    91
EXIT_OK      = 0
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
    92
EXIT_OOPS    = 1
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
    93
EXIT_BADOPT  = 2
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
    94
EXIT_PARTIAL = 3
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
    95
EXIT_NOP     = 4
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
    96
EXIT_NOTLIVE = 5
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
    97
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
    98
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
    99
logger = global_settings.logger
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   100
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
   101
valid_special_attrs = ["action.name", "action.key", "action.raw"]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
   102
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
   103
valid_special_prefixes = ["action."]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
   104
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   105
def error(text, cmd=None):
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
   106
        """Emit an error message prefixed by the command name """
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   107
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   108
        if cmd:
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   109
                text = "%s: %s" % (cmd, text)
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   110
                pkg_cmd = "pkg "
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   111
        else:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   112
                pkg_cmd = "pkg: "
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   113
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   114
                # If we get passed something like an Exception, we can convert
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   115
                # it down to a string.
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   116
                text = str(text)
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   117
497
534694fcd5b7 2678 Toplevel traceback handler should emit pkg version id
Danek Duvall <danek.duvall@sun.com>
parents: 496
diff changeset
   118
        # If the message starts with whitespace, assume that it should come
534694fcd5b7 2678 Toplevel traceback handler should emit pkg version id
Danek Duvall <danek.duvall@sun.com>
parents: 496
diff changeset
   119
        # *before* the command-name prefix.
534694fcd5b7 2678 Toplevel traceback handler should emit pkg version id
Danek Duvall <danek.duvall@sun.com>
parents: 496
diff changeset
   120
        text_nows = text.lstrip()
534694fcd5b7 2678 Toplevel traceback handler should emit pkg version id
Danek Duvall <danek.duvall@sun.com>
parents: 496
diff changeset
   121
        ws = text[:len(text) - len(text_nows)]
534694fcd5b7 2678 Toplevel traceback handler should emit pkg version id
Danek Duvall <danek.duvall@sun.com>
parents: 496
diff changeset
   122
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   123
        # This has to be a constant value as we can't reliably get our actual
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   124
        # program name on all platforms.
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   125
        logger.error(ws + pkg_cmd + text_nows)
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   126
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   127
def usage(usage_error=None, cmd=None, retcode=2, full=False):
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
   128
        """Emit a usage message and optionally prefix it with a more
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   129
            specific error message.  Causes program to exit. """
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   130
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   131
        if usage_error:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   132
                error(usage_error, cmd=cmd)
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   133
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   134
        if not full:
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   135
                # The full usage message isn't desired.
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   136
                logger.error(_("Try `pkg --help or -?' for more information."))
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   137
                sys.exit(retcode)
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   138
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   139
        logger.error(_("""\
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   140
Usage:
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   141
        pkg [options] command [cmd_options] [operands]
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   142
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   143
Basic subcommands:
662
b9632e3d7b26 3234 pkg(1) man page doesn't mention mirror options for set-authority
Brock Pytlik <bpytlik@sun.com>
parents: 660
diff changeset
   144
        pkg install [-nvq] [--no-refresh] [--no-index] package...
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   145
        pkg uninstall [-nrvq] [--no-index] package...
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   146
        pkg list [-Hafnsuv] [--no-refresh] [package...]
884
d780afc023ff 3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents: 879
diff changeset
   147
        pkg image-update [-fnvq] [--be-name name] [--no-refresh] [--no-index]
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
   148
        pkg refresh [--full] [publisher ...]
362
d974bb176266 1341 pkg(1) - pkg contents example#3 doesn't work and "pkg verify" synopsis does not match subcommand description
Danek Duvall <danek.duvall@sun.com>
parents: 361
diff changeset
   149
        pkg version
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
   150
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   151
Advanced subcommands:
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
   152
        pkg info [-lr] [--license] [pkg_fmri_pattern ...]
987
a3bfefdc9750 7148 -a and -p options for search should be documented
Brock Pytlik <bpytlik@sun.com>
parents: 969
diff changeset
   153
        pkg search [-alprI] [-s server] query
662
b9632e3d7b26 3234 pkg(1) man page doesn't mention mirror options for set-authority
Brock Pytlik <bpytlik@sun.com>
parents: 660
diff changeset
   154
        pkg verify [-Hqv] [pkg_fmri_pattern ...]
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   155
        pkg fix [pkg_fmri_pattern ...]
607
77b19d8766e7 3438 usage message exceeds typical line length
David.Comay@Sun.COM
parents: 605
diff changeset
   156
        pkg contents [-Hmr] [-o attribute ...] [-s sort_key]
662
b9632e3d7b26 3234 pkg(1) man page doesn't mention mirror options for set-authority
Brock Pytlik <bpytlik@sun.com>
parents: 660
diff changeset
   157
            [-t action_type ... ] [pkg_fmri_pattern ...]
582
303fa3b78f93 3588 Ensure that users don't image-create over top of an image
Brad Hall <bhall@eng.sun.com>
parents: 576
diff changeset
   158
        pkg image-create [-fFPUz] [--force] [--full|--partial|--user] [--zone]
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
   159
            [-k ssl_key] [-c ssl_cert] [--no-refresh]
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   160
            [--variant <variant_spec>=<instance>] 
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   161
            [--facet <facet_spec>=[True,False]]
938
eeb932b9b44e 7336 putback for 5871 missed a few vestiges of authority
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 936
diff changeset
   162
            (-p|--publisher) name=uri dir
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   163
        pkg change-variant [-nvq] [--be-name name] <variant_spec>=<instance>
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   164
            [<variant_spec>=<instance> ...]
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   165
        pkg change-facet -nvq [--be-name name] <facet_spec>=[True|False|None] ...
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   166
        pkg variant -H [<variant_spec>]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   167
        pkg facet -H [<facet_spec>]
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
   168
        pkg set-property propname propvalue
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
   169
        pkg unset-property propname ...
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
   170
        pkg property [-H] [propname ...]
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
   171
938
eeb932b9b44e 7336 putback for 5871 missed a few vestiges of authority
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 936
diff changeset
   172
        pkg set-publisher [-Ped] [-k ssl_key] [-c ssl_cert]
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
   173
            [-g origin_to_add | --add-origin=origin_to_add]
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
   174
            [-G origin_to_remove | --remove-origin=origin_to_remove]
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
   175
            [-m mirror_to_add | --add-mirror=mirror_to_add]
662
b9632e3d7b26 3234 pkg(1) man page doesn't mention mirror options for set-authority
Brock Pytlik <bpytlik@sun.com>
parents: 660
diff changeset
   176
            [-M mirror_to_remove | --remove-mirror=mirror_to_remove]
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   177
            [--enable] [--disable] [--no-refresh] [--reset-uuid] 
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   178
            [--non-sticky] [--sticky] [--search-after=publisher]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   179
            [--search-before=publisher] publisher
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
   180
        pkg unset-publisher publisher ...
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   181
        pkg publisher [-HPn] [publisher ...]
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
   182
        pkg history [-Hl]
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
   183
        pkg purge-history
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
   184
        pkg rebuild-index
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
   185
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   186
Options:
362
d974bb176266 1341 pkg(1) - pkg contents example#3 doesn't work and "pkg verify" synopsis does not match subcommand description
Danek Duvall <danek.duvall@sun.com>
parents: 361
diff changeset
   187
        -R dir
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
   188
        --help or -?
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   189
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   190
Environment:
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   191
        PKG_IMAGE"""))
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   192
        sys.exit(retcode)
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   193
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
   194
# XXX Subcommands to implement:
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
   195
#        pkg image-set name value
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
   196
#        pkg image-unset name
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
   197
#        pkg image-get [name ...]
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
   198
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
   199
INCONSISTENT_INDEX_ERROR_MESSAGE = "The search index appears corrupted.  " + \
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
   200
    "Please rebuild the index with 'pkg rebuild-index'."
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
   201
693
096d1091c5d4 4570 pkg rebuild-index tracesback when run without enough permissions
Brock Pytlik <bpytlik@sun.com>
parents: 688
diff changeset
   202
PROBLEMATIC_PERMISSIONS_ERROR_MESSAGE = "\n(Failure of consistent use " + \
096d1091c5d4 4570 pkg rebuild-index tracesback when run without enough permissions
Brock Pytlik <bpytlik@sun.com>
parents: 688
diff changeset
   203
    "of pfexec when executing pkg commands is often a\nsource of this problem.)"
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
   204
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   205
def check_fmri_args(args):
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   206
        """ Convenience routine to check that input args are valid fmris. """
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   207
        ret = True
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   208
        for x in args:
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   209
                try:
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   210
                        #
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   211
                        # Pass a bogus build release-- needed to satisfy
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   212
                        # fmri's checks in the common case that a version but
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   213
                        # no build release was specified by the user.
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   214
                        #
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   215
                        fmri.MatchingPkgFmri(x, build_release="1.0")
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   216
                except fmri.IllegalFmri, e:
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   217
                        error(e)
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   218
                        ret = False
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   219
        return ret
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   220
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   221
def list_inventory(img, args):
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
   222
        """List packages."""
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
   223
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   224
        opts, pargs = getopt.getopt(args, "Hafnsuv", ["no-refresh"])
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   225
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
   226
        display_headers = True
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
   227
        refresh_catalogs = True
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   228
        pkg_list = api.ImageInterface.LIST_INSTALLED
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
   229
        summary = False
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
   230
        verbose = False
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   231
        variants = False
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   232
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   233
        ltypes = set()
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   234
        for opt, arg in opts:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   235
                if opt == "-H":
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
   236
                        display_headers = False
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   237
                elif opt == "-a":
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   238
                        ltypes.add(opt)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   239
                        pkg_list = api.ImageInterface.LIST_INSTALLED_NEWEST
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   240
                elif opt == "-f":
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   241
                        ltypes.add(opt)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   242
                        pkg_list = api.ImageInterface.LIST_ALL
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   243
                        variants = True
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   244
                elif opt == "-n":
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   245
                        ltypes.add(opt)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   246
                        pkg_list = api.ImageInterface.LIST_NEWEST
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   247
                elif opt == "-s":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   248
                        summary = True
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   249
                elif opt == "-u":
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   250
                        ltypes.add(opt)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   251
                        pkg_list = api.ImageInterface.LIST_UPGRADABLE
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   252
                elif opt == "-v":
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   253
                        verbose = True
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
   254
                elif opt == "--no-refresh":
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
   255
                        refresh_catalogs = False
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   256
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   257
        allowed = [
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   258
            ("-a", ("-f", "-s", "-v")),
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   259
            ("-u", ("-s", "-v")),
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   260
            ("-n", ("-s", "-v")),
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   261
        ]
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   262
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   263
        if "-f" in ltypes and "-a" not in ltypes:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   264
                usage(_("-f may only be used in combination with -a"),
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   265
                    cmd="list")
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   266
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   267
        for ltype, permitted in allowed:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   268
                if ltype in ltypes:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   269
                        ltypes.discard(ltype)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   270
                        diff = ltypes.difference(permitted)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   271
                        if not diff:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   272
                                # Only allowed options used.
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   273
                                continue
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   274
                        usage(_("%(opts)s may not be used with %(opt)s") % {
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   275
                            "opts": ", ".join(diff), "opt": ltype })
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   276
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   277
        if summary and verbose:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   278
                usage(_("-s and -v may not be combined"), cmd="list")
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   279
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   280
        if verbose:
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   281
                fmt_str = "%-64s %-10s %s"
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   282
        elif summary:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   283
                fmt_str = "%-30s %s"
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   284
        else:
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 306
diff changeset
   285
                fmt_str = "%-45s %-15s %-10s %s"
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   286
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   287
        if not check_fmri_args(pargs):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   288
                return EXIT_OOPS
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   289
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   290
        api_inst = __api_alloc(img, quiet=not display_headers)
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   291
        if api_inst == None:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   292
                return EXIT_OOPS
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   293
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   294
        api_inst.log_operation_start("list")
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   295
        if pkg_list != api_inst.LIST_INSTALLED and refresh_catalogs:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   296
                # If the user requested packages other than those
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   297
                # installed, ensure that a refresh is performed if
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   298
                # needed since the catalog may be out of date or
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   299
                # invalid as a result of publisher information
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   300
                # changing (such as an origin uri, etc.).
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   301
                try:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   302
                        api_inst.refresh()
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   303
                except api_errors.PermissionsException:
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   304
                        # Ignore permission exceptions with the
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   305
                        # assumption that an unprivileged user is
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   306
                        # executing this command and that the
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   307
                        # refresh doesn't matter.
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   308
                        pass
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   309
                except api_errors.CatalogRefreshException, e:
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   310
                        succeeded = display_catalog_failures(e, 
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   311
                            ignore_perms_failure=True)
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   312
                        if succeeded != e.total:
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   313
                                # If total number of publishers does
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   314
                                # not match 'successful' number
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   315
                                # refreshed, abort.
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   316
                                return EXIT_OOPS
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   317
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   318
                except:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   319
                        # Ignore the above error and just use what
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   320
                        # already exists.
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   321
                        pass
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   322
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   323
        state_map = [
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   324
            [(api.PackageInfo.UPGRADABLE, "u")],
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   325
            [(api.PackageInfo.FROZEN, "f")],
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   326
            [(api.PackageInfo.OBSOLETE, "o"),
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   327
            (api.PackageInfo.RENAMED, "r")],
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   328
            [(api.PackageInfo.EXCLUDES, "x")],
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   329
            [(api.PackageInfo.INCORPORATED, "i")],
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   330
        ]
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   331
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   332
        pats = EmptyI
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   333
        if pargs:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   334
                pats = pargs
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   335
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   336
        found = False
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   337
        ppub = api_inst.get_preferred_publisher().prefix
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   338
        try:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   339
                res = api_inst.get_pkg_list(pkg_list, patterns=pats,
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   340
                    variants=variants)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   341
                for pt, summ, cats, states in res:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   342
                        found = True
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   343
                        if display_headers:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   344
                                if verbose:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   345
                                        msg(fmt_str % \
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   346
                                            ("FMRI", "STATE", "UFOXI"))
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   347
                                elif summary:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   348
                                        msg(fmt_str % \
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   349
                                            ("NAME (PUBLISHER)",
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   350
                                            "SUMMARY"))
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   351
                                else:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   352
                                        msg(fmt_str % \
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   353
                                            ("NAME (PUBLISHER)",
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   354
                                            "VERSION", "STATE", "UFOXI"))
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   355
                                display_headers = False
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   356
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   357
                        ufoxi = ""
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   358
                        for sentry in state_map:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   359
                                for s, v in sentry:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   360
                                        if s in states:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   361
                                                st = v
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   362
                                                break
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   363
                                        else:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   364
                                                st = "-"
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   365
                                ufoxi += st
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   366
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   367
                        pub, stem, ver = pt
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   368
                        if pub == ppub:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   369
                                spub = ""
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 306
diff changeset
   370
                        else:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   371
                                spub = " (" + pub + ")"
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   372
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   373
                        # Check for installed state first.
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   374
                        st_str = ""
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   375
                        if api.PackageInfo.INSTALLED in states:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   376
                                st_str = _("installed")
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   377
                        else:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   378
                                st_str = _("known")
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   379
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   380
                        if verbose:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   381
                                pfmri = "pkg://%s/%s@%s" % (pub, stem, ver)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   382
                                msg("%-64s %-10s %s" % (pfmri, st_str, ufoxi))
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   383
                                continue
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   384
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   385
                        pf = stem + spub
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   386
                        if summary:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   387
                                msg(fmt_str % (pf, summ))
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   388
                                continue
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   389
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   390
                        sver = version.Version.split(ver)[-1]
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   391
                        msg(fmt_str % (pf, sver, st_str, ufoxi))
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   392
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   393
                if not found:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   394
                        if pargs:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   395
                                raise api_errors.InventoryException(
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   396
                                    notfound=pargs)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   397
                        if pkg_list == api_inst.LIST_INSTALLED:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   398
                                logger.error(_("no packages installed"))
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   399
                                api_inst.log_operation_end(
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   400
                                    result=history.RESULT_NOTHING_TO_DO)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   401
                                return EXIT_OOPS
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   402
                        if pkg_list == api_inst.LIST_UPGRADABLE:
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   403
                                if pargs:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   404
                                        logger.error(_("No specified packages "
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   405
                                            "have newer versions available."))
361
5aca6ca29a5d 1612 pkg contents doesn't give me the manifest I asked for
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 344
diff changeset
   406
                                else:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   407
                                        logger.error(_("No installed packages "
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   408
                                            "have newer versions available."))
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   409
                                api_inst.log_operation_end(
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   410
                                    result=history.RESULT_NOTHING_TO_DO)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   411
                                return EXIT_OOPS
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
   412
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   413
                        api_inst.log_operation_end(
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   414
                            result=history.RESULT_NOTHING_TO_DO)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   415
                        return EXIT_OOPS
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
   416
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   417
                api_inst.log_operation_end()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   418
                return EXIT_OK
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   419
        except api_errors.InventoryException, e:
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   420
                if e.illegal:
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   421
                        for i in e.illegal:
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   422
                                error(i)
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   423
                        api_inst.log_operation_end(
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   424
                            result=history.RESULT_FAILED_BAD_REQUEST)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   425
                        return EXIT_OOPS
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   426
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   427
                if pkg_list == api.ImageInterface.LIST_ALL:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   428
                        state = _("known")
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   429
                elif pkg_list == api.ImageInterface.LIST_INSTALLED_NEWEST:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   430
                        state = _("known or installed")
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   431
                else:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   432
                        state = _("installed")
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   433
                for pat in e.notfound:
1063
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
   434
                        error(_("no packages matching "
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
   435
                            "'%(pattern)s' %(state)s") %
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
   436
                            { "pattern": pat, "state": state })
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   437
                api_inst.log_operation_end(result=history.RESULT_NOTHING_TO_DO)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   438
                return EXIT_OOPS
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   439
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
   440
def get_tracker(quiet=False):
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   441
        if quiet:
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   442
                progresstracker = progress.QuietProgressTracker()
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   443
        else:
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   444
                try:
236
834909099dab Fancy command line progress was busted (fix for 373)
Dan Price <dp@eng.sun.com>
parents: 235
diff changeset
   445
                        progresstracker = \
251
6c3d70b74865 470 pkg image-update can fail under some conditions
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 243
diff changeset
   446
                            progress.FancyUNIXProgressTracker()
236
834909099dab Fancy command line progress was busted (fix for 373)
Dan Price <dp@eng.sun.com>
parents: 235
diff changeset
   447
                except progress.ProgressTrackerException:
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   448
                        progresstracker = progress.CommandLineProgressTracker()
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   449
        return progresstracker
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
   450
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   451
def fix_image(img, args):
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   452
        progresstracker = get_tracker(False)
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   453
        fmris, notfound, illegals = img.installed_fmris_from_args(args)
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   454
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   455
        any_errors = False
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   456
        repairs = []
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   457
        for f, fstate in fmris:
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   458
                failed_actions = []
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   459
                for err in img.verify(f, progresstracker,
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   460
                    verbose=True, forever=True):
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   461
                        if not failed_actions:
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
   462
                                msg("Verifying: %-50s %7s" %
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   463
                                    (f.get_pkg_stem(), "ERROR"))
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   464
                        act = err[0]
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   465
                        failed_actions.append(act)
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   466
                        msg("\t%s" % act.distinguished_name())
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   467
                        for x in err[1]:
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   468
                                msg("\t\t%s" % x)
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   469
                if failed_actions:
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   470
                        repairs.append((f, failed_actions))
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   471
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   472
        # Repair anything we failed to verify
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   473
        if repairs:
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   474
                # Create a snapshot in case they want to roll back
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   475
                try:
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   476
                        be = bootenv.BootEnv(img.get_root())
834
f8b3396500b3 4883 import failure for non-sunos platforms due to missing pspawn
Tom Mueller <Tom.Mueller@sun.com>
parents: 792
diff changeset
   477
                        if be.exists():
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
   478
                                msg(_("Created ZFS snapshot: %s" %
834
f8b3396500b3 4883 import failure for non-sunos platforms due to missing pspawn
Tom Mueller <Tom.Mueller@sun.com>
parents: 792
diff changeset
   479
                                    be.snapshot_name))
605
f2898e0c1179 4002 pkg verify appends unnecessary "Unexpected OSerror" message
Brad Hall <bhall@eng.sun.com>
parents: 598
diff changeset
   480
                except RuntimeError:
f2898e0c1179 4002 pkg verify appends unnecessary "Unexpected OSerror" message
Brad Hall <bhall@eng.sun.com>
parents: 598
diff changeset
   481
                        pass # Error is printed by the BootEnv call.
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1326
diff changeset
   482
                try:
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1326
diff changeset
   483
                        success = img.repair(repairs, progresstracker)
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1326
diff changeset
   484
                except api_errors.RebootNeededOnLiveImageException:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   485
                        error(_("Requested \"fix\" operation would affect "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   486
                            "files that cannot be modified in live image.\n"
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   487
                            "Please retry this operation on an alternate boot "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   488
                            "environment."))
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   489
                        success = False
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   490
                        return EXIT_NOTLIVE
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1326
diff changeset
   491
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   492
                if not success:
885
6d507aa0f8d7 6155 Text "left over" in terminal window after pkg fix
Danek Duvall <danek.duvall@sun.com>
parents: 884
diff changeset
   493
                        progresstracker.verify_done()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   494
                        return EXIT_OOPS
885
6d507aa0f8d7 6155 Text "left over" in terminal window after pkg fix
Danek Duvall <danek.duvall@sun.com>
parents: 884
diff changeset
   495
        progresstracker.verify_done()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   496
        return EXIT_OK
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
   497
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   498
def verify_image(img, args):
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   499
        opts, pargs = getopt.getopt(args, "vfqH")
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   500
443
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 442
diff changeset
   501
        quiet = verbose = False
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 442
diff changeset
   502
        # for now, always check contents of files
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 442
diff changeset
   503
        forever = display_headers = True
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
   504
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   505
        for opt, arg in opts:
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   506
                if opt == "-H":
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   507
                        display_headers = False
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   508
                if opt == "-v":
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   509
                        verbose = True
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   510
                elif opt == "-f":
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   511
                        forever = True
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   512
                elif opt == "-q":
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   513
                        quiet = True
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   514
                        display_headers = False
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   515
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   516
        if verbose and quiet:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   517
                usage(_("-v and -q may not be combined"), cmd="verify")
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   518
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   519
        progresstracker = get_tracker(quiet)
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
   520
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   521
        if not check_fmri_args(pargs):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   522
                return EXIT_OOPS
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   523
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   524
        fmris, notfound, illegals = img.installed_fmris_from_args(pargs)
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   525
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   526
        if illegals:
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   527
                for i in illegals:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   528
                        logger.error(str(i))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   529
                return EXIT_OOPS
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
   530
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   531
        any_errors = False
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
   532
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   533
        header = False
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   534
        for f, fstate in fmris:
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   535
                pkgerr = False
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   536
                for err in img.verify(f, progresstracker,
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   537
                    verbose=verbose, forever=forever):
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   538
                        #
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   539
                        # Eventually this code should probably
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   540
                        # move into the progresstracker
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   541
                        #
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   542
                        if not pkgerr:
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   543
                                if display_headers and not header:
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   544
                                        msg("%-50s %7s" % ("PACKAGE", "STATUS"))
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   545
                                        header = True
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   546
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   547
                                if not quiet:
391
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
   548
                                        msg("%-50s %7s" % (f.get_pkg_stem(),
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
   549
                                            "ERROR"))
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   550
                                pkgerr = True
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   551
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   552
                        if not quiet:
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   553
                                msg("\t%s" % err[0].distinguished_name())
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   554
                                for x in err[1]:
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   555
                                        msg("\t\t%s" % x)
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   556
                if verbose and not pkgerr:
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   557
                        if display_headers and not header:
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   558
                                msg("%-50s %7s" % ("PACKAGE", "STATUS"))
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   559
                                header = True
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   560
                        msg("%-50s %7s" % (f.get_pkg_stem(), "OK"))
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
   561
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   562
                any_errors = any_errors or pkgerr
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
   563
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   564
        if fmris:
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   565
                progresstracker.verify_done()
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   566
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   567
        if notfound:
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   568
                if fmris:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   569
                        logger.error("")
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   570
                logger.error(_("""\
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   571
pkg: no packages matching the following patterns you specified are
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   572
installed on the system.\n"""))
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   573
                for p in notfound:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   574
                        logger.error("        %s" % p)
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   575
                if fmris:
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   576
                        if any_errors:
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   577
                                msg2 = "See above for\nverification failures."
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   578
                        else:
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   579
                                msg2 = "No packages failed\nverification."
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   580
                        logger.error(_("\nAll other patterns matched "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   581
                            "installed packages.  %s" % msg2))
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   582
                any_errors = True
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   583
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   584
        if any_errors:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   585
                return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   586
        return EXIT_OK
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
   587
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   588
def __api_prepare(operation, api_inst, verbose=False):
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   589
        # Exceptions which happen here are printed in the above level, with
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   590
        # or without some extra decoration done here.
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   591
        # XXX would be nice to kick the progress tracker.
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   592
        try:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   593
                api_inst.prepare()
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   594
        except api_errors.PermissionsException, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   595
                # Prepend a newline because otherwise the exception will
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   596
                # be printed on the same line as the spinner.
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   597
                error("\n" + str(e))
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   598
                return False
1280
9c577f0a6cd8 10411 Protect progress tracker against adversarial interfaces
johansen <johansen@sun.com>
parents: 1271
diff changeset
   599
        except api_errors.TransportError, e:
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   600
                # move past the progress tracker line.
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   601
                msg("\n")
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   602
                if verbose:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   603
                        e.verbose = True
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   604
                raise e
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   605
        except KeyboardInterrupt:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   606
                raise
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   607
        except:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   608
                error(_("\nAn unexpected error happened while preparing for " \
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   609
                    "%s:") % operation)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   610
                raise
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   611
        return True
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   612
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   613
def __api_execute_plan(operation, api_inst, raise_ActionExecutionError=True):
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   614
        try:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   615
                api_inst.execute_plan()
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   616
        except RuntimeError, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   617
                error(_("%s failed: %s") % (operation, e))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   618
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   619
        except api_errors.ImageUpdateOnLiveImageException:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   620
                error(_("%s cannot be done on live image") % operation)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   621
                return EXIT_NOTLIVE
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1326
diff changeset
   622
        except api_errors.RebootNeededOnLiveImageException:
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   623
                error(_("Requested \"%s\" operation would affect files that "
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   624
                    "cannot be modified in live image.\n"
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   625
                    "Please retry this operation on an alternate boot "
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   626
                    "environment.") % operation)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   627
                return EXIT_NOTLIVE
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   628
        except api_errors.CorruptedIndexException, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   629
                error(INCONSISTENT_INDEX_ERROR_MESSAGE)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   630
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   631
        except api_errors.ProblematicPermissionsIndexException, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   632
                error(str(e) + PROBLEMATIC_PERMISSIONS_ERROR_MESSAGE)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   633
                return EXIT_OOPS
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   634
        except api_errors.ReadOnlyFileSystemException, e:
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   635
                error(e)
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   636
                raise
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   637
        except api_errors.PermissionsException, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   638
                # Prepend a newline because otherwise the exception will
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   639
                # be printed on the same line as the spinner.
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   640
                error("\n" + str(e))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   641
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   642
        except api_errors.MainDictParsingException, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   643
                error(str(e))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   644
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   645
        except KeyboardInterrupt:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   646
                raise
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   647
        except api_errors.BEException, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   648
                error(e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   649
                return EXIT_OOPS
1286
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
   650
        except api_errors.WrapSuccessfulIndexingException:
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
   651
                raise
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   652
        except api_errors.ActionExecutionError, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   653
                if not raise_ActionExecutionError:
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   654
                        return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   655
                error(_("An unexpected error happened during " \
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   656
                    "%s: %s") % (operation, e))
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   657
                raise
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   658
        except Exception, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   659
                error(_("An unexpected error happened during " \
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   660
                    "%s: %s") % (operation, e))
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   661
                raise
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   662
        return EXIT_OK
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   663
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   664
def __api_alloc(img, quiet=False):
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   665
        progresstracker = get_tracker(quiet)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   666
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   667
        try:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   668
                api_inst = api.ImageInterface(img, CLIENT_API_VERSION,
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   669
                    progresstracker, None, PKG_CLIENT_NAME)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   670
        except api_errors.ImageNotFoundException, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   671
                error(_("No image rooted at '%s'") % e.user_dir)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   672
                return None
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   673
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   674
        return api_inst
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   675
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   676
def __api_plan_exception(op, noexecute):
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   677
        e_type, e, e_traceback = sys.exc_info()
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   678
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   679
        if e_type == api_errors.ImageNotFoundException:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   680
                error(_("No image rooted at '%s'") % e.user_dir)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   681
                return False
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   682
        if e_type == api_errors.InventoryException:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   683
                error(_("%s failed (inventory exception):\n%s") % (op, e))
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   684
                return False
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   685
        if e_type == api_errors.IpkgOutOfDateException:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   686
                msg(_("""\
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   687
WARNING: pkg(5) appears to be out of date, and should be updated before
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   688
running %s.  Please update pkg(5) using 'pfexec pkg install
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   689
SUNWipkg' and then retry the %s."""
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   690
                    ) % (op, op))
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   691
                return False
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   692
        if e_type == api_errors.NonLeafPackageException:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   693
                error(_("""\
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   694
Cannot remove '%s' due to the following packages that depend on it:"""
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   695
                    ) % e[0])
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   696
                for d in e[1]:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   697
                        logger.error("  %s" % d)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   698
                return False
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   699
        if e_type == api_errors.CatalogRefreshException:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   700
                if display_catalog_failures(e) != 0:
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   701
                        return False
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   702
                if noexecute:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   703
                        return True
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   704
                return False
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   705
        if issubclass(e_type, api_errors.BEException):
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   706
                error(_(e))
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   707
                return False
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   708
        if e_type in (api_errors.CertificateError,
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   709
            api_errors.PlanCreationException,
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   710
            api_errors.PermissionsException):
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   711
                # Prepend a newline because otherwise the exception will
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   712
                # be printed on the same line as the spinner.
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   713
                error("\n" + str(e))
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   714
                return False
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   715
        if e_type == fmri.IllegalFmri:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   716
                error(e, cmd=op)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   717
                return False
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   718
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   719
        # if we didn't deal with the exception above, pass it on.
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   720
        raise
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   721
        # NOTREACHED
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   722
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   723
def change_variant(img, args):
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   724
        """Attempt to change a variant associated with an image, updating
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   725
        the image contents as necessary."""
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   726
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   727
        op = "change-variant"
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   728
        opts, pargs = getopt.getopt(args, "nvq", ["be-name="])
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   729
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   730
        quiet = noexecute = verbose = False
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   731
        be_name = None
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   732
        for opt, arg in opts:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   733
                if opt == "-n":
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   734
                        noexecute = True
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   735
                elif opt == "-v":
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   736
                        verbose = True
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   737
                elif opt == "-q":
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   738
                        quiet = True
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   739
                elif opt == "--be-name":
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   740
                        be_name = arg
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   741
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   742
        if verbose and quiet:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   743
                usage(_("%s: -v and -q may not be combined") % op)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   744
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   745
        if not pargs:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   746
                usage(_("%s: no variants specified") % op)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   747
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   748
        variants = dict()
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   749
        for arg in pargs:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   750
                # '=' is not allowed in variant names or values
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   751
                if (len(arg.split('=')) != 2):
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   752
                        usage(_("%s: variants must to be of the form "
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   753
                            "'<name>=<value>'.") % op)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   754
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   755
                # get the variant name and value
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   756
                name, value = arg.split('=')
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   757
                if not name.startswith("variant."):
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   758
                        name = "variant.%s" % name
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   759
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   760
                # make sure the user didn't specify duplicate variants
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   761
                if name in variants:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   762
                        usage(_("%s: duplicate variant specified: %s") %
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   763
                            (op, name))
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   764
                variants[name] = value
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   765
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   766
        api_inst = __api_alloc(img, quiet)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   767
        if api_inst == None:
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   768
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   769
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   770
        try:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   771
                stuff_to_do = api_inst.plan_change_varcets(variants, facets=None,
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   772
                    noexecute=noexecute, verbose=verbose, be_name=be_name)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   773
        except:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   774
                if not __api_plan_exception(op, noexecute=noexecute):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   775
                        return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   776
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   777
        if not stuff_to_do:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   778
                msg(_("No updates necessary for this image."))
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   779
                return EXIT_NOP
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   780
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   781
        if noexecute:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   782
                return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   783
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   784
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   785
        # Exceptions which happen here are printed in the above level, with
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   786
        # or without some extra decoration done here.
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   787
        if not __api_prepare("change-variant", api_inst, verbose=verbose):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   788
                return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   789
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   790
        ret_code = __api_execute_plan("change-variant", api_inst)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   791
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   792
        if bool(os.environ.get("PKG_MIRROR_STATS", False)):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   793
                print_mirror_stats(api_inst)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   794
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   795
        return ret_code
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   796
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   797
def change_facet(img, args):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   798
        """Attempt to change the facets as specified, updating
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   799
        image as necessary"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   800
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   801
        op = "change-facet"
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   802
        opts, pargs = getopt.getopt(args, "nvq", ["be-name="])
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   803
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   804
        quiet = noexecute = verbose = False
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   805
        be_name = None
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   806
        for opt, arg in opts:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   807
                if opt == "-n":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   808
                        noexecute = True
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   809
                elif opt == "-v":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   810
                        verbose = True
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   811
                elif opt == "-q":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   812
                        quiet = True
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   813
                elif opt == "--be-name":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   814
                        be_name = arg
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   815
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   816
        if verbose and quiet:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   817
                usage(_("%s: -v and -q may not be combined") % op)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   818
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   819
        if not pargs:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   820
                usage(_("%s: no facets specified") % op)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   821
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   822
        facets = img.get_facets()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   823
        allowed_values = {
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   824
            "TRUE" : True, 
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   825
            "FALSE": False, 
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   826
            "NONE" : None
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   827
        }
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   828
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   829
        for arg in pargs:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   830
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   831
                # '=' is not allowed in facet names or values
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   832
                if (len(arg.split('=')) != 2):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   833
                        usage(_("%s: facets must to be of the form "
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   834
                            "'facet....=[True|False|None]'") % op)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   835
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   836
                # get the facet name and value
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   837
                name, value = arg.split('=')                
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   838
                if not name.startswith("facet."):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   839
                        name = "facet." + name
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   840
                
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   841
                if value.upper() not in allowed_values:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   842
                        usage(_("%s: facets must to be of the form "
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   843
                            "'facet....=[True|False|None]'.") % op)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   844
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   845
                v = allowed_values[value.upper()]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   846
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   847
                if v is None and name in facets:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   848
                        del facets[name]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   849
                else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   850
                        facets[name] = v
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   851
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   852
        api_inst = __api_alloc(img, quiet)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   853
        if api_inst == None:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   854
                return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   855
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   856
        try:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   857
                stuff_to_do = api_inst.plan_change_varcets(variants=None, 
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   858
                    facets=facets, noexecute=noexecute, verbose=verbose,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   859
                    be_name=be_name)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   860
        except:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   861
                if not __api_plan_exception(op, noexecute=noexecute):
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   862
                        return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   863
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   864
        if not stuff_to_do:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   865
                msg(_("Facet change has no effect on image"))
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   866
                return EXIT_NOP
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   867
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   868
        if noexecute:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   869
                return EXIT_OK
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   870
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   871
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   872
        # Exceptions which happen here are printed in the above level, with
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   873
        # or without some extra decoration done here.
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   874
        if not __api_prepare(op, api_inst, verbose=verbose):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   875
                return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   876
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   877
        ret_code = __api_execute_plan(op, api_inst)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   878
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   879
        if bool(os.environ.get("PKG_MIRROR_STATS", False)):
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   880
                print_mirror_stats(api_inst)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   881
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   882
        return ret_code
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   883
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   884
def image_update(img, args):
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   885
        """Attempt to take all installed packages specified to latest
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   886
        version."""
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   887
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
   888
        # XXX Publisher-catalog issues.
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   889
        # XXX Leaf package refinements.
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   890
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   891
        op = "image-update"
1094
66a14ac6bead 8538 Filelist shouldn't POST more than 128k of data
johansen <johansen@sun.com>
parents: 1087
diff changeset
   892
        opts, pargs = getopt.getopt(args, "fnvq", ["be-name=", "no-refresh",
884
d780afc023ff 3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents: 879
diff changeset
   893
            "no-index"])
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   894
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
   895
        force = quiet = noexecute = verbose = False
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   896
        refresh_catalogs = update_index = True
884
d780afc023ff 3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents: 879
diff changeset
   897
        be_name = None
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   898
        for opt, arg in opts:
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   899
                if opt == "-n":
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   900
                        noexecute = True
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   901
                elif opt == "-v":
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   902
                        verbose = True
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   903
                elif opt == "-q":
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   904
                        quiet = True
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
   905
                elif opt == "-f":
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
   906
                        force = True
537
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
   907
                elif opt == "--no-refresh":
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
   908
                        refresh_catalogs = False
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   909
                elif opt == "--no-index":
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   910
                        update_index = False
884
d780afc023ff 3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents: 879
diff changeset
   911
                elif opt == "--be-name":
d780afc023ff 3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents: 879
diff changeset
   912
                        be_name = arg
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   913
326
0f1ba0508d1b 583 src/pkg-server.xml missing a CDDL block
Dan Price <dp@eng.sun.com>
parents: 323
diff changeset
   914
        if verbose and quiet:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   915
                usage(_("-v and -q may not be combined"), cmd="image-update")
326
0f1ba0508d1b 583 src/pkg-server.xml missing a CDDL block
Dan Price <dp@eng.sun.com>
parents: 323
diff changeset
   916
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
   917
        if pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   918
                usage(_("command does not take operands ('%s')") % \
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   919
                    " ".join(pargs), cmd="image-update")
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
   920
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   921
        api_inst = __api_alloc(img, quiet)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   922
        if api_inst == None:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   923
                return EXIT_OOPS
361
5aca6ca29a5d 1612 pkg contents doesn't give me the manifest I asked for
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 344
diff changeset
   924
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   925
        try:
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   926
                stuff_to_do, opensolaris_image = \
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   927
                    api_inst.plan_update_all(sys.argv[0], refresh_catalogs,
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   928
                        noexecute, force=force, verbose=verbose,
884
d780afc023ff 3718 plan_update_all needs to have an optional argument for the new BE name
Brock Pytlik <bpytlik@sun.com>
parents: 879
diff changeset
   929
                        update_index=update_index, be_name=be_name)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   930
        except:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   931
                if not __api_plan_exception(op, noexecute=noexecute):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   932
                        return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   933
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   934
        if not stuff_to_do:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   935
                msg(_("No updates available for this image."))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   936
                return EXIT_NOP
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   937
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   938
        if noexecute:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   939
                return EXIT_OK
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   940
1315
70c85a804c8e 10779 __api_prepare() chokes on transport errors
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1286
diff changeset
   941
        if not __api_prepare(op, api_inst, verbose=verbose):
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   942
                return EXIT_OOPS
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   943
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   944
        ret_code = __api_execute_plan(op, api_inst)
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
   945
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   946
        if ret_code == 0 and opensolaris_image:
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   947
                msg("\n" + "-" * 75)
1023
73f73773b4c9 6358 Release Notes message after Update All needs to be updated
John Rice <john.rice@sun.com>
parents: 996
diff changeset
   948
                msg(_("NOTE: Please review release notes posted at:\n" ))
73f73773b4c9 6358 Release Notes message after Update All needs to be updated
John Rice <john.rice@sun.com>
parents: 996
diff changeset
   949
                msg(misc.get_release_notes_url())
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   950
                msg("-" * 75 + "\n")
388
5a08791fb814 2188 Client must fail gracefully when network timeout occurs
johansen <johansen@sun.com>
parents: 384
diff changeset
   951
648
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   952
        if bool(os.environ.get("PKG_MIRROR_STATS", False)):
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   953
                print_mirror_stats(api_inst)
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   954
251
6c3d70b74865 470 pkg image-update can fail under some conditions
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 243
diff changeset
   955
        return ret_code
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   956
648
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   957
def print_mirror_stats(api_inst):
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   958
        """Given an api_inst object, print depot status information."""
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   959
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   960
        status_fmt = "%-10s %-35s %10s %10s"
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
   961
        print status_fmt % ("Publisher", "URI", "Success", "Failure")
648
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   962
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   963
        for ds in api_inst.img.gen_depot_status():
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
   964
                print status_fmt % (ds.prefix, ds.url, ds.good_tx, ds.errors)
648
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   965
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   966
def install(img, args):
50
bfcb1661f019 basic image and package plans
Stephen Hahn <sch@sun.com>
parents: 48
diff changeset
   967
        """Attempt to take package specified to INSTALLED state.  The operands
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
   968
        are interpreted as glob patterns."""
32
c26788b7217c begin client install; sequences are now timestamps; skeleton ELF module
Stephen Hahn <sch@sun.com>
parents: 30
diff changeset
   969
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
   970
        # XXX Publisher-catalog issues.
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   971
        op = "install"
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   972
        opts, pargs = getopt.getopt(args, "nvq", ["no-refresh", "no-index"])
32
c26788b7217c begin client install; sequences are now timestamps; skeleton ELF module
Stephen Hahn <sch@sun.com>
parents: 30
diff changeset
   973
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
   974
        quiet = noexecute = verbose = False
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   975
        refresh_catalogs = update_index = True
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   976
32
c26788b7217c begin client install; sequences are now timestamps; skeleton ELF module
Stephen Hahn <sch@sun.com>
parents: 30
diff changeset
   977
        for opt, arg in opts:
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
   978
                if opt == "-n":
63
ba3a4af65479 add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents: 60
diff changeset
   979
                        noexecute = True
ba3a4af65479 add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents: 60
diff changeset
   980
                elif opt == "-v":
ba3a4af65479 add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents: 60
diff changeset
   981
                        verbose = True
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   982
                elif opt == "-q":
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   983
                        quiet = True
537
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
   984
                elif opt == "--no-refresh":
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
   985
                        refresh_catalogs = False
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   986
                elif opt == "--no-index":
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   987
                        update_index = False
32
c26788b7217c begin client install; sequences are now timestamps; skeleton ELF module
Stephen Hahn <sch@sun.com>
parents: 30
diff changeset
   988
321
19d23a8acb5f 1098 running "pkg install" without args does not return for about 5 seconds
Danek Duvall <danek.duvall@sun.com>
parents: 318
diff changeset
   989
        if not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   990
                usage(_("at least one package name required"), cmd="install")
321
19d23a8acb5f 1098 running "pkg install" without args does not return for about 5 seconds
Danek Duvall <danek.duvall@sun.com>
parents: 318
diff changeset
   991
326
0f1ba0508d1b 583 src/pkg-server.xml missing a CDDL block
Dan Price <dp@eng.sun.com>
parents: 323
diff changeset
   992
        if verbose and quiet:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   993
                usage(_("-v and -q may not be combined"), cmd="install")
326
0f1ba0508d1b 583 src/pkg-server.xml missing a CDDL block
Dan Price <dp@eng.sun.com>
parents: 323
diff changeset
   994
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   995
        if not check_fmri_args(pargs):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   996
                return EXIT_OOPS
39
37b18a02b3ae initial Manifest class; client uses is_same_pkg() and max() to select version
"Stephen Hahn <sch@sun.com>"
parents: 36
diff changeset
   997
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   998
        api_inst = __api_alloc(img, quiet)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   999
        if api_inst == None:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1000
                return EXIT_OOPS
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1001
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1002
        try:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1003
                stuff_to_do = api_inst.plan_install(pargs,
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  1004
                    refresh_catalogs, noexecute, verbose=verbose,
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  1005
                    update_index=update_index)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1006
        except:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1007
                if not __api_plan_exception(op, noexecute=noexecute):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1008
                        return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1009
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1010
        if not stuff_to_do:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1011
                msg(_("No updates necessary for this image."))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1012
                return EXIT_NOP
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1013
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1014
        if noexecute:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1015
                return EXIT_OK
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1016
576
6ee6de304041 3777 PKG_TIMEOUT_MAX is a placebo setting
Dan Price <dp@eng.sun.com>
parents: 575
diff changeset
  1017
        # Exceptions which happen here are printed in the above level, with
6ee6de304041 3777 PKG_TIMEOUT_MAX is a placebo setting
Dan Price <dp@eng.sun.com>
parents: 575
diff changeset
  1018
        # or without some extra decoration done here.
1315
70c85a804c8e 10779 __api_prepare() chokes on transport errors
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1286
diff changeset
  1019
        if not __api_prepare(op, api_inst, verbose=verbose):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1020
                return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1021
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1022
        ret_code = __api_execute_plan(op, api_inst,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1023
            raise_ActionExecutionError=False)
271
ec8a7669bff2 659 package that delivers existing automounter mountpoint fails installation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 266
diff changeset
  1024
648
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
  1025
        if bool(os.environ.get("PKG_MIRROR_STATS", False)):
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
  1026
                print_mirror_stats(api_inst)
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
  1027
251
6c3d70b74865 470 pkg image-update can fail under some conditions
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 243
diff changeset
  1028
        return ret_code
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  1029
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1030
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1031
def uninstall(img, args):
14
969c85e852af start pkg graph management, annotate pkgsend with server states
"Stephen Hahn <sch@sun.com>"
parents: 3
diff changeset
  1032
        """Attempt to take package specified to DELETED state."""
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1033
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1034
        op = "uninstall"
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  1035
        opts, pargs = getopt.getopt(args, "nrvq", ["no-index"])
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1036
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
  1037
        quiet = noexecute = recursive_removal = verbose = False
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  1038
        update_index = True
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1039
        for opt, arg in opts:
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1040
                if opt == "-n":
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1041
                        noexecute = True
67
62c897652bbc Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents: 66
diff changeset
  1042
                elif opt == "-r":
62c897652bbc Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents: 66
diff changeset
  1043
                        recursive_removal = True
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1044
                elif opt == "-v":
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1045
                        verbose = True
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
  1046
                elif opt == "-q":
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
  1047
                        quiet = True
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  1048
                elif opt == "--no-index":
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  1049
                        update_index = False
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1050
361
5aca6ca29a5d 1612 pkg contents doesn't give me the manifest I asked for
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 344
diff changeset
  1051
        if not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1052
                usage(_("at least one package name required"), cmd="uninstall")
344
4c887185d780 528 pkg list -u gives confusing output
Dan Price <dp@eng.sun.com>
parents: 343
diff changeset
  1053
326
0f1ba0508d1b 583 src/pkg-server.xml missing a CDDL block
Dan Price <dp@eng.sun.com>
parents: 323
diff changeset
  1054
        if verbose and quiet:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1055
                usage(_("-v and -q may not be combined"), cmd="uninstall")
326
0f1ba0508d1b 583 src/pkg-server.xml missing a CDDL block
Dan Price <dp@eng.sun.com>
parents: 323
diff changeset
  1056
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1057
        if not check_fmri_args(pargs):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1058
                return EXIT_OOPS
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1059
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1060
        api_inst = __api_alloc(img, quiet)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1061
        if api_inst is None:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1062
                return EXIT_OOPS
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1063
432
578875da6e04 48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents: 431
diff changeset
  1064
        try:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1065
                if not api_inst.plan_uninstall(pargs, recursive_removal,
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  1066
                    noexecute, verbose=verbose, update_index=update_index):
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1067
                        assert 0
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1068
        except:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1069
                if not __api_plan_exception(op, noexecute=noexecute):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1070
                        return EXIT_OOPS
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1071
        if noexecute:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1072
                return EXIT_OK
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1073
576
6ee6de304041 3777 PKG_TIMEOUT_MAX is a placebo setting
Dan Price <dp@eng.sun.com>
parents: 575
diff changeset
  1074
        # Exceptions which happen here are printed in the above level, with
6ee6de304041 3777 PKG_TIMEOUT_MAX is a placebo setting
Dan Price <dp@eng.sun.com>
parents: 575
diff changeset
  1075
        # or without some extra decoration done here.
1315
70c85a804c8e 10779 __api_prepare() chokes on transport errors
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1286
diff changeset
  1076
        if not __api_prepare(op, api_inst, verbose=verbose):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1077
                return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1078
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1079
        return __api_execute_plan(op, api_inst)
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
  1080
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
  1081
def freeze(img, args):
14
969c85e852af start pkg graph management, annotate pkgsend with server states
"Stephen Hahn <sch@sun.com>"
parents: 3
diff changeset
  1082
        """Attempt to take package specified to FROZEN state, with given
116
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
  1083
        restrictions.  Package must have been in the INSTALLED state."""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1084
        return EXIT_OK
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  1085
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
  1086
def unfreeze(img, args):
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  1087
        """Attempt to return package specified to INSTALLED state from FROZEN
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  1088
        state."""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1089
        return EXIT_OK
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  1090
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1091
def __convert_output(a_str, match):
1100
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1092
        """Converts a string to a three tuple with the information to fill
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1093
        the INDEX, ACTION, and VALUE columns.
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1094
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1095
        The "a_str" parameter is the string representation of an action.
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1096
1100
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1097
        The "match" parameter is a string whose precise interpretation is given
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1098
        below.
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1099
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1100
        For most action types, match defines which attribute the query matched
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1101
        with.  For example, it states whether the basename or path attribute of
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1102
        a file action matched the query.  Attribute (set) actions are treated
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1103
        differently because they only have one attribute, and many values
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1104
        associated with that attribute.  For those actions, the match parameter
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1105
        states which value matched the query."""
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1106
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1107
        a = actions.fromstr(a_str.rstrip())
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1108
        if isinstance(a, actions.attribute.AttributeAction):
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1109
                return a.attrs.get(a.key_attr), a.name, match
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1110
        return match, a.name, a.attrs.get(a.key_attr)
60
6bd5cd83cfb1 Reverse index database and searching support.
Danek Duvall <danek.duvall@sun.com>
parents: 59
diff changeset
  1111
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1112
def produce_matching_token(action, match):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1113
        """Given an action and a match value (see convert_output for more
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1114
        details on this parameter), return the token which matched the query."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1115
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1116
        if isinstance(action, actions.attribute.AttributeAction):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1117
                return match
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1118
        if match == "basename":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1119
                return action.attrs.get("path")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1120
        r = action.attrs.get(match)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1121
        if r:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1122
                return r
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1123
        return action.attrs.get(action.key_attr)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1124
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1125
def produce_matching_type(action, match):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1126
        """Given an action and a match value (see convert_output for more
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1127
        details on this parameter), return the kind of match this was.  For
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1128
        example, if the query matched a portion of a path of an action, this
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1129
        will return 'path'.  If the action is an attribute action, it returns
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1130
        the name set in the action. """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1131
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1132
        if not isinstance(action, actions.attribute.AttributeAction):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1133
                return match
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1134
        return action.attrs.get("name")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1135
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1136
def v1_extract_info(tup, return_type, pub):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1137
        """Given a result from search, massages the information into a form
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1138
        useful for produce_lines.
1100
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1139
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1140
        The "return_type" parameter is an enumeration that describes the type
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1141
        of the information that will be converted.
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1142
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1143
        The type of the "tup" parameter depends on the value of "return_type".
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1144
        If "return_type" is action information, "tup" is a three-tuple of the
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1145
        fmri name, the match, and a string representation of the action.  In
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1146
        the case where "return_type" is package information, "tup" is a one-
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1147
        tuple containing the fmri name.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1148
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1149
        The "pub" parameter contains information about the publisher from which
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1150
        the result was obtained."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1151
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1152
        action = None
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1153
        match = None
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1154
        match_type = None
1100
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1155
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1156
        if return_type == api.Query.RETURN_ACTIONS:
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1157
                try:
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1158
                        pfmri, match, action = tup
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1159
                except ValueError:
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1160
                        error(_("The server returned a malformed result.\n"
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1161
                            "The problematic structure:%r") % (tup,))
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1162
                        return False
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1163
                try:
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1164
                        action = actions.fromstr(action.rstrip())
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1165
                except actions.ActionError, e:
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1166
                        error(_("The server returned an invalid action.\n%s") %
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1167
                            e)
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1168
                        return False
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1169
                match_type = produce_matching_type(action, match)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1170
                match = produce_matching_token(action, match)
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1171
        else:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1172
                pfmri = tup
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1173
        pfmri = fmri.PkgFmri(str(pfmri))
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1174
        return pfmri, action, pub, match, match_type
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1175
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1176
def search(img, args):
1100
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1177
        """Search for the given query."""
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1178
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1179
        # Constants which control the paging behavior for search output.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1180
        page_timeout = .5
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1181
        max_timeout = 5
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1182
        min_page_size = 5
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1183
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1184
        search_attrs = valid_special_attrs[:]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1185
        search_attrs.extend(["search.match", "search.match_type"])
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1186
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1187
        search_prefixes = valid_special_prefixes[:]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1188
        search_prefixes.extend(["search."])
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1189
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1190
        opts, pargs = getopt.getopt(args, "Halo:prs:I")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1191
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1192
        default_attrs_action = ["search.match_type", "action.name",
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1193
            "search.match", "pkg.shortfmri"]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1194
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1195
        default_attrs_package = ["pkg.shortfmri", "pkg.publisher"]
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1196
499
ff214b0daeb1 2672 Search should allow for case insensitive search.
Brock Pytlik <bpytlik@sun.com>
parents: 497
diff changeset
  1197
        local = remote = case_sensitive = False
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1198
        servers = []
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1199
        attrs = []
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1200
        return_actions = True
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1201
        display_headers = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1202
        use_default_attrs = True
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1203
        for opt, arg in opts:
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1204
                if opt == "-H":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1205
                        display_headers = False
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1206
                elif opt == "-a":
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1207
                        return_actions = True
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1208
                elif opt == "-l":
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1209
                        local = True
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1210
                elif opt == "-o":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1211
                        attrs.extend(arg.split(","))
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1212
                        use_default_attrs = False
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1213
                elif opt == "-p":
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1214
                        return_actions = False
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
  1215
                elif opt == "-r":
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1216
                        remote = True
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1217
                elif opt == "-s":
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1218
                        if not misc.valid_pub_url(arg):
706
b03694503984 1541 pkg search -s tracebacks if server url is malformed
Brock Pytlik <bpytlik@sun.com>
parents: 696
diff changeset
  1219
                                orig_arg = arg
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1220
                                arg = "http://" + arg
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1221
                                if not misc.valid_pub_url(arg):
706
b03694503984 1541 pkg search -s tracebacks if server url is malformed
Brock Pytlik <bpytlik@sun.com>
parents: 696
diff changeset
  1222
                                        error(_("%s is not a valid "
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1223
                                            "server URL.") % orig_arg)
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1224
                                        return EXIT_OOPS
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1225
                        remote = True
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1226
                        servers.append({"origin": arg})
499
ff214b0daeb1 2672 Search should allow for case insensitive search.
Brock Pytlik <bpytlik@sun.com>
parents: 497
diff changeset
  1227
                elif opt == "-I":
ff214b0daeb1 2672 Search should allow for case insensitive search.
Brock Pytlik <bpytlik@sun.com>
parents: 497
diff changeset
  1228
                        case_sensitive = True
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1229
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1230
        if not local and not remote:
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1231
                remote = True
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  1232
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1233
        if not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1234
                usage(_("at least one search term must be provided"),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1235
                    cmd="search")
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1236
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1237
        check_attrs(attrs, "search", reference=search_attrs,
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1238
            prefixes=search_prefixes)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1239
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1240
        action_attr = False
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1241
        for a in attrs:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1242
                if a.startswith("action.") or a.startswith("search.match"):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1243
                        action_attr = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1244
                        if not return_actions:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1245
                                usage(_("action level options ('%s') to -o "
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1246
                                    "cannot be used with the -p option") % a,
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1247
                                    cmd="search")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1248
                        break
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1249
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1250
        searches = []
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1251
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1252
        api_inst = __api_alloc(img)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1253
        if api_inst == None:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1254
                return EXIT_OOPS
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1255
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1256
        try:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1257
                query = [api.Query(" ".join(pargs), case_sensitive,
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1258
                    return_actions)]
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1259
        except api_errors.BooleanQueryException, e:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1260
                error(e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1261
                return EXIT_OOPS
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1262
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1263
        good_res = False
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1264
        bad_res = False
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1265
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1266
        try:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1267
                if local:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1268
                        searches.append(api_inst.local_search(query))
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1269
                if remote:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1270
                        searches.append(api_inst.remote_search(query,
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1271
                            servers=servers))
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1272
                # By default assume we don't find anything.
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1273
                retcode = EXIT_OOPS
302
a5268194080e 981 pkg search could have more useful output
Danek Duvall <danek.duvall@sun.com>
parents: 301
diff changeset
  1274
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1275
                # get initial set of results
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1276
                justs = calc_justs(attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1277
                page_again = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1278
                widths = []
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1279
                st = None
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1280
                ssu = None
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1281
                header_attrs = attrs
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1282
                while page_again:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1283
                        unprocessed_res = []
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1284
                        page_again = False
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1285
                        # Indexless search raises a slow search exception. In
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1286
                        # that case, catch the exception, finish processing the
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1287
                        # results, then propogate the error.
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1288
                        try:
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1289
                                for raw_value in itertools.chain(*searches):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1290
                                        if not st:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1291
                                                st = time.time()
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1292
                                        try:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1293
                                                query_num, pub, \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1294
                                                    (v, return_type, tmp) = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1295
                                                    raw_value
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1296
                                        except ValueError, e:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1297
                                                error(_("The server returned a "
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1298
                                                    "malformed result:%r") %
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1299
                                                    (raw_value,))
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1300
                                                bad_res = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1301
                                                continue
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1302
                                        # This check is necessary since a
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1303
                                        # a pacakge search can be specified
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1304
                                        # using the <> operator.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1305
                                        if action_attr and \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1306
                                            return_type != \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1307
                                            api.Query.RETURN_ACTIONS:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1308
                                                usage(_("action level options "
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1309
                                                    "to -o cannot be used with "
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1310
                                                    "the queries that return "
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1311
                                                    "packages"), cmd="search")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1312
                                        if use_default_attrs and not justs:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1313
                                                if return_type == \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1314
                                                    api.Query.RETURN_ACTIONS:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1315
                                                        attrs = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1316
                                                            default_attrs_action
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1317
                                                        header_attrs = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1318
                                                            ["index", "action",
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1319
                                                            "value", "package"]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1320
                                                else:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1321
                                                        attrs = default_attrs_package
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1322
                                                        header_attrs = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1323
                                                            ["package",
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1324
                                                            "publisher"]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1325
                                                justs = calc_justs(attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1326
                                        ret = v1_extract_info(
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1327
                                            tmp, return_type, pub)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1328
                                        bad_res |= isinstance(ret, bool)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1329
                                        if ret:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1330
                                                good_res = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1331
                                                unprocessed_res.append(ret)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1332
                                        # Check whether the paging timeout
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1333
                                        # should be increased.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1334
                                        if time.time() - st > page_timeout:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1335
                                                if len(unprocessed_res) > \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1336
                                                    min_page_size:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1337
                                                        page_again = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1338
                                                        break
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1339
                                                else:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1340
                                                        page_timeout = min(
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1341
                                                            page_timeout * 2,
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1342
                                                            max_timeout)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1343
                        except api_errors.SlowSearchUsed, e:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1344
                                ssu = e
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1345
                        lines = produce_lines(unprocessed_res, attrs,
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1346
                            show_all=True)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1347
                        old_widths = widths[:]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1348
                        widths = calc_widths(lines, attrs, widths)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1349
                        # If headers are being displayed and the layout of the
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1350
                        # columns have changed, print the headers again using
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1351
                        # the new widths.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1352
                        if display_headers and old_widths[:-1] != widths[:-1]:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1353
                                print_headers(header_attrs, widths, justs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1354
                        for line in lines:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1355
                                msg((create_output_format(display_headers,
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1356
                                    widths, justs, line) %
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1357
                                    tuple(line)).rstrip())
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1358
                        st = time.time()
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1359
                if ssu:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1360
                        raise ssu
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1361
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1362
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1363
        except (api_errors.IncorrectIndexFileHash,
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1364
            api_errors.InconsistentIndexException):
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1365
                error(_("The search index appears corrupted.  Please "
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1366
                    "rebuild the index with 'pkg rebuild-index'."))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1367
                return EXIT_OOPS
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1368
        except api_errors.ProblematicSearchServers, e:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1369
                error(e)
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1370
                bad_res = True
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1371
        except api_errors.SlowSearchUsed, e:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1372
                error(e)
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1373
        except (api_errors.IncorrectIndexFileHash,
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1374
            api_errors.InconsistentIndexException):
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1375
                error(_("The search index appears corrupted.  Please "
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1376
                    "rebuild the index with 'pkg rebuild-index'."))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1377
                return EXIT_OOPS
1053
00fe9773d072 8098 parsing errors should not cause a stacktrace
Brock Pytlik <bpytlik@sun.com>
parents: 1052
diff changeset
  1378
        except api_errors.ApiException, e:
00fe9773d072 8098 parsing errors should not cause a stacktrace
Brock Pytlik <bpytlik@sun.com>
parents: 1052
diff changeset
  1379
                error(e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1380
                return EXIT_OOPS
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1381
        if good_res and bad_res:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1382
                retcode = EXIT_NOP
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1383
        elif bad_res:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1384
                retcode = EXIT_OOPS
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1385
        elif good_res:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1386
                retcode = EXIT_OK
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1387
        return retcode
60
6bd5cd83cfb1 Reverse index database and searching support.
Danek Duvall <danek.duvall@sun.com>
parents: 59
diff changeset
  1388
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1389
def info(img, args):
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1390
        """Display information about a package or packages.
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1391
        """
195
b23d0425f0f7 11 use FMRIs with fully specified authorities internally
johansen <johansen@sun.com>
parents: 192
diff changeset
  1392
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1393
        display_license = False
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1394
        info_local = False
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1395
        info_remote = False
195
b23d0425f0f7 11 use FMRIs with fully specified authorities internally
johansen <johansen@sun.com>
parents: 192
diff changeset
  1396
620
9e0f5eeaf2e0 4198 pkg info -v shouldn't exist
Brock Pytlik <bpytlik@sun.com>
parents: 615
diff changeset
  1397
        opts, pargs = getopt.getopt(args, "lr", ["license"])
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1398
        for opt, arg in opts:
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1399
                if opt == "-l":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1400
                        info_local = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1401
                elif opt == "-r":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1402
                        info_remote = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1403
                elif opt == "--license":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1404
                        display_license = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1405
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1406
        if not info_local and not info_remote:
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1407
                info_local = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1408
        elif info_local and info_remote:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1409
                usage(_("-l and -r may not be combined"), cmd="info")
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1410
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1411
        if info_remote and not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1412
                usage(_("must request remote info for specific packages"),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1413
                    cmd="info")
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1414
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1415
        if not check_fmri_args(pargs):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1416
                return EXIT_OOPS
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1417
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1418
        err = 0
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1419
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1420
        api_inst = __api_alloc(img, quiet=True)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1421
        if api_inst == None:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1422
                return EXIT_OOPS
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1423
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1424
        try:
917
eed22f430a9f 6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents: 885
diff changeset
  1425
                info_needed = api.PackageInfo.ALL_OPTIONS
eed22f430a9f 6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents: 885
diff changeset
  1426
                if not display_license:
eed22f430a9f 6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents: 885
diff changeset
  1427
                        info_needed = api.PackageInfo.ALL_OPTIONS - \
eed22f430a9f 6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents: 885
diff changeset
  1428
                            frozenset([api.PackageInfo.LICENSES])
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1429
                info_needed -= api.PackageInfo.ACTION_OPTIONS
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1430
                info_needed |= frozenset([api.PackageInfo.DEPENDENCIES])
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1431
917
eed22f430a9f 6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents: 885
diff changeset
  1432
                try:
eed22f430a9f 6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents: 885
diff changeset
  1433
                        ret = api_inst.info(pargs, info_local, info_needed)
eed22f430a9f 6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents: 885
diff changeset
  1434
                except api_errors.UnrecognizedOptionsToInfo, e:
eed22f430a9f 6902 api.info needs a "fast" flag or a way to pass a set of the information required
Brock Pytlik <bpytlik@sun.com>
parents: 885
diff changeset
  1435
                        error(e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1436
                        return EXIT_OOPS
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1437
                pis = ret[api.ImageInterface.INFO_FOUND]
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1438
                notfound = ret[api.ImageInterface.INFO_MISSING]
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1439
                illegals = ret[api.ImageInterface.INFO_ILLEGALS]
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1440
                multi_match = ret[api.ImageInterface.INFO_MULTI_MATCH]
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1441
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1442
        except api_errors.PermissionsException, e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1443
                error(e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1444
                return EXIT_OOPS
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1445
        except api_errors.NoPackagesInstalledException:
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1446
                error(_("no packages installed"))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1447
                return EXIT_OOPS
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1448
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1449
        no_licenses = []
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1450
        for i, pi in enumerate(pis):
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1451
                if i > 0:
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  1452
                        msg("")
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1453
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1454
                if display_license:
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1455
                        if not pi.licenses:
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1456
                                no_licenses.append(pi.fmri)
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1457
                        else:
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1458
                                for lic in pi.licenses:
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1459
                                        msg(lic)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1460
                        continue
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1461
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1462
                state = ""
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1463
                if api.PackageInfo.OBSOLETE in pi.states:
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1464
                        state = _("Obsolete")
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1465
                elif api.PackageInfo.RENAMED in pi.states:
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1466
                        state = _("Renamed")
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1467
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1468
                if state:
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1469
                        fmt = "%%s (%s)" % state
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1470
                else:
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1471
                        fmt = "%s"
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1472
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1473
                if api.PackageInfo.INSTALLED in pi.states:
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1474
                        state = fmt % _("Installed")
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1475
                else:
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1476
                        state = fmt % _("Not installed")
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1477
688
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1478
                name_str = _("          Name:")
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1479
                msg(name_str, pi.pkg_stem)
615
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1480
                msg(_("       Summary:"), pi.summary)
1389
1827f487a235 8868 Changes needed to handle package descriptions in the pkg Python API.
Brock Pytlik <bpytlik@sun.com>
parents: 1370
diff changeset
  1481
                if pi.description:
1827f487a235 8868 Changes needed to handle package descriptions in the pkg Python API.
Brock Pytlik <bpytlik@sun.com>
parents: 1370
diff changeset
  1482
                        desc_label = _("   Description:")
1827f487a235 8868 Changes needed to handle package descriptions in the pkg Python API.
Brock Pytlik <bpytlik@sun.com>
parents: 1370
diff changeset
  1483
                        start_loc = len(desc_label) + 1
1827f487a235 8868 Changes needed to handle package descriptions in the pkg Python API.
Brock Pytlik <bpytlik@sun.com>
parents: 1370
diff changeset
  1484
                        end_loc = 80
1827f487a235 8868 Changes needed to handle package descriptions in the pkg Python API.
Brock Pytlik <bpytlik@sun.com>
parents: 1370
diff changeset
  1485
                        res = textwrap.wrap(pi.description,
1827f487a235 8868 Changes needed to handle package descriptions in the pkg Python API.
Brock Pytlik <bpytlik@sun.com>
parents: 1370
diff changeset
  1486
                            width=end_loc - start_loc)
1827f487a235 8868 Changes needed to handle package descriptions in the pkg Python API.
Brock Pytlik <bpytlik@sun.com>
parents: 1370
diff changeset
  1487
                        pad = "\n" + " " * start_loc
1827f487a235 8868 Changes needed to handle package descriptions in the pkg Python API.
Brock Pytlik <bpytlik@sun.com>
parents: 1370
diff changeset
  1488
                        res = pad.join(res)
1827f487a235 8868 Changes needed to handle package descriptions in the pkg Python API.
Brock Pytlik <bpytlik@sun.com>
parents: 1370
diff changeset
  1489
                        msg(desc_label, res)
688
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1490
                if pi.category_info_list:
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1491
                        verbose = len(pi.category_info_list) > 1
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1492
                        msg(_("      Category:"),
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1493
                            pi.category_info_list[0].__str__(verbose))
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1494
                        if len(pi.category_info_list) > 1:
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1495
                                for ci in pi.category_info_list[1:]:
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1496
                                        msg(" " * len(name_str),
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1497
                                            ci.__str__(verbose))
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1498
615
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1499
                msg(_("         State:"), state)
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1500
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1501
                if api.PackageInfo.RENAMED in pi.states:
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1502
                        msg(_("    Renamed to:"), pi.dependencies[0])
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1503
                        for dep in pi.dependencies[1:]:
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1504
                                msg(" " * len(name_str), dep)
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1505
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1506
                # XXX even more info on the publisher would be nice?
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1507
                msg(_("     Publisher:"), pi.publisher)
615
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1508
                msg(_("       Version:"), pi.version)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1509
                msg(_(" Build Release:"), pi.build_release)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1510
                msg(_("        Branch:"), pi.branch)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1511
                msg(_("Packaging Date:"), pi.packaging_date)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1512
                msg(_("          Size:"), misc.bytes_to_str(pi.size))
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1513
                msg(_("          FMRI:"), pi.fmri)
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1514
                # XXX add license/copyright info here?
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1515
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1516
        if notfound:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1517
                err = EXIT_OOPS
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1518
                if pis:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1519
                        logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1520
                if info_local:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1521
                        logger.error(_("""\
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1522
pkg: info: no packages matching the following patterns you specified are
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1523
installed on the system.  Try specifying -r to query remotely:"""))
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1524
                elif info_remote:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1525
                        logger.error(_("""\
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1526
pkg: info: no packages matching the following patterns you specified were
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1527
found in the catalog.  Try relaxing the patterns, refreshing, and/or
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1528
examining the catalogs:"""))
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1529
                logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1530
                for p in notfound:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1531
                        logger.error("        %s" % p)
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1532
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1533
        if illegals:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1534
                err = EXIT_OOPS
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1535
                for i in illegals:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1536
                        logger.error(str(i))
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1537
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1538
        if multi_match:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1539
                err = EXIT_OOPS
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1540
                for pfmri, matches in multi_match:
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1541
                        error(_("'%s' matches multiple packages") % pfmri)
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1542
                        for k in matches:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1543
                                logger.error("\t%s" % k)
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1544
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1545
        if no_licenses:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1546
                err = EXIT_OOPS
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1547
                error(_("no license information could be found for the "
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1548
                    "following packages:"))
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1549
                for pfmri in no_licenses:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1550
                        logger.error("\t%s" % pfmri)
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1551
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1552
        return err
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1553
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1554
def calc_widths(lines, attrs, widths=None):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1555
        """Given a set of lines and a set of attributes, calculate the minimum
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1556
        width each column needs to hold its contents."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1557
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1558
        if not widths:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1559
                widths = [ len(attr) - attr.find(".") - 1 for attr in attrs ]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1560
        for l in lines:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1561
                for i, a in enumerate(l):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1562
                        if len(str(a)) > widths[i]:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1563
                                widths[i] = len(str(a))
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1564
        return widths
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1565
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1566
def calc_justs(attrs):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1567
        """Given a set of output attributes, find any attributes with known
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1568
        justification directions and assign them."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1569
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1570
        def __chose_just(attr):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1571
                if attr in ["action.name", "action.key", "action.raw",
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1572
                    "pkg.name", "pkg.fmri", "pkg.shortfmri", "pkg.publisher"]:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1573
                        return JUST_LEFT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1574
                return JUST_UNKNOWN
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1575
        return [ __chose_just(attr) for attr in attrs ]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1576
        
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1577
def produce_lines(actionlist, attrs, action_types=None, show_all=False):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1578
        """Produces a list of n tuples (where n is the length of attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1579
        containing the relevant information about the actions.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1580
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1581
        The "actionlist" parameter is a list of tuples which contain the fmri
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1582
        of the package that's the source of the action, the action, and the
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1583
        publisher the action's package came from. If the actionlist was
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1584
        generated by searching, the last two pieces, "match" and "match_type"
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1585
        contain information about why this action was selected.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1586
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1587
        The "attrs" parameter is a list of the attributes of the action that
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1588
        should be displayed.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1589
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1590
        The "action_types" parameter may contain a list of the types of actions
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1591
        that should be displayed.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1592
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1593
        The "show_all" parameter determines whether an action that lacks one
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1594
        or more of the desired attributes will be displayed or not.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1595
        """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1596
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  1597
        lines = []
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1598
        for pfmri, action, pub, match, match_type in actionlist:
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1599
                if action_types and action.name not in action_types:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1600
                        continue
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1601
                line = []
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1602
                for attr in attrs:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1603
                        if action and attr in action.attrs:
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1604
                                a = action.attrs[attr]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1605
                        elif attr == "action.name":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1606
                                a = action.name
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1607
                        elif attr == "action.key":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1608
                                a = action.attrs[action.key_attr]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1609
                        elif attr == "action.raw":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1610
                                a = action
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1611
                        elif attr == "pkg.name":
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1612
                                a = pfmri.get_name()
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1613
                        elif attr == "pkg.fmri":
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1614
                                a = pfmri
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1615
                        elif attr == "pkg.shortfmri":
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1616
                                a = pfmri.get_short_fmri()
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1617
                        elif attr == "pkg.publisher":
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1618
                                a = pfmri.get_publisher()
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1619
                                if a is None:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1620
                                        a = pub
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1621
                                        if a is None:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1622
                                                a = ""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1623
                        elif attr == "search.match":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1624
                                a = match
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1625
                        elif attr == "search.match_type":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1626
                                a = match_type
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1627
                        else:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1628
                                a = ""
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1629
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1630
                        line.append(a)
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1631
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1632
                if line and [l for l in line if str(l) != ""] or show_all:
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1633
                        lines.append(line)
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1634
        return lines
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1635
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1636
def default_left(v):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1637
        """For a given justification "v", use the default of left justification
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1638
        if "v" is JUST_UNKNOWN."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1639
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1640
        if v == JUST_UNKNOWN:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1641
                return JUST_LEFT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1642
        return v
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1643
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1644
def print_headers(attrs, widths, justs):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1645
        """Print out the headers for the columns in the output.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1646
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1647
        The "attrs" parameter provides the headings that should be used.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1648
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1649
        The "widths" parameter provides the current estimates of the width
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1650
        for each column. These may be changed due to the length of the headers.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1651
        This function does modify the values contained in "widths" outside this
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1652
        function.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1653
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1654
        The "justs" parameter contains the justifications to use with each
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1655
        header."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1656
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1657
        headers = []
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1658
        for i, attr in enumerate(attrs):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1659
                headers.append(str(attr.upper()))
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1660
                widths[i] = max(widths[i], len(attr))
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1661
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1662
        # Now that we know all the widths, multiply them by the
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1663
        # justification values to get positive or negative numbers to
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1664
        # pass to the %-expander.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1665
        widths = [ e[0] * default_left(e[1]) for e in zip(widths, justs) ]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1666
        fmt = ("%%%ss " * len(widths)) % tuple(widths)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1667
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1668
        msg((fmt % tuple(headers)).rstrip())
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1669
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1670
def guess_unknown(j, v):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1671
        """If the justificaton to use for a value is unknown, assume that if
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1672
        it is an integer, the output should be right justified, otherwise it
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1673
        should be left justified."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1674
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1675
        if j != JUST_UNKNOWN:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1676
                return j
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1677
        try:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1678
                int(v)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1679
                return JUST_RIGHT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1680
        except (ValueError, TypeError):
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1681
                # attribute is non-numeric or is something like
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1682
                # a list.
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1683
                return JUST_LEFT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1684
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1685
def create_output_format(display_headers, widths, justs, line):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1686
        """Produce a format string that can be used to display results.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1687
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1688
        The "display_headers" parameter is whether headers have been displayed
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1689
        or not. If they have not, then use a simple tab system. If they
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1690
        have, use the information in the other parameters to control the
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1691
        formatting of the line.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1692
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1693
        The "widths" parameter contains the width to use for each column.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1694
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1695
        The "justs" parameter contains the justifications to use for each
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1696
        column.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1697
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1698
        The "line" parameter contains the information that will be displayed
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1699
        using the resulting format. It's needed so that a choice can be made
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1700
        about columns with unknown justifications.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1701
        """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1702
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1703
        if display_headers:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1704
                # Now that we know all the widths, multiply them by the
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1705
                # justification values to get positive or negative numbers to
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1706
                # pass to the %-expander.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1707
                line_widths = [
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1708
                    w * guess_unknown(j, a)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1709
                    for w, j, a in zip(widths, justs, line)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1710
                ]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1711
                fmt = ("%%%ss " * len(line_widths)) % tuple(line_widths)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1712
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1713
                return fmt
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1714
        fmt = "%s\t" * len(widths)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1715
        fmt.rstrip("\t")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1716
        return fmt
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1717
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1718
def display_contents_results(actionlist, attrs, sort_attrs, action_types,
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1719
    display_headers):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1720
        """Print results of a "list" operation """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1721
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1722
        justs = calc_justs(attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1723
        lines = produce_lines(actionlist, attrs, action_types)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1724
        widths = calc_widths(lines, attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1725
        
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1726
        sortidx = 0
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1727
        for i, attr in enumerate(attrs):
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1728
                if attr == sort_attrs[0]:
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1729
                        sortidx = i
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1730
                        break
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1731
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1732
        # Sort numeric columns numerically.
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1733
        if justs[sortidx] == JUST_RIGHT:
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1734
                def key_extract(x):
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1735
                        try:
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1736
                                return int(x[sortidx])
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1737
                        except (ValueError, TypeError):
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1738
                                return 0
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1739
        else:
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1740
                key_extract = lambda x: x[sortidx]
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1741
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  1742
        if display_headers:
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1743
                print_headers(attrs, widths, justs)
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  1744
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  1745
        for line in sorted(lines, key=key_extract):
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1746
                msg((create_output_format(display_headers, widths, justs,
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1747
                    line) % tuple(line)).rstrip())
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1748
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1749
def check_attrs(attrs, cmd, reference=None, prefixes=None):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1750
        """For a set of output attributes ("attrs") passed to a command ("cmd"),
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1751
        if the attribute lives in a known name space, check whether it is valid.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1752
        """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1753
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1754
        if reference is None:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1755
                reference = valid_special_attrs
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1756
        if prefixes is None:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1757
                prefixes = valid_special_prefixes
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1758
        for a in attrs:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1759
                for p in prefixes:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1760
                        if a.startswith(p) and not a in reference:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1761
                                usage(_("Invalid attribute '%s'") % a, cmd)
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1762
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1763
def list_contents(img, args):
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1764
        """List package contents.
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1765
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1766
        If no arguments are given, display for all locally installed packages.
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1767
        With -H omit headers and use a tab-delimited format; with -o select
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1768
        attributes to display; with -s, specify attributes to sort on; with -t,
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1769
        specify which action types to list."""
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1770
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1771
        # XXX Need remote-info option, to request equivalent information
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1772
        # from repository.
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1773
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1774
        opts, pargs = getopt.getopt(args, "Ho:s:t:mfr")
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1775
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1776
        display_headers = True
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1777
        display_raw = False
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1778
        remote = False
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1779
        local = False
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1780
        attrs = []
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1781
        sort_attrs = []
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1782
        action_types = []
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1783
        for opt, arg in opts:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1784
                if opt == "-H":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1785
                        display_headers = False
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1786
                elif opt == "-o":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1787
                        attrs.extend(arg.split(","))
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1788
                elif opt == "-s":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1789
                        sort_attrs.append(arg)
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1790
                elif opt == "-t":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1791
                        action_types.extend(arg.split(","))
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1792
                elif opt == "-r":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1793
                        remote = True
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1794
                elif opt == "-m":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1795
                        display_raw = True
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1796
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1797
        if not remote and not local:
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1798
                local = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1799
        elif local and remote:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1800
                usage(_("-l and -r may not be combined"), cmd="contents")
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1801
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  1802
        if remote and not pargs:
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  1803
                usage(_("contents: must request remote contents for specific "
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1804
                   "packages"), cmd="contents")
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  1805
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1806
        if not check_fmri_args(pargs):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1807
                return EXIT_OOPS
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1808
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1809
        if display_raw:
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 306
diff changeset
  1810
                display_headers = False
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 306
diff changeset
  1811
                attrs = [ "action.raw" ]
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1812
391
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
  1813
                invalid = set(("-H", "-o", "-t")). \
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
  1814
                    intersection(set([x[0] for x in opts]))
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1815
391
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
  1816
                if len(invalid) > 0:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1817
                        usage(_("-m and %s may not be specified at the same "
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1818
                            "time") % invalid.pop(), cmd="contents")
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1819
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1820
        check_attrs(attrs, "contents")
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1821
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1822
        img.history.operation_name = "contents"
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1823
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1824
        err = EXIT_OK
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1825
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1826
        if local:
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1827
                fmris, notfound, illegals = \
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1828
                    img.installed_fmris_from_args(pargs)
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1829
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1830
                if illegals:
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1831
                        for i in illegals:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1832
                                logger.error(i)
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1833
                        img.history.operation_result = \
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1834
                            history.RESULT_FAILED_BAD_REQUEST
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1835
                        return EXIT_OOPS
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1836
427
0472f8f466a5 2254 "pkg info" in an empty image should return 1, provide message to stderr.
Danek Duvall <danek.duvall@sun.com>
parents: 423
diff changeset
  1837
                if not fmris and not notfound:
0472f8f466a5 2254 "pkg info" in an empty image should return 1, provide message to stderr.
Danek Duvall <danek.duvall@sun.com>
parents: 423
diff changeset
  1838
                        error(_("no packages installed"))
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1839
                        img.history.operation_result = \
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1840
                            history.RESULT_NOTHING_TO_DO
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1841
                        return EXIT_OOPS
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1842
        elif remote:
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  1843
                # Verify validity of certificates before attempting network
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  1844
                # operations
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1845
                try:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1846
                        img.check_cert_validity()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1847
                except (api_errors.CertificateError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1848
                    api_errors.PermissionsException), e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1849
                        img.history.log_operation_end(error=e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1850
                        return EXIT_OOPS
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  1851
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1852
                fmris = []
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1853
                notfound = []
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1854
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1855
                # XXX This loop really needs not to be copied from
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1856
                # Image.make_install_plan()!
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1857
                ppub = img.get_preferred_publisher()
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1858
                for p in pargs:
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1859
                        try:
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1860
                                matches = list(img.inventory([ p ],
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1861
                                    all_known = True))
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1862
                        except api_errors.InventoryException, e:
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1863
                                assert(len(e.notfound) == 1)
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1864
                                notfound.append(e.notfound[0])
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1865
                                continue
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1866
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1867
                        pnames = {}
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1868
                        pmatch = []
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1869
                        npnames = {}
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1870
                        npmatch = []
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1871
                        for m, state in matches:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1872
                                if m.get_publisher() == ppub:
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1873
                                        pnames[m.get_pkg_stem()] = 1
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1874
                                        pmatch.append(m)
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1875
                                else:
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1876
                                        npnames[m.get_pkg_stem()] = 1
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1877
                                        npmatch.append(m)
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1878
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1879
                        if len(pnames.keys()) > 1:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1880
                                msg(_("pkg: contents: '%s' matches multiple "
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1881
                                    "packages") % p)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1882
                                for k in pnames.keys():
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  1883
                                        msg("\t%s" % k)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1884
                                continue
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1885
                        elif len(pnames.keys()) < 1 and len(npnames.keys()) > 1:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1886
                                msg(_("pkg: contents: '%s' matches multiple "
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1887
                                    "packages") % p)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1888
                                for k in npnames.keys():
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  1889
                                        msg("\t%s" % k)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1890
                                continue
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1891
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1892
                        # matches is a list reverse sorted by version, so take
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1893
                        # the first; i.e., the latest.
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1894
                        if len(pmatch) > 0:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1895
                                fmris.append((pmatch[0], None))
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1896
                        else:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1897
                                fmris.append((npmatch[0], None))
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1898
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1899
        #
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1900
        # If the user specifies no specific attrs, and no specific
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1901
        # sort order, then we fill in some defaults.
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1902
        #
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1903
        if not attrs:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1904
                # XXX Possibly have multiple exclusive attributes per column?
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1905
                # If listing dependencies and files, you could have a path/fmri
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1906
                # column which would list paths for files and fmris for
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1907
                # dependencies.
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1908
                attrs = [ "path" ]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1909
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1910
        if not sort_attrs:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1911
                # XXX reverse sorting
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1912
                # Most likely want to sort by path, so don't force people to
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1913
                # make it explicit
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1914
                if "path" in attrs:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1915
                        sort_attrs = [ "path" ]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1916
                else:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1917
                        sort_attrs = attrs[:1]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1918
969
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1919
        # if we want a raw display (contents -m), disable the automatic
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1920
        # variant filtering that normally limits working set.
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1921
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1922
        if display_raw:
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1923
                excludes = EmptyI
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1924
        else:
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1925
                excludes = img.list_excludes()
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1926
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1927
        manifests = (
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1928
            img.get_manifest(f, all_variants=display_raw)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1929
            for f, state in fmris
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1930
        )
969
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1931
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1932
        actionlist = [
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1933
            (m.fmri, a, None, None, None)
969
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1934
            for m in manifests
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1935
            for a in m.gen_actions(excludes)
969
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1936
        ]
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1937
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1938
        if fmris:
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1939
                display_contents_results(actionlist, attrs, sort_attrs,
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1940
                    action_types, display_headers)
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1941
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1942
        if notfound:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1943
                err = EXIT_OOPS
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1944
                if fmris:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1945
                        logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1946
                if local:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1947
                        logger.error(_("""\
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1948
pkg: contents: no packages matching the following patterns you specified are
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1949
installed on the system.  Try specifying -r to query remotely:"""))
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  1950
                elif remote:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1951
                        logger.error(_("""\
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1952
pkg: contents: no packages matching the following patterns you specified were
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1953
found in the catalog.  Try relaxing the patterns, refreshing, and/or
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1954
examining the catalogs:"""))
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1955
                logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1956
                for p in notfound:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1957
                        logger.error("        %s" % p)
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1958
                img.history.operation_result = history.RESULT_NOTHING_TO_DO
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1959
        else:
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1960
                img.history.operation_result = history.RESULT_SUCCEEDED
1503
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1472
diff changeset
  1961
        img.cleanup_downloads()
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1962
        return err
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1963
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1964
def display_catalog_failures(cre, ignore_perms_failure=False):
537
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
  1965
        total = cre.total
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
  1966
        succeeded = cre.succeeded
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  1967
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  1968
        txt = _("pkg: %s/%s catalogs successfully updated:") % (succeeded,
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  1969
            total)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  1970
        if cre.failed:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  1971
                # This ensures that the text gets printed before the errors.
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1972
                logger.error(txt)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  1973
        else:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  1974
                msg(txt)
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  1975
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1976
        for pub, err in cre.failed:
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1977
                if ignore_perms_failure and \
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1978
                    not isinstance(err, api_errors.PermissionsException):
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1979
                        # If any errors other than a permissions exception are
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1980
                        # found, then don't ignore them.
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1981
                        ignore_perms_failure = False
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1982
                        break
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1983
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1984
        if cre.failed and ignore_perms_failure:
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1985
                # Consider those that failed to have succeeded and add them
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1986
                # to the actual successful total.
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1987
                return succeeded + len(cre.failed)
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1988
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1989
        for pub, err in cre.failed:
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  1990
                if isinstance(err, urllib2.HTTPError):
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1991
                        logger.error("   %s: %s - %s" % \
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  1992
                            (err.filename, err.code, err.msg))
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  1993
                elif isinstance(err, urllib2.URLError):
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  1994
                        if err.args[0][0] == 8:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1995
                                logger.error("    %s: %s" % \
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  1996
                                    (urlparse.urlsplit(
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1997
                                        pub["origin"])[1].split(":")[0],
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  1998
                                    err.args[0][1]))
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  1999
                        else:
306
88f8e588cf60 748 Timeout for download operation
Danek Duvall <danek.duvall@sun.com>
parents: 302
diff changeset
  2000
                                if isinstance(err.args[0], socket.timeout):
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2001
                                        logger.error("    %s: %s" % \
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2002
                                            (pub["origin"], "timeout"))
306
88f8e588cf60 748 Timeout for download operation
Danek Duvall <danek.duvall@sun.com>
parents: 302
diff changeset
  2003
                                else:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2004
                                        logger.error("    %s: %s" % \
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2005
                                            (pub["origin"], err.args[0][1]))
285
538afd6a9d3e 763 pkg image-create /foo , pkg image-create /tmp/foo both yield (different) tracebacks
Danek Duvall <danek.duvall@sun.com>
parents: 271
diff changeset
  2006
                else:
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2007
                        logger.error("   ")
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2008
                        logger.error(str(err))
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2009
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  2010
        if cre.message:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2011
                logger.error(cre.message)
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  2012
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2013
        return succeeded
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2014
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2015
def publisher_refresh(img, args):
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  2016
        """Update metadata for the image's publishers."""
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2017
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2018
        # XXX will need to show available content series for each package
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2019
        full_refresh = False
523
69a22d5d368c 3387 pkg refresh --full gives a syntax error
Brock Pytlik <bpytlik@sun.com>
parents: 518
diff changeset
  2020
        opts, pargs = getopt.getopt(args, "", ["full"])
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2021
        for opt, arg in opts:
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2022
                if opt == "--full":
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2023
                        full_refresh = True
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2024
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2025
        api_inst = __api_alloc(img)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2026
        if api_inst == None:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2027
                return EXIT_OOPS
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2028
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2029
        try:
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  2030
                # The user explicitly requested this refresh, so set the
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  2031
                # refresh to occur immediately.
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2032
                api_inst.refresh(full_refresh=full_refresh,
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2033
                    immediate=True, pubs=pargs)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2034
        except api_errors.PublisherError, e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2035
                error(e)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2036
                error(_("'pkg publisher' will show a list of publishers."))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2037
                return EXIT_OOPS
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  2038
        except api_errors.PermissionsException, e:
790
e2cf47b23e7a 5481 pkg refresh traceback without permissions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 789
diff changeset
  2039
                # Prepend a newline because otherwise the exception will
e2cf47b23e7a 5481 pkg refresh traceback without permissions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 789
diff changeset
  2040
                # be printed on the same line as the spinner.
e2cf47b23e7a 5481 pkg refresh traceback without permissions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 789
diff changeset
  2041
                error("\n" + str(e))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2042
                return EXIT_OOPS
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  2043
        except api_errors.CatalogRefreshException, e:
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  2044
                if display_catalog_failures(e) == 0:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2045
                        return EXIT_OOPS
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2046
                else:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2047
                        return EXIT_PARTIAL
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2048
        else:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2049
                return EXIT_OK
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2050
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2051
def publisher_set(img, args):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2052
        """pkg set-publisher [-Ped] [-k ssl_key] [-c ssl_cert] [--reset-uuid]
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2053
            [-g|--add-origin origin to add] [-G|--remove-origin origin to
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2054
            remove] [-m|--add-mirror mirror to add] [-M|--remove-mirror mirror
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2055
            to remove] [--enable] [--disable] [--no-refresh] [--sticky] [--non-sticky ]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2056
            [--search-before=publisher] [--search-after=publisher] publisher"""
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2057
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2058
        preferred = False
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2059
        ssl_key = None
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2060
        ssl_cert = None
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2061
        origin_url = None
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2062
        reset_uuid = False
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2063
        add_mirrors = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2064
        remove_mirrors = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2065
        add_origins = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2066
        remove_origins = set()
537
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
  2067
        refresh_catalogs = True
786
a400f8c4d1c0 2340 support authority enable and disable
Tom Mueller <Tom.Mueller@sun.com>
parents: 770
diff changeset
  2068
        disable = None
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2069
        sticky = None
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2070
        search_before = None
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2071
        search_after = None
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2072
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2073
        opts, pargs = getopt.getopt(args, "Pedk:c:O:G:g:M:m:",
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2074
            ["add-mirror=", "remove-mirror=", "add-origin=", "remove-origin=",
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2075
            "no-refresh", "reset-uuid", "enable", "disable", "sticky", 
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2076
            "non-sticky", "search-before=", "search-after="])
461
37cf3ac75e37 1018 actions with payloads should include all sizes and hashes
johansen <johansen@sun.com>
parents: 443
diff changeset
  2077
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2078
        for opt, arg in opts:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2079
                if opt == "-c":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2080
                        ssl_cert = arg
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2081
                if opt == "-d" or opt == "--disable":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2082
                        disable = True
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2083
                if opt == "-e" or opt == "--enable":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2084
                        disable = False
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2085
                if opt == "-g" or opt == "--add-origin":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2086
                        add_origins.add(arg)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2087
                if opt == "-G" or opt == "--remove-origin":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2088
                        remove_origins.add(arg)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2089
                if opt == "-k":
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2090
                        ssl_key = arg
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2091
                if opt == "-O":
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2092
                        origin_url = arg
461
37cf3ac75e37 1018 actions with payloads should include all sizes and hashes
johansen <johansen@sun.com>
parents: 443
diff changeset
  2093
                if opt == "-m" or opt == "--add-mirror":
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2094
                        add_mirrors.add(arg)
461
37cf3ac75e37 1018 actions with payloads should include all sizes and hashes
johansen <johansen@sun.com>
parents: 443
diff changeset
  2095
                if opt == "-M" or opt == "--remove-mirror":
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2096
                        remove_mirrors.add(arg)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2097
                if opt == "-P":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2098
                        preferred = True
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2099
                if opt == "--reset-uuid":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2100
                        reset_uuid = True
537
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
  2101
                if opt == "--no-refresh":
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
  2102
                        refresh_catalogs = False
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2103
                if opt == "--sticky":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2104
                        sticky = True
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2105
                if opt == "--non-sticky":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2106
                        sticky = False
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2107
                if opt == "--search-before":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2108
                        search_before = arg
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2109
                if opt == "--search-after":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2110
                        search_after = arg
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2111
                        
727
53a22eec05e5 5098 pkg set-authority misleading error message when no authority name given
Danek Duvall <danek.duvall@sun.com>
parents: 717
diff changeset
  2112
        if len(pargs) == 0:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2113
                usage(_("requires a publisher name"), cmd="set-publisher")
727
53a22eec05e5 5098 pkg set-authority misleading error message when no authority name given
Danek Duvall <danek.duvall@sun.com>
parents: 717
diff changeset
  2114
        elif len(pargs) > 1:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2115
                usage( _("only one publisher name may be specified"),
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2116
                    cmd="set-publisher",)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2117
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2118
        name = pargs[0]
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2119
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2120
        if preferred and disable:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2121
                usage(_("the -p and -d options may not be combined"),
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2122
                    cmd="set-publisher")
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2123
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2124
        if origin_url and (add_origins or remove_origins):
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2125
                usage(_("the -O and -g, --add-origin, -G, or --remove-origin "
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2126
                    "options may not be combined"), cmd="set-publisher")
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2127
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2128
        if search_before and search_after:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2129
                usage(_("search_before and search_after may not be combined"),
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2130
                      cmd="set-publisher")
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2131
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2132
        api_inst = __api_alloc(img)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2133
        if api_inst == None:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2134
                return EXIT_OOPS
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2135
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2136
        new_pub = False
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2137
        try:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2138
                pub = api_inst.get_publisher(prefix=name, alias=name,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2139
                    duplicate=True)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2140
                if reset_uuid:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2141
                        pub.reset_client_uuid()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2142
                repo = pub.selected_repository
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2143
        except api_errors.PermissionsException, e:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2144
                error(e, cmd="set-publisher")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2145
                return EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2146
        except api_errors.UnknownPublisher:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2147
                if not origin_url and not add_origins:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2148
                        error(_("publisher does not exist. Use -g to define "
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2149
                            "origin URI for new publisher."),
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2150
                            cmd="set-publisher")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2151
                        return EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2152
                # No pre-existing, so create a new one.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2153
                repo = publisher.Repository()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2154
                pub = publisher.Publisher(name, repositories=[repo])
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2155
                new_pub = True
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2156
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2157
        if disable is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2158
                # Set disabled property only if provided.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2159
                pub.disabled = disable
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2160
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2161
        if sticky is not None:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2162
                # Set stickiness only if provided
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2163
                pub.sticky = sticky
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2164
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2165
        if origin_url:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2166
                # For compatibility with old -O behaviour, treat -O as a wipe
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2167
                # of existing origins and add the new one.
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2168
                try:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2169
                        # Only use existing cert information if the new URI uses
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2170
                        # https for transport.
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2171
                        if repo.origins and not (ssl_cert or ssl_key) and \
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2172
                            origin_url.startswith("https:"):
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2173
                                for uri in repo.origins:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2174
                                        if ssl_cert is None:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2175
                                                ssl_cert = uri.ssl_cert
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2176
                                        if ssl_key is None:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2177
                                                ssl_key = uri.ssl_key
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2178
                                        break
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2179
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  2180
                        repo.reset_origins()
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2181
                        repo.add_origin(origin_url)
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2182
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2183
                        # XXX once image configuration supports storing this
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2184
                        # information at the uri level, ssl info should be set
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2185
                        # here.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2186
                except api_errors.PublisherError, e:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2187
                        error(e, cmd="set-publisher")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2188
                        return EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2189
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2190
        for entry in (("mirror", add_mirrors, remove_mirrors), ("origin",
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2191
            add_origins, remove_origins)):
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2192
                etype, add, remove = entry
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2193
                # XXX once image configuration supports storing this
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2194
                # information at the uri level, ssl info should be set
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2195
                # here.
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2196
                try:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2197
                        for u in add:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2198
                                getattr(repo, "add_%s" % etype)(u)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2199
                        for u in remove:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2200
                                getattr(repo, "remove_%s" % etype)(u)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2201
                except (api_errors.PublisherError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2202
                    api_errors.CertificateError), e:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2203
                        error(e, cmd="set-publisher")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2204
                        return EXIT_OOPS
786
a400f8c4d1c0 2340 support authority enable and disable
Tom Mueller <Tom.Mueller@sun.com>
parents: 770
diff changeset
  2205
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2206
        # None is checked for here so that a client can unset a ssl_cert or
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2207
        # ssl_key by using -k "" or -c "".
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2208
        if ssl_cert is not None or ssl_key is not None:
1111
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2209
                #
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2210
                # In the case of zones, the ssl cert given is assumed to
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2211
                # be relative to the root of the image, not truly absolute.
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2212
                #
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2213
                if img.is_zone():
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2214
                        if ssl_cert is not None:
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2215
                                ssl_cert = os.path.abspath(
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2216
                                    img.get_root() + os.sep + ssl_cert)
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2217
                        if ssl_key is not None:
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2218
                                ssl_key = os.path.abspath(
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2219
                                    img.get_root() + os.sep + ssl_key)
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2220
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2221
                # Assume the user wanted to update the ssl_cert or ssl_key
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2222
                # information for *all* of the currently selected
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2223
                # repository's origins and mirrors.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2224
                try:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2225
                        for uri in repo.origins:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2226
                                if ssl_cert is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2227
                                        uri.ssl_cert = ssl_cert
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2228
                                if ssl_key is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2229
                                        uri.ssl_key = ssl_key
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2230
                        for uri in repo.mirrors:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2231
                                if ssl_cert is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2232
                                        uri.ssl_cert = ssl_cert
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2233
                                if ssl_key is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2234
                                        uri.ssl_key = ssl_key
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2235
                except (api_errors.PublisherError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2236
                    api_errors.CertificateError), e:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2237
                        error(e, cmd="set-publisher")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2238
                        return EXIT_OOPS
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2239
393
8e888cb6ef1f 1122 normal user gets a traceback when trying to change the preferred authority
Brad Hall <bhall@bgh.hallgroup.org>
parents: 391
diff changeset
  2240
        try:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2241
                if new_pub:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2242
                        api_inst.add_publisher(pub,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2243
                            refresh_allowed=refresh_catalogs)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2244
                else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2245
                        api_inst.update_publisher(pub,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2246
                            refresh_allowed=refresh_catalogs)
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  2247
        except api_errors.CatalogRefreshException, e:
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  2248
                text = "Could not refresh the catalog for %s"
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2249
                error(_(text) % pub)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2250
                return EXIT_OOPS
835
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  2251
        except api_errors.InvalidDepotResponseException, e:
1063
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  2252
                error(_("The origin URIs for '%(pubname)s' do not appear to "
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  2253
                    "point to a valid pkg server.\nPlease check the server's "
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  2254
                    "address and client's network configuration."
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  2255
                    "\nAdditional details:\n\n%(details)s") %
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  2256
                    { "pubname": pub.prefix, "details": e })
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2257
                return EXIT_OOPS
709
cfb249e57576 2393 traceback when attempting to change client settings without permission
Brock Pytlik <bpytlik@sun.com>
parents: 706
diff changeset
  2258
        except api_errors.PermissionsException, e:
cfb249e57576 2393 traceback when attempting to change client settings without permission
Brock Pytlik <bpytlik@sun.com>
parents: 706
diff changeset
  2259
                # Prepend a newline because otherwise the exception will
cfb249e57576 2393 traceback when attempting to change client settings without permission
Brock Pytlik <bpytlik@sun.com>
parents: 706
diff changeset
  2260
                # be printed on the same line as the spinner.
790
e2cf47b23e7a 5481 pkg refresh traceback without permissions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 789
diff changeset
  2261
                error("\n" + str(e))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2262
                return EXIT_OOPS
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2263
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2264
        if preferred:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2265
                api_inst.set_preferred_publisher(prefix=pub.prefix)
461
37cf3ac75e37 1018 actions with payloads should include all sizes and hashes
johansen <johansen@sun.com>
parents: 443
diff changeset
  2266
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2267
        if search_before:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2268
                api_inst.set_pub_search_before(pub.prefix, search_before)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2269
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2270
        if search_after:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2271
                api_inst.set_pub_search_after(pub.prefix, search_after)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2272
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2273
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2274
        return EXIT_OK
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2275
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2276
def publisher_unset(img, args):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2277
        """pkg unset-publisher publisher ..."""
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2278
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2279
        if len(args) == 0:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2280
                usage(_("at least one publisher must be specified"),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2281
                    cmd="unset-publisher")
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2282
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2283
        api_inst = __api_alloc(img)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2284
        if api_inst == None:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2285
                return EXIT_OOPS
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2286
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2287
        errors = []
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2288
        for name in args:
709
cfb249e57576 2393 traceback when attempting to change client settings without permission
Brock Pytlik <bpytlik@sun.com>
parents: 706
diff changeset
  2289
                try:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2290
                        api_inst.remove_publisher(prefix=name, alias=name)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2291
                except (api_errors.PermissionsException,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2292
                    api_errors.PublisherError), e:
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2293
                        errors.append((name, e))
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2294
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2295
        retcode = EXIT_OK
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2296
        if errors:
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2297
                if len(errors) == len(args):
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2298
                        # If the operation failed for every provided publisher
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2299
                        # prefix or alias, complete failure occurred.
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2300
                        retcode = EXIT_OOPS
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2301
                else:
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2302
                        # If the operation failed for only some of the provided
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2303
                        # publisher prefixes or aliases, then partial failure
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2304
                        # occurred.
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2305
                        retcode = EXIT_PARTIAL
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2306
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  2307
                txt = ""
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2308
                for name, err in errors:
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  2309
                        txt += "\n"
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  2310
                        txt += _("Removal failed for '%(pub)s': %(msg)s") % {
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2311
                            "pub": name, "msg": err }
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  2312
                        txt += "\n"
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  2313
                error(txt, cmd="unset-publisher")
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2314
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2315
        return retcode
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2316
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2317
def publisher_list(img, args):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2318
        """pkg publishers"""
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2319
        omit_headers = False
410
403886a7592b 1259 Need CLI option to retrieve preferred authority
Shawn Walker <swalker@opensolaris.org>
parents: 409
diff changeset
  2320
        preferred_only = False
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2321
        inc_disabled = True
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2322
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2323
        # 'a' is left over
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2324
        opts, pargs = getopt.getopt(args, "HPan")
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2325
        for opt, arg in opts:
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2326
                if opt == "-H":
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2327
                        omit_headers = True
410
403886a7592b 1259 Need CLI option to retrieve preferred authority
Shawn Walker <swalker@opensolaris.org>
parents: 409
diff changeset
  2328
                if opt == "-P":
403886a7592b 1259 Need CLI option to retrieve preferred authority
Shawn Walker <swalker@opensolaris.org>
parents: 409
diff changeset
  2329
                        preferred_only = True
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2330
                if opt == "-n":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2331
                        inc_disabled = False
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2332
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2333
        api_inst = __api_alloc(img, quiet=True)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2334
        if api_inst == None:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2335
                return EXIT_OOPS
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2336
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2337
        cert_cache = {}
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2338
        def get_cert_info(ssl_cert):
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2339
                if not ssl_cert:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2340
                        return None
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2341
                if ssl_cert not in cert_cache:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2342
                        c = cert_cache[ssl_cert] = {}
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2343
                        errors = c["errors"] = []
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2344
                        times = c["info"] = {
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2345
                            "effective": "",
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2346
                            "expiration": "",
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2347
                        }
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2348
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2349
                        try:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2350
                                cert = misc.validate_ssl_cert(ssl_cert)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2351
                        except (EnvironmentError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2352
                            api_errors.CertificateError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2353
                            api_errors.PermissionsException), e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2354
                                # If the cert information can't be retrieved,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2355
                                # add the errors to a list and continue on.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2356
                                errors.append(e)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2357
                                c["valid"] = False
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2358
                        else:
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2359
                                nb = cert.get_notBefore()
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2360
                                t = time.strptime(nb, "%Y%m%d%H%M%SZ")
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2361
                                nb = datetime.datetime.utcfromtimestamp(
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2362
                                    calendar.timegm(t))
1150
2b8aaf0b0b4e 4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents: 1141
diff changeset
  2363
                                times["effective"] = nb.strftime("%c")
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2364
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2365
                                na = cert.get_notAfter()
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2366
                                t = time.strptime(na, "%Y%m%d%H%M%SZ")
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2367
                                na = datetime.datetime.utcfromtimestamp(
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2368
                                    calendar.timegm(t))
1150
2b8aaf0b0b4e 4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents: 1141
diff changeset
  2369
                                times["expiration"] = na.strftime("%c")
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2370
                                c["valid"] = True
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2371
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2372
                return cert_cache[ssl_cert]
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2373
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2374
        retcode = EXIT_OK
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2375
        if len(pargs) == 0:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2376
                fmt = "%-24s %-12s %-8s %-8s %s"
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2377
                if not omit_headers:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2378
                        msg(fmt % (_("PUBLISHER"), "", _("TYPE"), _("STATUS"),
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2379
                            _("URI")))
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2380
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2381
                pref_pub = api_inst.get_preferred_publisher()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2382
                if preferred_only:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2383
                        pubs = [pref_pub]
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2384
                else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2385
                        pubs = [
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2386
                            p for p in api_inst.get_publishers()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2387
                            if inc_disabled or not p.disabled
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2388
                        ]
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2389
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2390
                # if more than one, list in publisher search order
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2391
                if len(pubs) > 1:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2392
                        so = api_inst.get_pub_search_order()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2393
                        pub_dict = dict([(p.prefix, p) for p in pubs])
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2394
                        pubs = [
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2395
                                pub_dict[name]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2396
                                for name in so
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2397
                                if name in pub_dict
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2398
                                ]
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2399
                for p in pubs:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2400
                        pfx = p.prefix
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2401
                        pstatus = ""
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2402
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2403
                        if not p.sticky:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2404
                                pstatus_list = [_("non-sticky")]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2405
                        else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2406
                                pstatus_list = []
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2407
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2408
                        if not preferred_only and p == pref_pub:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2409
                                pstatus_list.append(_("preferred"))
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2410
                        if p.disabled:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2411
                                pstatus_list.append(_("disabled"))
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2412
                        if pstatus_list:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2413
                                pstatus = "(%s)" % ", ".join(pstatus_list)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2414
                        else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2415
                                pstatus = ""
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2416
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2417
                        # Only show the selected repository's information in
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2418
                        # summary view.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2419
                        r = p.selected_repository
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2420
                        for uri in r.origins:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2421
                                # XXX get the real origin status
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2422
                                msg(fmt % (pfx, pstatus, _("origin"), "online",
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2423
                                    uri))
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2424
                        for uri in r.mirrors:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2425
                                # XXX get the real mirror status
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2426
                                msg(fmt % (pfx, pstatus, _("mirror"), "online",
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2427
                                    uri))
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2428
        else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2429
                def display_ssl_info(uri):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2430
                        retcode = EXIT_OK
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2431
                        c = get_cert_info(uri.ssl_cert)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2432
                        msg(_("              SSL Key:"), uri.ssl_key)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2433
                        msg(_("             SSL Cert:"), uri.ssl_cert)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2434
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2435
                        if not c:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2436
                                return retcode
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2437
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2438
                        if c["errors"]:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2439
                                retcode = EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2440
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2441
                        for e in c["errors"]:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2442
                                logger.error("\n" + str(e) + "\n")
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2443
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2444
                        if c["valid"]:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2445
                                msg(_(" Cert. Effective Date:"),
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2446
                                    c["info"]["effective"])
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2447
                                msg(_("Cert. Expiration Date:"),
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2448
                                    c["info"]["expiration"])
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2449
                        return retcode
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2450
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2451
                def display_repository(r):
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2452
                        retcode = 0
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2453
                        for uri in r.origins:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2454
                                msg(_("           Origin URI:"), uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2455
                                rval = display_ssl_info(uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2456
                                if rval == 1:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2457
                                        retcode = EXIT_PARTIAL
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2458
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2459
                        for uri in r.mirrors:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2460
                                msg(_("           Mirror URI:"), uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2461
                                rval = display_ssl_info(uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2462
                                if rval == 1:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2463
                                        retcode = EXIT_PARTIAL
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2464
                        return retcode
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2465
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2466
                for name in pargs:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2467
                        # detailed print
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2468
                        pub = api_inst.get_publisher(prefix=name, alias=name)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2469
                        dt = api_inst.get_publisher_last_update_time(pub.prefix)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2470
                        if dt:
1150
2b8aaf0b0b4e 4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents: 1141
diff changeset
  2471
                                dt = dt.strftime("%c")
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2472
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  2473
                        msg("")
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2474
                        msg(_("            Publisher:"), pub.prefix)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2475
                        msg(_("                Alias:"), pub.alias)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2476
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2477
                        for r in pub.repositories:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2478
                                rval = display_repository(r)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2479
                                if rval != 0:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2480
                                        # There was an error in displaying some
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2481
                                        # of the information about a repository.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2482
                                        # However, continue on.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2483
                                        retcode = rval
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2484
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2485
                        msg(_("          Client UUID:"), pub.client_uuid)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2486
                        msg(_("      Catalog Updated:"), dt)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2487
                        if pub.disabled:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2488
                                msg(_("              Enabled:"), _("No"))
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2489
                        else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2490
                                msg(_("              Enabled:"), _("Yes"))
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2491
        return retcode
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2492
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2493
def property_set(img, args):
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2494
        """pkg set-property propname propvalue"""
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2495
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2496
        # ensure no options are passed in
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2497
        opts, pargs = getopt.getopt(args, "")
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2498
        try:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2499
                propname, propvalue = pargs
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2500
        except ValueError:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2501
                usage(_("requires a property name and value"),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2502
                    cmd="set-property")
792
060a802056a4 4372 property set commands should display error for preferred-authority property
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 791
diff changeset
  2503
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2504
        if propname == "preferred-publisher":
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2505
                error(_("set-publisher must be used to change the preferred "
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2506
                    "publisher"), cmd="set-property")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2507
                return EXIT_OOPS
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2508
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2509
        try:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2510
                img.set_property(propname, propvalue)
709
cfb249e57576 2393 traceback when attempting to change client settings without permission
Brock Pytlik <bpytlik@sun.com>
parents: 706
diff changeset
  2511
        except api_errors.PermissionsException, e:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2512
                # Prepend a newline because otherwise the exception
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2513
                # will be printed on the same line as the spinner.
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2514
                error("\n" + str(e), cmd="set-property")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2515
                return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2516
        return EXIT_OK
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2517
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2518
def property_unset(img, args):
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2519
        """pkg unset-property propname ..."""
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2520
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2521
        # is this an existing property in our image?
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2522
        # if so, delete it
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2523
        # if not, error
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2524
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2525
        # ensure no options are passed in
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2526
        opts, pargs = getopt.getopt(args, "")
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2527
        if not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2528
                usage(_("requires at least one property name"),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2529
                    cmd="unset-property")
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2530
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2531
        for p in pargs:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2532
                if p == "preferred-publisher":
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2533
                        error(_("set-publisher must be used to change the "
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2534
                            "preferred publisher"), cmd="unset-property")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2535
                        return EXIT_OOPS
792
060a802056a4 4372 property set commands should display error for preferred-authority property
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 791
diff changeset
  2536
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2537
                try:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2538
                        img.delete_property(p)
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2539
                except KeyError:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2540
                        error(_("no such property: %s") % p,
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2541
                            cmd="unset-property")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2542
                        return EXIT_OOPS
709
cfb249e57576 2393 traceback when attempting to change client settings without permission
Brock Pytlik <bpytlik@sun.com>
parents: 706
diff changeset
  2543
                except api_errors.PermissionsException, e:
cfb249e57576 2393 traceback when attempting to change client settings without permission
Brock Pytlik <bpytlik@sun.com>
parents: 706
diff changeset
  2544
                        # Prepend a newline because otherwise the exception
cfb249e57576 2393 traceback when attempting to change client settings without permission
Brock Pytlik <bpytlik@sun.com>
parents: 706
diff changeset
  2545
                        # will be printed on the same line as the spinner.
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2546
                        error("\n" + str(e), cmd="unset-property")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2547
                        return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2548
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2549
        return EXIT_OK
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2550
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2551
def property_list(img, args):
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2552
        """pkg property [-H] [propname ...]"""
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2553
        omit_headers = False
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2554
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2555
        opts, pargs = getopt.getopt(args, "H")
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2556
        for opt, arg in opts:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2557
                if opt == "-H":
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2558
                        omit_headers = True
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2559
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2560
        for p in pargs:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2561
                if not img.has_property(p):
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2562
                        error(_("property: no such property: %s") % p)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2563
                        return EXIT_OOPS
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2564
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2565
        if not pargs:
611
e2a9af3f81ab 4131 "pkg property" prints only headers
Tom Mueller <Tom.Mueller@sun.com>
parents: 607
diff changeset
  2566
                pargs = list(img.properties())
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2567
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2568
        width = max(max([len(p) for p in pargs]), 8)
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2569
        fmt = "%%-%ss %%s" % width
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2570
        if not omit_headers:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2571
                msg(fmt % ("PROPERTY", "VALUE"))
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2572
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2573
        for p in pargs:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2574
                msg(fmt % (p, img.get_property(p)))
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2575
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2576
        return EXIT_OK
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2577
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2578
def variant_list(img, args):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2579
        """pkg variant [-H] [<variant_spec>]"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2580
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2581
        omit_headers = False
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2582
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2583
        opts, pargs = getopt.getopt(args, "H")
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2584
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2585
        for opt, arg in opts:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2586
                if opt == "-H":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2587
                        omit_headers = True
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2588
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2589
        variants = img.get_variants()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2590
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2591
        for p in pargs:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2592
                if p not in variants:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2593
                        error(_("no such variant: %s") % p, cmd="variant")
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2594
                        return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2595
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2596
        if not pargs:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2597
                pargs = variants.keys()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2598
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2599
        width = max(max([len(p) for p in pargs]), 8)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2600
        fmt = "%%-%ss %%s" % width
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2601
        if not omit_headers:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2602
                msg(fmt % ("VARIANT", "VALUE"))
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2603
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2604
        for p in pargs:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2605
                msg(fmt % (p, variants[p]))
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2606
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2607
        return EXIT_OK
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2608
        
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2609
def facet_list(img, args):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2610
        """pkg facet [-H] [<facet_spec>]"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2611
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2612
        omit_headers = False
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2613
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2614
        opts, pargs = getopt.getopt(args, "H")
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2615
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2616
        for opt, arg in opts:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2617
                if opt == "-H":
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2618
                        omit_headers = True
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2619
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2620
        facets = img.get_facets()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2621
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2622
        for i, p in enumerate(pargs[:]):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2623
                if not p.startswith("facet."):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2624
                        pargs[i] = "facet." + p
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2625
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2626
        if not pargs:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2627
                pargs = facets.keys()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2628
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2629
        if pargs:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2630
                width = max(max([len(p) for p in pargs]), 8)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2631
        else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2632
                width = 8
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2633
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2634
        fmt = "%%-%ss %%s" % width
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2635
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2636
        if not omit_headers:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2637
                msg(fmt % ("FACETS", "VALUE"))
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2638
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2639
        for p in pargs:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2640
                msg(fmt % (p, facets[p]))
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2641
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2642
        return EXIT_OK
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2643
       
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2644
def image_create(args):
116
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
  2645
        """Create an image of the requested kind, at the given path.  Load
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2646
        catalog for initial publisher for convenience.
116
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
  2647
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
  2648
        At present, it is legitimate for a user image to specify that it will be
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
  2649
        deployed in a zone.  An easy example would be a program with an optional
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
  2650
        component that consumes global zone-only information, such as various
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
  2651
        kernel statistics or device information."""
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  2652
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2653
        force = False
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
  2654
        imgtype = image.IMG_USER
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
  2655
        is_zone = False
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2656
        mirrors = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2657
        origins = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2658
        pub_name = None
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2659
        refresh_catalogs = True
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2660
        ssl_key = None
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2661
        ssl_cert = None
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2662
        variants = {}
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2663
        facets = pkg.facet.Facets()
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  2664
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2665
        opts, pargs = getopt.getopt(args, "fFPUza:g:m:p:k:c:",
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2666
            ["force", "full", "partial", "user", "zone", "authority=", "facet=",
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2667
                "mirror=", "origin=", "publisher=", "no-refresh", "variant="])
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  2668
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  2669
        for opt, arg in opts:
938
eeb932b9b44e 7336 putback for 5871 missed a few vestiges of authority
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 936
diff changeset
  2670
                # -a is deprecated and will be removed at a future date.
eeb932b9b44e 7336 putback for 5871 missed a few vestiges of authority
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 936
diff changeset
  2671
                if opt in ("-a", "-p", "--publisher"):
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2672
                        pub_url = None
285
538afd6a9d3e 763 pkg image-create /foo , pkg image-create /tmp/foo both yield (different) tracebacks
Danek Duvall <danek.duvall@sun.com>
parents: 271
diff changeset
  2673
                        try:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2674
                                pub_name, pub_url = arg.split("=", 1)
285
538afd6a9d3e 763 pkg image-create /foo , pkg image-create /tmp/foo both yield (different) tracebacks
Danek Duvall <danek.duvall@sun.com>
parents: 271
diff changeset
  2675
                        except ValueError:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2676
                                pub_name = None
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2677
                                pub_url = None
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2678
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2679
                        if pub_name is None or pub_url is None:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2680
                                usage(_("publisher argument must be of the "
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2681
                                    "form '<prefix>=<url>'."),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2682
                                    cmd="image-create")
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2683
                        origins.add(pub_url)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2684
                elif opt == "-c":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2685
                        ssl_cert = arg
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2686
                elif opt == "-f" or opt == "--force":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2687
                        force = True
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2688
                elif opt in ("-g", "--origin"):
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2689
                        origins.add(arg)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2690
                elif opt == "-k":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2691
                        ssl_key = arg
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2692
                elif opt in ("-m", "--mirror"):
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2693
                        mirrors.add(arg)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2694
                elif opt == "-z" or opt == "--zone":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2695
                        is_zone = True
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2696
                        imgtype = image.IMG_ENTIRE
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2697
                elif opt == "-F" or opt == "--full":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2698
                        imgtype = imgtypes.IMG_ENTIRE
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2699
                elif opt == "-P" or opt == "--partial":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2700
                        imgtype = imgtypes.IMG_PARTIAL
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2701
                elif opt == "-U" or opt == "--user":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2702
                        imgtype = imgtypes.IMG_USER
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2703
                elif opt == "--no-refresh":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2704
                        refresh_catalogs = False
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2705
                elif opt == "--variant":
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2706
                        try:
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2707
                                v_name, v_value = arg.split("=", 1)
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2708
                                if not v_name.startswith("variant."):
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  2709
                                        v_name = "variant.%s" % v_name
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2710
                        except ValueError:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2711
                                usage(_("variant arguments must be of the "
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2712
                                    "form '<name>=<value>'."),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2713
                                    cmd="image-create")
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2714
                        variants[v_name] = v_value
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2715
                if opt == "--facet":
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2716
                        allow = { "TRUE":True, "FALSE":False }
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2717
                        f_name, f_value = arg.split("=", 1)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2718
                        if not f_name.startswith("facet."):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2719
                                f_name = "facet.%s" % f_name
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2720
                        if f_value.upper() not in allow:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2721
                                usage(_("Facet arguments must be"
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2722
                                    "form 'facet..=[True|False]'"),
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2723
                                    cmd="image-create")
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2724
                        facets[f_name] = allow[f_value.upper()]
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2725
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  2726
        if len(pargs) != 1:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2727
                usage(_("only one image directory path may be specified"),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2728
                    cmd="image-create")
1111
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2729
        image_dir = pargs[0]
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  2730
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2731
        if ssl_key:
1111
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2732
                # When creating zones, the path is image-root-relative.
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2733
                if is_zone:
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2734
                        ssl_key = os.path.normpath(image_dir + os.sep + \
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2735
                            ssl_key)
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2736
                else:
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2737
                        ssl_key = os.path.abspath(ssl_key)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2738
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2739
        if ssl_cert:
1111
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2740
                # When creating zones, the path is image-root-relative.
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2741
                if is_zone:
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2742
                        ssl_cert = os.path.normpath(image_dir + os.sep + \
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2743
                            ssl_cert)
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2744
                else:
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2745
                        ssl_cert = os.path.abspath(ssl_cert)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2746
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2747
        if not pub_name and not origins:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2748
                usage(_("a publisher must be specified"), cmd="image-create")
285
538afd6a9d3e 763 pkg image-create /foo , pkg image-create /tmp/foo both yield (different) tracebacks
Danek Duvall <danek.duvall@sun.com>
parents: 271
diff changeset
  2749
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2750
        if not pub_name or not origins:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2751
                usage(_("publisher argument must be of the form "
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2752
                    "'<prefix>=<url>'."), cmd="image-create")
285
538afd6a9d3e 763 pkg image-create /foo , pkg image-create /tmp/foo both yield (different) tracebacks
Danek Duvall <danek.duvall@sun.com>
parents: 271
diff changeset
  2753
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2754
        if pub_name.startswith(fmri.PREF_PUB_PFX):
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2755
                error(_("a publisher's prefix may not start with the text: %s"
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2756
                        % fmri.PREF_PUB_PFX), cmd="image-create")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2757
                return EXIT_OOPS
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2758
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2759
        if not misc.valid_pub_prefix(pub_name):
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2760
                error(_("publisher prefix contains invalid characters"),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2761
                    cmd="image-create")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2762
                return EXIT_OOPS
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2763
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2764
        global __img
285
538afd6a9d3e 763 pkg image-create /foo , pkg image-create /tmp/foo both yield (different) tracebacks
Danek Duvall <danek.duvall@sun.com>
parents: 271
diff changeset
  2765
        try:
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2766
                progtrack = get_tracker()
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2767
                __img = img = image.Image(root=image_dir, imgtype=imgtype,
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2768
                    should_exist=False, progtrack=progtrack, force=force)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2769
                img.set_attrs(is_zone, pub_name, facets=facets,
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2770
                    origins=origins, ssl_key=ssl_key, ssl_cert=ssl_cert,
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2771
                    refresh_allowed=refresh_catalogs, progtrack=progtrack,
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2772
                    variants=variants, mirrors=mirrors)
1472
c50eb141435a 12128 client should pipeline manifest retrieval
johansen <johansen@sun.com>
parents: 1463
diff changeset
  2773
                img.cleanup_downloads()
285
538afd6a9d3e 763 pkg image-create /foo , pkg image-create /tmp/foo both yield (different) tracebacks
Danek Duvall <danek.duvall@sun.com>
parents: 271
diff changeset
  2774
        except OSError, e:
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  2775
                # Ensure messages are displayed after the spinner.
1503
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1472
diff changeset
  2776
                img.cleanup_downloads()
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2777
                logger.error("\n")
1063
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  2778
                error(_("cannot create image at %(image_dir)s: %(reason)s") %
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2779
                    { "image_dir": image_dir, "reason": e.args[1] },
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2780
                    cmd="image-create")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2781
                return EXIT_OOPS
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2782
        except api_errors.PublisherError, e:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2783
                error(e, cmd="image-create")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2784
                return EXIT_OOPS
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  2785
        except api_errors.PermissionsException, e:
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  2786
                # Ensure messages are displayed after the spinner.
1503
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1472
diff changeset
  2787
                img.cleanup_downloads()
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2788
                logger.error("")
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2789
                error(e, cmd="image-create")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2790
                return EXIT_OOPS
835
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  2791
        except api_errors.InvalidDepotResponseException, e:
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  2792
                # Ensure messages are displayed after the spinner.
1503
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1472
diff changeset
  2793
                img.cleanup_downloads()
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2794
                logger.error("\n")
1063
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  2795
                error(_("The URI '%(pub_url)s' does not appear to point to a "
835
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  2796
                    "valid pkg server.\nPlease check the server's "
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  2797
                    "address and client's network configuration."
1063
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  2798
                    "\nAdditional details:\n\n%(error)s") %
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2799
                    { "pub_url": pub_url, "error": e },
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2800
                    cmd="image-create")
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2801
                print_proxy_config()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2802
                return EXIT_OOPS
835
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  2803
        except api_errors.CatalogRefreshException, cre:
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  2804
                # Ensure messages are displayed after the spinner.
1503
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1472
diff changeset
  2805
                img.cleanup_downloads()
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2806
                error("", cmd="image-create")
835
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  2807
                if display_catalog_failures(cre) == 0:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2808
                        return EXIT_OOPS
835
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  2809
                else:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2810
                        return EXIT_PARTIAL
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2811
        except api_errors.ImageCreationException, e:
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2812
                error(e, cmd="image-create")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2813
                return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2814
        return EXIT_OK
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  2815
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2816
def rebuild_index(img, pargs):
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  2817
        """pkg rebuild-index
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  2818
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  2819
        Forcibly rebuild the search indexes. Will remove existing indexes
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  2820
        and build new ones from scratch."""
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  2821
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  2822
        if pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2823
                usage(_("command does not take operands ('%s')") % \
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2824
                    " ".join(pargs), cmd="rebuild-index")
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2825
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2826
        api_inst = __api_alloc(img)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2827
        if api_inst == None:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2828
                return EXIT_OOPS
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  2829
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  2830
        try:
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2831
                api_inst.rebuild_search_index()
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  2832
        except api_errors.CorruptedIndexException:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2833
                error(INCONSISTENT_INDEX_ERROR_MESSAGE, cmd="rebuild-index")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2834
                return EXIT_OOPS
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2835
        except api_errors.ProblematicPermissionsIndexException, e:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2836
                error(str(e) + PROBLEMATIC_PERMISSIONS_ERROR_MESSAGE,
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2837
                    cmd="rebuild-index")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2838
                return EXIT_OOPS
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2839
        except api_errors.MainDictParsingException, e:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2840
                error(str(e), cmd="rebuild-index")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2841
                return EXIT_OOPS
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2842
        else:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2843
                return EXIT_OK
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2844
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2845
def history_list(img, args):
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2846
        """Display history about the current image.
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2847
        """
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2848
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2849
        omit_headers = False
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2850
        long_format = False
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2851
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2852
        opts, pargs = getopt.getopt(args, "Hl")
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2853
        for opt, arg in opts:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2854
                if opt == "-H":
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2855
                        omit_headers = True
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2856
                elif opt == "-l":
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2857
                        long_format = True
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2858
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2859
        if omit_headers and long_format:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2860
                usage(_("-H and -l may not be combined"), cmd="history")
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2861
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2862
        if not long_format:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2863
                if not omit_headers:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2864
                        msg("%-19s %-25s %-15s %s" % (_("TIME"),
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2865
                            _("OPERATION"), _("CLIENT"), _("OUTCOME")))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2866
732
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2867
        if not os.path.exists(img.history.path):
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2868
                # Nothing to display.
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2869
                return EXIT_OK
732
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2870
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2871
        for entry in sorted(os.listdir(img.history.path)):
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2872
                # Load the history entry.
732
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2873
                try:
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2874
                        he = history.History(root_dir=img.history.root_dir,
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2875
                            filename=entry)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2876
                except api_errors.PermissionsException, e:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2877
                        error(e, cmd="history")
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2878
                        return EXIT_OOPS
732
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2879
                except history.HistoryLoadException, e:
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2880
                        if e.parse_failure:
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2881
                                # Ignore corrupt entries.
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2882
                                continue
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2883
                        raise
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2884
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2885
                # Retrieve and format some of the data shared between each
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2886
                # output format.
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2887
                start_time = misc.timestamp_to_time(
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2888
                    he.operation_start_time)
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2889
                start_time = datetime.datetime.fromtimestamp(
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2890
                    start_time).isoformat()
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2891
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2892
                res = he.operation_result
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2893
                if len(res) > 1:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2894
                        outcome = "%s (%s)" % (_(res[0]), _(res[1]))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2895
                else:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2896
                        outcome = _(res[0])
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2897
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2898
                if long_format:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2899
                        data = []
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2900
                        data.append(("Operation", he.operation_name))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2901
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2902
                        data.append(("Outcome", outcome))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2903
                        data.append(("Client", he.client_name))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2904
                        data.append(("Version", he.client_version))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2905
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2906
                        data.append(("User", "%s (%s)" % \
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2907
                            (he.operation_username, he.operation_userid)))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2908
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2909
                        data.append(("Start Time", start_time))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2910
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2911
                        end_time = misc.timestamp_to_time(
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2912
                            he.operation_end_time)
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2913
                        end_time = datetime.datetime.fromtimestamp(
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2914
                            end_time).isoformat()
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2915
                        data.append(("End Time", end_time))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2916
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2917
                        data.append(("Command", " ".join(he.client_args)))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2918
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2919
                        state = he.operation_start_state
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2920
                        if state:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2921
                                data.append(("Start State", "\n" + state))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2922
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2923
                        state = he.operation_end_state
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2924
                        if state:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2925
                                data.append(("End State", "\n" + state))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2926
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2927
                        errors = "\n".join(he.operation_errors)
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2928
                        if errors:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2929
                                data.append(("Errors", "\n" + errors))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2930
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2931
                        for field, value in data:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2932
                                msg("%15s: %s" % (_(field), value))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2933
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2934
                        # Separate log entries with a blank line.
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2935
                        msg("")
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2936
                else:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2937
                        msg("%-19s %-25s %-15s %s" % (start_time,
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2938
                            he.operation_name, he.client_name, outcome))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2939
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2940
        return EXIT_OK
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2941
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2942
def history_purge(img, pargs):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2943
        """Purge image history"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2944
        ret_code = img.history.purge()
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2945
        if ret_code == EXIT_OK:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2946
                msg(_("History purged."))
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2947
        return ret_code
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2948
                
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2949
def print_proxy_config():
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2950
        """If the user has configured http_proxy or https_proxy in the
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2951
        environment, print out the values.  Some transport errors are
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2952
        not debuggable without this information handy."""
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2953
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2954
        http_proxy = os.environ.get("http_proxy", None)
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2955
        https_proxy = os.environ.get("https_proxy", None)
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2956
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2957
        if not http_proxy and not https_proxy:
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2958
                return
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2959
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2960
        logger.error(_("\nThe following proxy configuration is set in the"
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2961
            " environment:\n"))
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2962
        if http_proxy:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2963
                logger.error(_("http_proxy: %s\n") % http_proxy)
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2964
        if https_proxy:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2965
                logger.error(_("https_proxy: %s\n") % https_proxy)
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2966
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2967
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2968
# To allow exception handler access to the image.
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2969
__img = None
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  2970
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
  2971
def main_func():
696
6bbfd2dece6f 4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents: 693
diff changeset
  2972
        global_settings.client_name = PKG_CLIENT_NAME
6bbfd2dece6f 4371 user-agent string needs to be different for different client front-ends
Danek Duvall <danek.duvall@sun.com>
parents: 693
diff changeset
  2973
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2974
        global __img
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  2975
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  2976
        try:
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  2977
                opts, pargs = getopt.getopt(sys.argv[1:], "R:D:?",
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  2978
                    ["debug=", "help"])
52
d7c452ef7ae1 Sanitize getopt exception handling
Danek Duvall <danek.duvall@sun.com>
parents: 50
diff changeset
  2979
        except getopt.GetoptError, e:
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  2980
                usage(_("illegal global option -- %s") % e.opt)
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  2981
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  2982
        show_usage = False
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  2983
        for opt, arg in opts:
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  2984
                if opt == "-D" or opt == "--debug":
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2985
                        if arg in ["plan", "transport"]:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2986
                                key = arg
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2987
                                value = "True"
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2988
                        else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2989
                                try:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2990
                                        key, value = arg.split("=", 1)
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2991
                                except (AttributeError, ValueError):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2992
                                        usage(_("%(opt)s takes argument of form "
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2993
                                            "name=value, not %(arg)s") % { "opt":  opt,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2994
                                            "arg": arg })
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  2995
                        DebugValues.set_value(key, value)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  2996
                elif opt == "-R":
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  2997
                        mydir = arg
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  2998
                elif opt in ("--help", "-?"):
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  2999
                        show_usage = True
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  3000
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  3001
        subcommand = None
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  3002
        if pargs:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  3003
                subcommand = pargs.pop(0)
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  3004
                if subcommand == "help":
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  3005
                        show_usage = True
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  3006
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  3007
        if show_usage:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3008
                usage(retcode=0, full=True)
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  3009
        elif not subcommand:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3010
                usage(_("no subcommand specified"))
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  3011
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  3012
        # This call only affects sockets created by Python.  The transport
1218
49cd5492effc 9996 Exception thrown after cancel of install
johansen <johansen@sun.com>
parents: 1191
diff changeset
  3013
        # framework uses the defaults in global_settings, which may be
49cd5492effc 9996 Exception thrown after cancel of install
johansen <johansen@sun.com>
parents: 1191
diff changeset
  3014
        # overridden in the environment.  The default socket module should
49cd5492effc 9996 Exception thrown after cancel of install
johansen <johansen@sun.com>
parents: 1191
diff changeset
  3015
        # only be used in rare cases by ancillary code, making it safe to
49cd5492effc 9996 Exception thrown after cancel of install
johansen <johansen@sun.com>
parents: 1191
diff changeset
  3016
        # code the value here, at least for now.
49cd5492effc 9996 Exception thrown after cancel of install
johansen <johansen@sun.com>
parents: 1191
diff changeset
  3017
        socket.setdefaulttimeout(30) # in secs
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  3018
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
  3019
        if subcommand == "image-create":
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  3020
                if "mydir" in locals():
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  3021
                        usage(_("-R not allowed for %s subcommand") %
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  3022
                              subcommand)
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  3023
                try:
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  3024
                        ret = image_create(pargs)
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  3025
                except getopt.GetoptError, e:
1326
989c1150fb32 10987 allow for "--help" or "-?" after the subcommand
Darren J Moffat <Darren.Moffat@Sun.COM>
parents: 1315
diff changeset
  3026
                        if e.opt in ("help", "?"):
989c1150fb32 10987 allow for "--help" or "-?" after the subcommand
Darren J Moffat <Darren.Moffat@Sun.COM>
parents: 1315
diff changeset
  3027
                                usage(full=True)
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3028
                        usage(_("illegal option -- %s") % e.opt, cmd=subcommand)
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  3029
                return ret
362
d974bb176266 1341 pkg(1) - pkg contents example#3 doesn't work and "pkg verify" synopsis does not match subcommand description
Danek Duvall <danek.duvall@sun.com>
parents: 361
diff changeset
  3030
        elif subcommand == "version":
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  3031
                if "mydir" in locals():
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  3032
                        usage(_("-R not allowed for %s subcommand") %
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  3033
                              subcommand)
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  3034
                if pargs:
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  3035
                        usage(_("version: command does not take operands " \
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  3036
                            "('%s')") % " ".join(pargs))
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  3037
                msg(pkg.VERSION)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3038
                return EXIT_OK
50
bfcb1661f019 basic image and package plans
Stephen Hahn <sch@sun.com>
parents: 48
diff changeset
  3039
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3040
        provided_image_dir = True
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3041
        pkg_image_used = False
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  3042
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
  3043
        if "mydir" not in locals():
63
ba3a4af65479 add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents: 60
diff changeset
  3044
                try:
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
  3045
                        mydir = os.environ["PKG_IMAGE"]
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3046
                        pkg_image_used = True
63
ba3a4af65479 add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents: 60
diff changeset
  3047
                except KeyError:
515
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3048
                        try:
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3049
                                provided_image_dir = False
515
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3050
                                mydir = os.getcwd()
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3051
                        except OSError, e:
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3052
                                try:
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3053
                                        mydir = os.environ["PWD"]
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3054
                                        if not mydir or mydir[0] != "/":
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3055
                                                mydir = None
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3056
                                except KeyError:
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3057
                                        mydir = None
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3058
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3059
        if mydir == None:
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3060
                error(_("Could not find image.  Use the -R option or set "
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3061
                    "$PKG_IMAGE to point\nto an image, or change the working "
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3062
                    "directory to one inside the image."))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3063
                return EXIT_OOPS
63
ba3a4af65479 add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents: 60
diff changeset
  3064
ba3a4af65479 add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents: 60
diff changeset
  3065
        try:
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  3066
                __img = img = image.Image(mydir, provided_image_dir)
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3067
        except api_errors.ImageNotFoundException, e:
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3068
                if e.user_specified:
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3069
                        m = "No image rooted at '%s'"
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3070
                        if pkg_image_used:
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3071
                                m += " (set by $PKG_IMAGE)"
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3072
                        error(_(m) % e.user_dir)
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3073
                else:
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3074
                        error(_("No image found."))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3075
                return EXIT_OOPS
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3076
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3077
        cmds = {
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3078
                "authority"        : publisher_list,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3079
                "change-facet"     : change_facet,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3080
                "change-variant"   : change_variant,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3081
                "contents"         : list_contents,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3082
                "facet"            : facet_list,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3083
                "fix"              : fix_image,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3084
                "freeze"           : freeze,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3085
                "history"          : history_list,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3086
                "image-update"     : image_update,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3087
                "info"             : info,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3088
                "install"          : install,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3089
                "list"             : list_inventory,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3090
                "property"         : property_list,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3091
                "publisher"        : publisher_list,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3092
                "purge-history"    : history_purge,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3093
                "rebuild-index"    : rebuild_index,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3094
                "refresh"          : publisher_refresh,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3095
                "search"           : search,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3096
                "set-authority"    : publisher_set,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3097
                "set-property"     : property_set,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3098
                "set-publisher"    : publisher_set,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3099
                "unfreeze"         : unfreeze,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3100
                "uninstall"        : uninstall,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3101
                "unset-authority"  : publisher_unset,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3102
                "unset-property"   : property_unset,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3103
                "unset-publisher"  : publisher_unset,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3104
                "variant"          : variant_list,
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3105
                "verify"           : verify_image
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3106
               }
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3107
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3108
        func = cmds.get(subcommand, None)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3109
        if not func:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3110
                usage(_("unknown subcommand '%s'") % subcommand)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3111
        try:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3112
                return func(img, pargs)
192
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3113
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3114
        except getopt.GetoptError, e:
1326
989c1150fb32 10987 allow for "--help" or "-?" after the subcommand
Darren J Moffat <Darren.Moffat@Sun.COM>
parents: 1315
diff changeset
  3115
                if e.opt in ("help", "?"):
989c1150fb32 10987 allow for "--help" or "-?" after the subcommand
Darren J Moffat <Darren.Moffat@Sun.COM>
parents: 1315
diff changeset
  3116
                        usage(full=True)
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3117
                usage(_("illegal option -- %s") % e.opt, cmd=subcommand)
192
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3118
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3119
#
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3120
# Establish a specific exit status which means: "python barfed an exception"
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3121
# so that we can more easily detect these in testing of the CLI commands.
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3122
#
1286
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3123
def handle_errors(func, non_wrap_print=True, *args, **kwargs):
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3124
        traceback_str = _("\n\nThis is an internal error.  Please let the "
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3125
            "developers know about this\nproblem by filing a bug at "
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3126
            "http://defect.opensolaris.org and including the\nabove "
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3127
            "traceback and this message.  The version of pkg(5) is "
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3128
            "'%s'.") % pkg.VERSION
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  3129
        try:
1035
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3130
                # Out of memory errors can be raised as EnvironmentErrors with
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3131
                # an errno of ENOMEM, so in order to handle those exceptions
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3132
                # with other errnos, we nest this try block and have the outer
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3133
                # one handle the other instances.
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3134
                try:
1286
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3135
                        __ret = func(*args, **kwargs)
1035
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3136
                except (MemoryError, EnvironmentError), __e:
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3137
                        if isinstance(__e, EnvironmentError) and \
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3138
                            __e.errno != errno.ENOMEM:
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  3139
                                raise
1035
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3140
                        if __img:
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3141
                                __img.history.abort(RESULT_FAILED_OUTOFMEMORY)
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3142
                        error("\n" + misc.out_of_memory())
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3143
                        __ret = EXIT_OOPS
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3144
        except SystemExit, __e:
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3145
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3146
                        __img.history.abort(RESULT_FAILED_UNKNOWN)
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3147
                raise __e
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  3148
        except (PipeError, KeyboardInterrupt):
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3149
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3150
                        __img.history.abort(RESULT_CANCELED)
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3151
                # We don't want to display any messages here to prevent
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3152
                # possible further broken pipe (EPIPE) errors.
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3153
                __ret = EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3154
        except api_errors.CertificateError, __e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3155
                if __img:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3156
                        __img.history.abort(RESULT_FAILED_CONFIGURATION)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3157
                error(__e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3158
                __ret = EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3159
        except api_errors.PublisherError, __e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3160
                if __img:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3161
                        __img.history.abort(RESULT_FAILED_BAD_REQUEST)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3162
                error(__e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3163
                __ret = EXIT_OOPS
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  3164
        except api_errors.TransportError, __e:
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3165
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3166
                        __img.history.abort(RESULT_FAILED_TRANSPORT)
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3167
                logger.error(_("\nErrors were encountered while attempting "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3168
                    "to retrieve package or file data for\nthe requested "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3169
                    "operation."))
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3170
                logger.error(_("Details follow:\n\n%s") % __e)
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  3171
                print_proxy_config()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3172
                __ret = EXIT_OOPS
835
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  3173
        except api_errors.InvalidDepotResponseException, __e:
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  3174
                if __img:
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  3175
                        __img.history.abort(RESULT_FAILED_TRANSPORT)
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3176
                logger.error(_("\nUnable to contact a valid package depot. "
835
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  3177
                    "This may be due to a problem with the server, "
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  3178
                    "network misconfiguration, or an incorrect pkg client "
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  3179
                    "configuration.  Please check your network settings and "
34ec4401dc48 686 Client needs a way to tell that a response is actually from an IPS server
johansen <johansen@sun.com>
parents: 834
diff changeset
  3180
                    "attempt to contact the server using a web browser."))
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3181
                logger.error(_("\nAdditional details:\n\n%s") % __e)
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  3182
                print_proxy_config()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3183
                __ret = EXIT_OOPS
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3184
        except history.HistoryLoadException, __e:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3185
                # Since a history related error occurred, discard all
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3186
                # information about the current operation(s) in progress.
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3187
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3188
                        __img.history.clear()
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3189
                error(_("An error was encountered while attempting to load "
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3190
                    "history information\nabout past client operations."))
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3191
                error(__e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3192
                __ret = EXIT_OOPS
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3193
        except history.HistoryStoreException, __e:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3194
                # Since a history related error occurred, discard all
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3195
                # information about the current operation(s) in progress.
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3196
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3197
                        __img.history.clear()
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3198
                error(_("An error was encountered while attempting to store "
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3199
                    "information about the\ncurrent operation in client "
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3200
                    "history."))
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3201
                error(__e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3202
                __ret = EXIT_OOPS
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3203
        except history.HistoryPurgeException, __e:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3204
                # Since a history related error occurred, discard all
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3205
                # information about the current operation(s) in progress.
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3206
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3207
                        __img.history.clear()
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3208
                error(_("An error was encountered while attempting to purge "
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3209
                    "client history."))
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3210
                error(__e)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3211
                __ret = EXIT_OOPS
652
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3212
        except api_errors.VersionException, __e:
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3213
                if __img:
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3214
                        __img.history.abort(RESULT_FAILED_UNKNOWN)
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3215
                error(_("The pkg command appears out of sync with the "
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3216
                    "libraries provided \nby SUNWipkg. The client version is "
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3217
                    "%(client)s while the library API version is %(api)s") %
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3218
                    {'client': __e.received_version,
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3219
                     'api': __e.expected_version
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3220
                    })
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3221
                __ret = EXIT_OOPS
1286
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3222
        except api_errors.WrapSuccessfulIndexingException, __e:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3223
                __ret = EXIT_OK
1286
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3224
        except api_errors.WrapIndexingException, __e:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  3225
                def _wrapper():
1286
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3226
                        raise __e.wrapped
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  3227
                __ret = handle_errors(_wrapper, non_wrap_print=False)
1286
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3228
                s = ""
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3229
                if __ret == 99:
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3230
                        s += _("\n%s%s") % (__e, traceback_str)
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3231
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3232
                s += _("\n\nDespite the error while indexing, the "
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3233
                    "image-update, install, or uninstall\nhas completed "
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3234
                    "successfuly.")
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3235
                error(s)
1335
3dde2385d05c 516 Clean up traceback for installs to read-only filesystems
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents: 1328
diff changeset
  3236
        except api_errors.ReadOnlyFileSystemException, __e:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3237
                __ret = EXIT_OOPS
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  3238
        except:
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3239
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3240
                        __img.history.abort(RESULT_FAILED_UNKNOWN)
1286
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3241
                if non_wrap_print:
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3242
                        traceback.print_exc()
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3243
                        error(traceback_str)
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3244
                __ret = 99
1286
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3245
        return __ret
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3246
1286
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3247
if __name__ == "__main__":
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3248
        misc.setlocale(locale.LC_ALL, "", error)
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3249
        gettext.install("pkg", "/usr/share/locale")
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  3250
        __retval = handle_errors(main_func)
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3251
        try:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3252
                logging.shutdown()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3253
        except IOError:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3254
                # Ignore python's spurious pipe problems.
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3255
                pass
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  3256
        sys.exit(__retval)