src/client.py
author Shawn Walker <srw@sun.com>
Thu, 03 Dec 2009 18:22:02 -0600
changeset 1543 223040b72119
parent 1538 78ac66abc186
child 1563 b24d60ef4c70
permissions -rwxr-xr-x
13039 various install/update operations can traceback if nothing to do
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
1543
223040b72119 13039 various install/update operations can traceback if nothing to do
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
   770
        stuff_to_do = None
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   771
        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
   772
                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
   773
                    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
   774
        except:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   775
                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
   776
                        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
   777
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   778
        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
   779
                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
   780
                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
   781
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   782
        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
   783
                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
   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
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   786
        # 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
   787
        # 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
   788
        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
   789
                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
   790
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   791
        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
   792
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   793
        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
   794
                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
   795
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   796
        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
   797
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   798
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
   799
        """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
   800
        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
   801
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   802
        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
   803
        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
   804
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   805
        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
   806
        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
   807
        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
   808
                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
   809
                        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
   810
                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
   811
                        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
   812
                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
   813
                        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
   814
                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
   815
                        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
   816
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   817
        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
   818
                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
   819
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   820
        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
   821
                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
   822
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   823
        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
   824
        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
   825
            "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
   826
            "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
   827
            "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
   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
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   830
        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
   831
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   832
                # '=' 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
   833
                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
   834
                        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
   835
                            "'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
   836
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   837
                # 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
   838
                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
   839
                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
   840
                        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
   841
                
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   842
                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
   843
                        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
   844
                            "'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
   845
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   846
                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
   847
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   848
                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
   849
                        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
   850
                else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   851
                        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
   852
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   853
        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
   854
        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
   855
                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
   856
1543
223040b72119 13039 various install/update operations can traceback if nothing to do
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
   857
        stuff_to_do = 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
   858
        try:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   859
                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
   860
                    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
   861
                    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
   862
        except:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   863
                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
   864
                        return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   865
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   866
        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
   867
                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
   868
                return EXIT_NOP
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   869
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   870
        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
   871
                return EXIT_OK
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   872
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   873
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   874
        # 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
   875
        # 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
   876
        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
   877
                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
   878
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   879
        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
   880
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   881
        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
   882
                print_mirror_stats(api_inst)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   883
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   884
        return ret_code
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   885
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   886
def image_update(img, args):
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   887
        """Attempt to take all installed packages specified to latest
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   888
        version."""
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   889
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
   890
        # XXX Publisher-catalog issues.
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   891
        # XXX Leaf package refinements.
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   892
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   893
        op = "image-update"
1094
66a14ac6bead 8538 Filelist shouldn't POST more than 128k of data
johansen <johansen@sun.com>
parents: 1087
diff changeset
   894
        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
   895
            "no-index"])
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   896
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
   897
        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
   898
        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
   899
        be_name = None
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   900
        for opt, arg in opts:
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   901
                if opt == "-n":
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   902
                        noexecute = True
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   903
                elif opt == "-v":
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   904
                        verbose = True
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   905
                elif opt == "-q":
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   906
                        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
   907
                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
   908
                        force = True
537
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
   909
                elif opt == "--no-refresh":
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
   910
                        refresh_catalogs = False
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   911
                elif opt == "--no-index":
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   912
                        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
   913
                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
   914
                        be_name = arg
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   915
326
0f1ba0508d1b 583 src/pkg-server.xml missing a CDDL block
Dan Price <dp@eng.sun.com>
parents: 323
diff changeset
   916
        if verbose and quiet:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   917
                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
   918
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
   919
        if pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   920
                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
   921
                    " ".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
   922
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   923
        api_inst = __api_alloc(img, quiet)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   924
        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
   925
                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
   926
1543
223040b72119 13039 various install/update operations can traceback if nothing to do
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
   927
        stuff_to_do = opensolaris_image = None
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   928
        try:
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   929
                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
   930
                    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
   931
                        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
   932
                        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
   933
        except:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   934
                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
   935
                        return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   936
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   937
        if not stuff_to_do:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   938
                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
   939
                return EXIT_NOP
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   940
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   941
        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
   942
                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
   943
1315
70c85a804c8e 10779 __api_prepare() chokes on transport errors
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1286
diff changeset
   944
        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
   945
                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
   946
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   947
        ret_code = __api_execute_plan(op, api_inst)
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
   948
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
   949
        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
   950
                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
   951
                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
   952
                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
   953
                msg("-" * 75 + "\n")
388
5a08791fb814 2188 Client must fail gracefully when network timeout occurs
johansen <johansen@sun.com>
parents: 384
diff changeset
   954
648
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   955
        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
   956
                print_mirror_stats(api_inst)
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   957
251
6c3d70b74865 470 pkg image-update can fail under some conditions
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 243
diff changeset
   958
        return ret_code
172
e3b310617b04 6 pkg image-update subcommand
Stephen Hahn <sch@Sun.COM>
parents: 165
diff changeset
   959
648
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   960
def print_mirror_stats(api_inst):
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   961
        """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
   962
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   963
        status_fmt = "%-10s %-35s %10s %10s"
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
   964
        print status_fmt % ("Publisher", "URI", "Success", "Failure")
648
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   965
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
   966
        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
   967
                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
   968
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   969
def install(img, args):
50
bfcb1661f019 basic image and package plans
Stephen Hahn <sch@sun.com>
parents: 48
diff changeset
   970
        """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
   971
        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
   972
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
   973
        # XXX Publisher-catalog issues.
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
   974
        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
   975
        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
   976
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
   977
        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
   978
        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
   979
32
c26788b7217c begin client install; sequences are now timestamps; skeleton ELF module
Stephen Hahn <sch@sun.com>
parents: 30
diff changeset
   980
        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
   981
                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
   982
                        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
   983
                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
   984
                        verbose = True
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   985
                elif opt == "-q":
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   986
                        quiet = True
537
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
   987
                elif opt == "--no-refresh":
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
   988
                        refresh_catalogs = False
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   989
                elif opt == "--no-index":
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
   990
                        update_index = False
32
c26788b7217c begin client install; sequences are now timestamps; skeleton ELF module
Stephen Hahn <sch@sun.com>
parents: 30
diff changeset
   991
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
   992
        if not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   993
                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
   994
326
0f1ba0508d1b 583 src/pkg-server.xml missing a CDDL block
Dan Price <dp@eng.sun.com>
parents: 323
diff changeset
   995
        if verbose and quiet:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   996
                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
   997
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   998
        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
   999
                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
  1000
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1001
        api_inst = __api_alloc(img, quiet)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1002
        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
  1003
                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
  1004
1543
223040b72119 13039 various install/update operations can traceback if nothing to do
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  1005
        stuff_to_do = None
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1006
        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
  1007
                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
  1008
                    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
  1009
                    update_index=update_index)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1010
        except:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1011
                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
  1012
                        return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1013
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1014
        if not stuff_to_do:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1015
                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
  1016
                return EXIT_NOP
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1017
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1018
        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
  1019
                return EXIT_OK
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1020
576
6ee6de304041 3777 PKG_TIMEOUT_MAX is a placebo setting
Dan Price <dp@eng.sun.com>
parents: 575
diff changeset
  1021
        # 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
  1022
        # 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
  1023
        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
  1024
                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
  1025
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1026
        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
  1027
            raise_ActionExecutionError=False)
271
ec8a7669bff2 659 package that delivers existing automounter mountpoint fails installation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 266
diff changeset
  1028
648
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
  1029
        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
  1030
                print_mirror_stats(api_inst)
9f1f457e78b2 3803 Mirror selection should avoid authority origin
johansen <johansen@sun.com>
parents: 641
diff changeset
  1031
251
6c3d70b74865 470 pkg image-update can fail under some conditions
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 243
diff changeset
  1032
        return ret_code
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  1033
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1034
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1035
def uninstall(img, args):
14
969c85e852af start pkg graph management, annotate pkgsend with server states
"Stephen Hahn <sch@sun.com>"
parents: 3
diff changeset
  1036
        """Attempt to take package specified to DELETED state."""
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1037
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1038
        op = "uninstall"
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  1039
        opts, pargs = getopt.getopt(args, "nrvq", ["no-index"])
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1040
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
  1041
        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
  1042
        update_index = True
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1043
        for opt, arg in opts:
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1044
                if opt == "-n":
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1045
                        noexecute = True
67
62c897652bbc Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents: 66
diff changeset
  1046
                elif opt == "-r":
62c897652bbc Handle dependencies when removing a package.
Danek Duvall <danek.duvall@sun.com>
parents: 66
diff changeset
  1047
                        recursive_removal = True
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1048
                elif opt == "-v":
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1049
                        verbose = True
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
  1050
                elif opt == "-q":
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
  1051
                        quiet = True
598
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  1052
                elif opt == "--no-index":
c53f6107fdb6 2863 pkg install should have a way to disable indexing
Brock Pytlik <bpytlik@sun.com>
parents: 596
diff changeset
  1053
                        update_index = False
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  1054
361
5aca6ca29a5d 1612 pkg contents doesn't give me the manifest I asked for
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 344
diff changeset
  1055
        if not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1056
                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
  1057
326
0f1ba0508d1b 583 src/pkg-server.xml missing a CDDL block
Dan Price <dp@eng.sun.com>
parents: 323
diff changeset
  1058
        if verbose and quiet:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1059
                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
  1060
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1061
        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
  1062
                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
  1063
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1064
        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
  1065
        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
  1066
                return EXIT_OOPS
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1067
432
578875da6e04 48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents: 431
diff changeset
  1068
        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
  1069
                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
  1070
                    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
  1071
                        assert 0
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1072
        except:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1073
                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
  1074
                        return EXIT_OOPS
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1075
        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
  1076
                return EXIT_OK
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  1077
576
6ee6de304041 3777 PKG_TIMEOUT_MAX is a placebo setting
Dan Price <dp@eng.sun.com>
parents: 575
diff changeset
  1078
        # 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
  1079
        # 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
  1080
        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
  1081
                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
  1082
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1083
        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
  1084
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
  1085
def freeze(img, args):
14
969c85e852af start pkg graph management, annotate pkgsend with server states
"Stephen Hahn <sch@sun.com>"
parents: 3
diff changeset
  1086
        """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
  1087
        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
  1088
        return EXIT_OK
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  1089
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
  1090
def unfreeze(img, args):
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  1091
        """Attempt to return package specified to INSTALLED state from FROZEN
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  1092
        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
  1093
        return EXIT_OK
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  1094
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1095
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
  1096
        """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
  1097
        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
  1098
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1099
        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
  1100
1100
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1101
        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
  1102
        below.
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1103
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1104
        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
  1105
        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
  1106
        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
  1107
        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
  1108
        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
  1109
        states which value matched the query."""
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1110
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1111
        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
  1112
        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
  1113
                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
  1114
        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
  1115
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1116
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
  1117
        """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
  1118
        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
  1119
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1120
        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
  1121
                return match
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1122
        if match == "basename":
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("path")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1124
        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
  1125
        if r:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1126
                return r
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1127
        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
  1128
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1129
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
  1130
        """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
  1131
        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
  1132
        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
  1133
        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
  1134
        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
  1135
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1136
        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
  1137
                return match
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1138
        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
  1139
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1140
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
  1141
        """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
  1142
        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
  1143
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1144
        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
  1145
        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
  1146
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1147
        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
  1148
        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
  1149
        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
  1150
        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
  1151
        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
  1152
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1153
        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
  1154
        the result was obtained."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1155
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1156
        action = None
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1157
        match = None
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1158
        match_type = None
1100
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  1159
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1160
        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
  1161
                try:
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1162
                        pfmri, match, action = tup
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1163
                except ValueError:
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1164
                        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
  1165
                            "The problematic structure:%r") % (tup,))
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1166
                        return False
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1167
                try:
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1168
                        action = actions.fromstr(action.rstrip())
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1169
                except actions.ActionError, e:
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1170
                        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
  1171
                            e)
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1172
                        return False
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1173
                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
  1174
                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
  1175
        else:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1176
                pfmri = tup
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1177
        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
  1178
        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
  1179
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1180
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
  1181
        """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
  1182
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1183
        # 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
  1184
        page_timeout = .5
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1185
        max_timeout = 5
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1186
        min_page_size = 5
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1187
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1188
        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
  1189
        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
  1190
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1191
        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
  1192
        search_prefixes.extend(["search."])
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1193
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1194
        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
  1195
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1196
        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
  1197
            "search.match", "pkg.shortfmri"]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1198
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1199
        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
  1200
499
ff214b0daeb1 2672 Search should allow for case insensitive search.
Brock Pytlik <bpytlik@sun.com>
parents: 497
diff changeset
  1201
        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
  1202
        servers = []
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1203
        attrs = []
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1204
        return_actions = True
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1205
        display_headers = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1206
        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
  1207
        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
  1208
                if opt == "-H":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1209
                        display_headers = False
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1210
                elif opt == "-a":
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1211
                        return_actions = True
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1212
                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
  1213
                        local = True
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1214
                elif opt == "-o":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1215
                        attrs.extend(arg.split(","))
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1216
                        use_default_attrs = False
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1217
                elif opt == "-p":
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1218
                        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
  1219
                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
  1220
                        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
  1221
                elif opt == "-s":
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1222
                        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
  1223
                                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
  1224
                                arg = "http://" + arg
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1225
                                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
  1226
                                        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
  1227
                                            "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
  1228
                                        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
  1229
                        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
  1230
                        servers.append({"origin": arg})
499
ff214b0daeb1 2672 Search should allow for case insensitive search.
Brock Pytlik <bpytlik@sun.com>
parents: 497
diff changeset
  1231
                elif opt == "-I":
ff214b0daeb1 2672 Search should allow for case insensitive search.
Brock Pytlik <bpytlik@sun.com>
parents: 497
diff changeset
  1232
                        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
  1233
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1234
        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
  1235
                remote = True
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  1236
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  1237
        if not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1238
                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
  1239
                    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
  1240
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1241
        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
  1242
            prefixes=search_prefixes)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1243
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1244
        action_attr = False
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1245
        for a in attrs:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1246
                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
  1247
                        action_attr = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1248
                        if not return_actions:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1249
                                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
  1250
                                    "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
  1251
                                    cmd="search")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1252
                        break
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1253
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1254
        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
  1255
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1256
        api_inst = __api_alloc(img)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1257
        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
  1258
                return EXIT_OOPS
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1259
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1260
        try:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1261
                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
  1262
                    return_actions)]
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1263
        except api_errors.BooleanQueryException, e:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1264
                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
  1265
                return EXIT_OOPS
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1266
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1267
        good_res = False
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1268
        bad_res = False
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1269
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1270
        try:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1271
                if local:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1272
                        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
  1273
                if remote:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1274
                        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
  1275
                            servers=servers))
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1276
                # 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
  1277
                retcode = EXIT_OOPS
302
a5268194080e 981 pkg search could have more useful output
Danek Duvall <danek.duvall@sun.com>
parents: 301
diff changeset
  1278
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1279
                # 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
  1280
                justs = calc_justs(attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1281
                page_again = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1282
                widths = []
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1283
                st = None
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1284
                ssu = None
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1285
                header_attrs = attrs
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1286
                while page_again:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1287
                        unprocessed_res = []
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1288
                        page_again = False
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1289
                        # 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
  1290
                        # 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
  1291
                        # results, then propogate the error.
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1292
                        try:
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1293
                                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
  1294
                                        if not st:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1295
                                                st = time.time()
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1296
                                        try:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1297
                                                query_num, pub, \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1298
                                                    (v, return_type, tmp) = \
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
                                        except ValueError, e:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1301
                                                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
  1302
                                                    "malformed result:%r") %
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1303
                                                    (raw_value,))
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1304
                                                bad_res = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1305
                                                continue
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1306
                                        # 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
  1307
                                        # 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
  1308
                                        # using the <> operator.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1309
                                        if action_attr and \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1310
                                            return_type != \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1311
                                            api.Query.RETURN_ACTIONS:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1312
                                                usage(_("action level options "
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1313
                                                    "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
  1314
                                                    "the queries that return "
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1315
                                                    "packages"), cmd="search")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1316
                                        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
  1317
                                                if return_type == \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1318
                                                    api.Query.RETURN_ACTIONS:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1319
                                                        attrs = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1320
                                                            default_attrs_action
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1321
                                                        header_attrs = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1322
                                                            ["index", "action",
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1323
                                                            "value", "package"]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1324
                                                else:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1325
                                                        attrs = default_attrs_package
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1326
                                                        header_attrs = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1327
                                                            ["package",
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1328
                                                            "publisher"]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1329
                                                justs = calc_justs(attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1330
                                        ret = v1_extract_info(
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1331
                                            tmp, return_type, pub)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1332
                                        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
  1333
                                        if ret:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1334
                                                good_res = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1335
                                                unprocessed_res.append(ret)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1336
                                        # 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
  1337
                                        # should be increased.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1338
                                        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
  1339
                                                if len(unprocessed_res) > \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1340
                                                    min_page_size:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1341
                                                        page_again = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1342
                                                        break
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1343
                                                else:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1344
                                                        page_timeout = min(
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1345
                                                            page_timeout * 2,
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1346
                                                            max_timeout)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1347
                        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
  1348
                                ssu = e
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1349
                        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
  1350
                            show_all=True)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1351
                        old_widths = widths[:]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1352
                        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
  1353
                        # 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
  1354
                        # 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
  1355
                        # the new widths.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1356
                        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
  1357
                                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
  1358
                        for line in lines:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1359
                                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
  1360
                                    widths, justs, line) %
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1361
                                    tuple(line)).rstrip())
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1362
                        st = time.time()
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1363
                if ssu:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1364
                        raise ssu
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1365
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1366
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1367
        except (api_errors.IncorrectIndexFileHash,
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1368
            api_errors.InconsistentIndexException):
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1369
                error(_("The search index appears corrupted.  Please "
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1370
                    "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
  1371
                return EXIT_OOPS
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1372
        except api_errors.ProblematicSearchServers, e:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1373
                error(e)
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1374
                bad_res = True
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1375
        except api_errors.SlowSearchUsed, e:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1376
                error(e)
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1377
        except (api_errors.IncorrectIndexFileHash,
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  1378
            api_errors.InconsistentIndexException):
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1379
                error(_("The search index appears corrupted.  Please "
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1380
                    "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
  1381
                return EXIT_OOPS
1053
00fe9773d072 8098 parsing errors should not cause a stacktrace
Brock Pytlik <bpytlik@sun.com>
parents: 1052
diff changeset
  1382
        except api_errors.ApiException, e:
00fe9773d072 8098 parsing errors should not cause a stacktrace
Brock Pytlik <bpytlik@sun.com>
parents: 1052
diff changeset
  1383
                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
  1384
                return EXIT_OOPS
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1385
        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
  1386
                retcode = EXIT_NOP
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  1387
        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
  1388
                retcode = EXIT_OOPS
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1389
        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
  1390
                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
  1391
        return retcode
60
6bd5cd83cfb1 Reverse index database and searching support.
Danek Duvall <danek.duvall@sun.com>
parents: 59
diff changeset
  1392
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1393
def info(img, args):
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1394
        """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
  1395
        """
195
b23d0425f0f7 11 use FMRIs with fully specified authorities internally
johansen <johansen@sun.com>
parents: 192
diff changeset
  1396
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1397
        display_license = False
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1398
        info_local = False
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1399
        info_remote = False
195
b23d0425f0f7 11 use FMRIs with fully specified authorities internally
johansen <johansen@sun.com>
parents: 192
diff changeset
  1400
620
9e0f5eeaf2e0 4198 pkg info -v shouldn't exist
Brock Pytlik <bpytlik@sun.com>
parents: 615
diff changeset
  1401
        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
  1402
        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
  1403
                if opt == "-l":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1404
                        info_local = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1405
                elif opt == "-r":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1406
                        info_remote = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1407
                elif opt == "--license":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1408
                        display_license = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1409
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1410
        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
  1411
                info_local = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1412
        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
  1413
                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
  1414
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1415
        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
  1416
                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
  1417
                    cmd="info")
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1418
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1419
        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
  1420
                return EXIT_OOPS
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1421
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1422
        err = 0
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1423
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1424
        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
  1425
        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
  1426
                return EXIT_OOPS
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1427
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1428
        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
  1429
                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
  1430
                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
  1431
                        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
  1432
                            frozenset([api.PackageInfo.LICENSES])
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1433
                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
  1434
                info_needed |= frozenset([api.PackageInfo.DEPENDENCIES])
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1435
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
  1436
                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
  1437
                        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
  1438
                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
  1439
                        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
  1440
                        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
  1441
                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
  1442
                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
  1443
                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
  1444
                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
  1445
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1446
        except api_errors.PermissionsException, e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1447
                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
  1448
                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
  1449
        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
  1450
                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
  1451
                return EXIT_OOPS
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1452
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1453
        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
  1454
        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
  1455
                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
  1456
                        msg("")
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1457
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1458
                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
  1459
                        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
  1460
                                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
  1461
                        else:
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1462
                                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
  1463
                                        msg(lic)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1464
                        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
  1465
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1466
                state = ""
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1467
                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
  1468
                        state = _("Obsolete")
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1469
                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
  1470
                        state = _("Renamed")
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1471
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1472
                if state:
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1473
                        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
  1474
                else:
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1475
                        fmt = "%s"
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1476
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1477
                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
  1478
                        state = fmt % _("Installed")
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1479
                else:
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1480
                        state = fmt % _("Not installed")
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1481
688
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1482
                name_str = _("          Name:")
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1483
                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
  1484
                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
  1485
                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
  1486
                        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
  1487
                        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
  1488
                        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
  1489
                        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
  1490
                            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
  1491
                        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
  1492
                        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
  1493
                        msg(desc_label, res)
688
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1494
                if pi.category_info_list:
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1495
                        verbose = len(pi.category_info_list) > 1
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1496
                        msg(_("      Category:"),
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1497
                            pi.category_info_list[0].__str__(verbose))
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1498
                        if len(pi.category_info_list) > 1:
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1499
                                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
  1500
                                        msg(" " * len(name_str),
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1501
                                            ci.__str__(verbose))
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  1502
615
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1503
                msg(_("         State:"), state)
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1504
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1505
                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
  1506
                        msg(_("    Renamed to:"), pi.dependencies[0])
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1507
                        for dep in pi.dependencies[1:]:
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1508
                                msg(" " * len(name_str), dep)
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  1509
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1510
                # 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
  1511
                msg(_("     Publisher:"), pi.publisher)
615
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1512
                msg(_("       Version:"), pi.version)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1513
                msg(_(" Build Release:"), pi.build_release)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1514
                msg(_("        Branch:"), pi.branch)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1515
                msg(_("Packaging Date:"), pi.packaging_date)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  1516
                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
  1517
                msg(_("          FMRI:"), pi.fmri)
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1518
                # XXX add license/copyright info here?
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1519
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1520
        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
  1521
                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
  1522
                if pis:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1523
                        logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1524
                if info_local:
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 are
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1527
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
  1528
                elif info_remote:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1529
                        logger.error(_("""\
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1530
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
  1531
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
  1532
examining the catalogs:"""))
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1533
                logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1534
                for p in notfound:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1535
                        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
  1536
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1537
        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
  1538
                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
  1539
                for i in illegals:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1540
                        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
  1541
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  1542
        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
  1543
                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
  1544
                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
  1545
                        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
  1546
                        for k in matches:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1547
                                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
  1548
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  1549
        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
  1550
                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
  1551
                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
  1552
                    "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
  1553
                for pfmri in no_licenses:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1554
                        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
  1555
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1556
        return err
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1557
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1558
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
  1559
        """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
  1560
        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
  1561
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1562
        if not widths:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1563
                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
  1564
        for l in lines:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1565
                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
  1566
                        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
  1567
                                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
  1568
        return widths
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 calc_justs(attrs):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1571
        """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
  1572
        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
  1573
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1574
        def __chose_just(attr):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1575
                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
  1576
                    "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
  1577
                        return JUST_LEFT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1578
                return JUST_UNKNOWN
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1579
        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
  1580
        
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1581
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
  1582
        """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
  1583
        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
  1584
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1585
        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
  1586
        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
  1587
        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
  1588
        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
  1589
        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
  1590
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1591
        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
  1592
        should be displayed.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1593
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1594
        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
  1595
        that should be displayed.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1596
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1597
        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
  1598
        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
  1599
        """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1600
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  1601
        lines = []
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1602
        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
  1603
                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
  1604
                        continue
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1605
                line = []
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1606
                for attr in attrs:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1607
                        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
  1608
                                a = action.attrs[attr]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1609
                        elif attr == "action.name":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1610
                                a = action.name
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1611
                        elif attr == "action.key":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1612
                                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
  1613
                        elif attr == "action.raw":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1614
                                a = action
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1615
                        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
  1616
                                a = pfmri.get_name()
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1617
                        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
  1618
                                a = pfmri
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1619
                        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
  1620
                                a = pfmri.get_short_fmri()
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1621
                        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
  1622
                                a = pfmri.get_publisher()
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1623
                                if a is None:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1624
                                        a = pub
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1625
                                        if a is None:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1626
                                                a = ""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1627
                        elif attr == "search.match":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1628
                                a = match
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1629
                        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
  1630
                                a = match_type
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1631
                        else:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1632
                                a = ""
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1633
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1634
                        line.append(a)
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1635
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1636
                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
  1637
                        lines.append(line)
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1638
        return lines
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
def default_left(v):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1641
        """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
  1642
        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
  1643
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1644
        if v == JUST_UNKNOWN:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1645
                return JUST_LEFT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1646
        return v
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1647
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1648
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
  1649
        """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
  1650
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1651
        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
  1652
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1653
        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
  1654
        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
  1655
        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
  1656
        function.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1657
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1658
        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
  1659
        header."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1660
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1661
        headers = []
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1662
        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
  1663
                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
  1664
                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
  1665
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1666
        # 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
  1667
        # 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
  1668
        # pass to the %-expander.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1669
        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
  1670
        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
  1671
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1672
        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
  1673
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1674
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
  1675
        """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
  1676
        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
  1677
        should be left justified."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1678
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1679
        if j != JUST_UNKNOWN:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1680
                return j
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1681
        try:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1682
                int(v)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1683
                return JUST_RIGHT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1684
        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
  1685
                # 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
  1686
                # a list.
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1687
                return JUST_LEFT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1688
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1689
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
  1690
        """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
  1691
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1692
        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
  1693
        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
  1694
        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
  1695
        formatting of the line.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1696
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1697
        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
  1698
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1699
        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
  1700
        column.
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
        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
  1703
        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
  1704
        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
  1705
        """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1706
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1707
        if display_headers:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1708
                # 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
  1709
                # 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
  1710
                # pass to the %-expander.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1711
                line_widths = [
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1712
                    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
  1713
                    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
  1714
                ]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1715
                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
  1716
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1717
                return fmt
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1718
        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
  1719
        fmt.rstrip("\t")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1720
        return fmt
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
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
  1723
    display_headers):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1724
        """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
  1725
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1726
        justs = calc_justs(attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1727
        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
  1728
        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
  1729
        
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1730
        sortidx = 0
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1731
        for i, attr in enumerate(attrs):
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1732
                if attr == sort_attrs[0]:
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1733
                        sortidx = i
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1734
                        break
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1735
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1736
        # 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
  1737
        if justs[sortidx] == JUST_RIGHT:
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1738
                def key_extract(x):
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1739
                        try:
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1740
                                return int(x[sortidx])
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1741
                        except (ValueError, TypeError):
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1742
                                return 0
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1743
        else:
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1744
                key_extract = lambda x: x[sortidx]
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1745
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  1746
        if display_headers:
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1747
                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
  1748
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  1749
        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
  1750
                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
  1751
                    line) % tuple(line)).rstrip())
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
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
  1754
        """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
  1755
        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
  1756
        """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1757
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1758
        if reference is None:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1759
                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
  1760
        if prefixes is None:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1761
                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
  1762
        for a in attrs:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1763
                for p in prefixes:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1764
                        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
  1765
                                usage(_("Invalid attribute '%s'") % a, cmd)
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  1766
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1767
def list_contents(img, args):
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1768
        """List package contents.
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1769
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1770
        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
  1771
        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
  1772
        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
  1773
        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
  1774
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1775
        # 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
  1776
        # from repository.
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1777
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1778
        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
  1779
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1780
        display_headers = True
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1781
        display_raw = False
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1782
        remote = False
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1783
        local = False
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1784
        attrs = []
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1785
        sort_attrs = []
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1786
        action_types = []
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1787
        for opt, arg in opts:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1788
                if opt == "-H":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1789
                        display_headers = False
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1790
                elif opt == "-o":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1791
                        attrs.extend(arg.split(","))
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1792
                elif opt == "-s":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1793
                        sort_attrs.append(arg)
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1794
                elif opt == "-t":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1795
                        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
  1796
                elif opt == "-r":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1797
                        remote = True
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1798
                elif opt == "-m":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1799
                        display_raw = True
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1800
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1801
        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
  1802
                local = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1803
        elif local and remote:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1804
                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
  1805
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  1806
        if remote and not pargs:
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  1807
                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
  1808
                   "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
  1809
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1810
        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
  1811
                return EXIT_OOPS
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1812
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1813
        if display_raw:
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 306
diff changeset
  1814
                display_headers = False
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 306
diff changeset
  1815
                attrs = [ "action.raw" ]
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1816
391
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
  1817
                invalid = set(("-H", "-o", "-t")). \
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
  1818
                    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
  1819
391
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
  1820
                if len(invalid) > 0:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1821
                        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
  1822
                            "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
  1823
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1824
        check_attrs(attrs, "contents")
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1825
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1826
        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
  1827
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1828
        err = EXIT_OK
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1829
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1830
        if local:
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1831
                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
  1832
                    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
  1833
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1834
                if illegals:
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1835
                        for i in illegals:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1836
                                logger.error(i)
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1837
                        img.history.operation_result = \
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1838
                            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
  1839
                        return EXIT_OOPS
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
  1840
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
  1841
                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
  1842
                        error(_("no packages installed"))
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1843
                        img.history.operation_result = \
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1844
                            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
  1845
                        return EXIT_OOPS
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1846
        elif remote:
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  1847
                # 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
  1848
                # operations
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1849
                try:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1850
                        img.check_cert_validity()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1851
                except (api_errors.CertificateError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1852
                    api_errors.PermissionsException), e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1853
                        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
  1854
                        return EXIT_OOPS
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  1855
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1856
                fmris = []
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1857
                notfound = []
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1858
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1859
                # 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
  1860
                # Image.make_install_plan()!
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1861
                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
  1862
                for p in pargs:
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1863
                        try:
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1864
                                matches = list(img.inventory([ p ],
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1865
                                    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
  1866
                        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
  1867
                                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
  1868
                                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
  1869
                                continue
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1870
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1871
                        pnames = {}
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1872
                        pmatch = []
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1873
                        npnames = {}
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1874
                        npmatch = []
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1875
                        for m, state in matches:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1876
                                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
  1877
                                        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
  1878
                                        pmatch.append(m)
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1879
                                else:
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1880
                                        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
  1881
                                        npmatch.append(m)
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1882
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1883
                        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
  1884
                                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
  1885
                                    "packages") % p)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1886
                                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
  1887
                                        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
  1888
                                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
  1889
                        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
  1890
                                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
  1891
                                    "packages") % p)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1892
                                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
  1893
                                        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
  1894
                                continue
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1895
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  1896
                        # 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
  1897
                        # 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
  1898
                        if len(pmatch) > 0:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1899
                                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
  1900
                        else:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1901
                                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
  1902
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1903
        #
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1904
        # 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
  1905
        # 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
  1906
        #
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1907
        if not attrs:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1908
                # 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
  1909
                # 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
  1910
                # 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
  1911
                # dependencies.
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1912
                attrs = [ "path" ]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1913
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1914
        if not sort_attrs:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1915
                # XXX reverse sorting
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1916
                # 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
  1917
                # make it explicit
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1918
                if "path" in attrs:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1919
                        sort_attrs = [ "path" ]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1920
                else:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1921
                        sort_attrs = attrs[:1]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1922
969
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1923
        # 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
  1924
        # 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
  1925
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1926
        if display_raw:
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1927
                excludes = EmptyI
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1928
        else:
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1929
                excludes = img.list_excludes()
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1930
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1931
        manifests = (
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1932
            img.get_manifest(f, all_variants=display_raw)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1933
            for f, state in fmris
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1934
        )
969
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  1935
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1936
        actionlist = [
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  1937
            (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
  1938
            for m in manifests
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  1939
            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
  1940
        ]
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1941
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1942
        if fmris:
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1943
                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
  1944
                    action_types, display_headers)
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1945
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1946
        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
  1947
                err = EXIT_OOPS
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1948
                if fmris:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1949
                        logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1950
                if local:
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 are
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1953
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
  1954
                elif remote:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1955
                        logger.error(_("""\
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  1956
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
  1957
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
  1958
examining the catalogs:"""))
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1959
                logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1960
                for p in notfound:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1961
                        logger.error("        %s" % p)
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1962
                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
  1963
        else:
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  1964
                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
  1965
        img.cleanup_downloads()
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  1966
        return err
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  1967
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1968
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
  1969
        total = cre.total
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
  1970
        succeeded = cre.succeeded
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  1971
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  1972
        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
  1973
            total)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  1974
        if cre.failed:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  1975
                # 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
  1976
                logger.error(txt)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  1977
        else:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  1978
                msg(txt)
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  1979
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  1980
        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
  1981
                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
  1982
                    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
  1983
                        # 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
  1984
                        # 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
  1985
                        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
  1986
                        break
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1987
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1988
        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
  1989
                # 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
  1990
                # 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
  1991
                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
  1992
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  1993
        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
  1994
                if isinstance(err, urllib2.HTTPError):
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1995
                        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
  1996
                            (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
  1997
                elif isinstance(err, urllib2.URLError):
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  1998
                        if err.args[0][0] == 8:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1999
                                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
  2000
                                    (urlparse.urlsplit(
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2001
                                        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
  2002
                                    err.args[0][1]))
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2003
                        else:
306
88f8e588cf60 748 Timeout for download operation
Danek Duvall <danek.duvall@sun.com>
parents: 302
diff changeset
  2004
                                if isinstance(err.args[0], socket.timeout):
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2005
                                        logger.error("    %s: %s" % \
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2006
                                            (pub["origin"], "timeout"))
306
88f8e588cf60 748 Timeout for download operation
Danek Duvall <danek.duvall@sun.com>
parents: 302
diff changeset
  2007
                                else:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2008
                                        logger.error("    %s: %s" % \
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2009
                                            (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
  2010
                else:
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2011
                        logger.error("   ")
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2012
                        logger.error(str(err))
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2013
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  2014
        if cre.message:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2015
                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
  2016
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2017
        return succeeded
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2018
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2019
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
  2020
        """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
  2021
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2022
        # 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
  2023
        full_refresh = False
523
69a22d5d368c 3387 pkg refresh --full gives a syntax error
Brock Pytlik <bpytlik@sun.com>
parents: 518
diff changeset
  2024
        opts, pargs = getopt.getopt(args, "", ["full"])
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2025
        for opt, arg in opts:
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2026
                if opt == "--full":
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2027
                        full_refresh = True
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2028
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2029
        api_inst = __api_alloc(img)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2030
        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
  2031
                return EXIT_OOPS
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2032
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2033
        try:
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  2034
                # 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
  2035
                # refresh to occur immediately.
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2036
                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
  2037
                    immediate=True, pubs=pargs)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2038
        except api_errors.PublisherError, e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2039
                error(e)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2040
                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
  2041
                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
  2042
        except api_errors.PermissionsException, e:
790
e2cf47b23e7a 5481 pkg refresh traceback without permissions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 789
diff changeset
  2043
                # 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
  2044
                # 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
  2045
                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
  2046
                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
  2047
        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
  2048
                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
  2049
                        return EXIT_OOPS
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2050
                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
  2051
                        return EXIT_PARTIAL
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2052
        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
  2053
                return EXIT_OK
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  2054
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2055
def publisher_set(img, args):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2056
        """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
  2057
            [-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
  2058
            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
  2059
            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
  2060
            [--search-before=publisher] [--search-after=publisher] publisher"""
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2061
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2062
        preferred = False
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2063
        ssl_key = None
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2064
        ssl_cert = None
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2065
        origin_url = None
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2066
        reset_uuid = False
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2067
        add_mirrors = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2068
        remove_mirrors = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2069
        add_origins = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2070
        remove_origins = set()
537
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
  2071
        refresh_catalogs = True
786
a400f8c4d1c0 2340 support authority enable and disable
Tom Mueller <Tom.Mueller@sun.com>
parents: 770
diff changeset
  2072
        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
  2073
        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
  2074
        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
  2075
        search_after = None
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2076
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2077
        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
  2078
            ["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
  2079
            "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
  2080
            "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
  2081
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2082
        for opt, arg in opts:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2083
                if opt == "-c":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2084
                        ssl_cert = arg
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2085
                if opt == "-d" or opt == "--disable":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2086
                        disable = True
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2087
                if opt == "-e" or opt == "--enable":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2088
                        disable = False
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2089
                if opt == "-g" or opt == "--add-origin":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2090
                        add_origins.add(arg)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2091
                if opt == "-G" or opt == "--remove-origin":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2092
                        remove_origins.add(arg)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2093
                if opt == "-k":
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2094
                        ssl_key = arg
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2095
                if opt == "-O":
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2096
                        origin_url = arg
461
37cf3ac75e37 1018 actions with payloads should include all sizes and hashes
johansen <johansen@sun.com>
parents: 443
diff changeset
  2097
                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
  2098
                        add_mirrors.add(arg)
461
37cf3ac75e37 1018 actions with payloads should include all sizes and hashes
johansen <johansen@sun.com>
parents: 443
diff changeset
  2099
                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
  2100
                        remove_mirrors.add(arg)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2101
                if opt == "-P":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2102
                        preferred = True
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2103
                if opt == "--reset-uuid":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2104
                        reset_uuid = True
537
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
  2105
                if opt == "--no-refresh":
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
  2106
                        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
  2107
                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
  2108
                        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
  2109
                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
  2110
                        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
  2111
                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
  2112
                        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
  2113
                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
  2114
                        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
  2115
                        
727
53a22eec05e5 5098 pkg set-authority misleading error message when no authority name given
Danek Duvall <danek.duvall@sun.com>
parents: 717
diff changeset
  2116
        if len(pargs) == 0:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2117
                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
  2118
        elif len(pargs) > 1:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2119
                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
  2120
                    cmd="set-publisher",)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2121
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2122
        name = pargs[0]
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2123
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2124
        if preferred and disable:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2125
                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
  2126
                    cmd="set-publisher")
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2127
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2128
        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
  2129
                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
  2130
                    "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
  2131
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2132
        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
  2133
                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
  2134
                      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
  2135
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2136
        api_inst = __api_alloc(img)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2137
        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
  2138
                return EXIT_OOPS
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2139
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2140
        new_pub = False
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2141
        try:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2142
                pub = api_inst.get_publisher(prefix=name, alias=name,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2143
                    duplicate=True)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2144
                if reset_uuid:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2145
                        pub.reset_client_uuid()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2146
                repo = pub.selected_repository
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2147
        except api_errors.PermissionsException, e:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2148
                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
  2149
                return EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2150
        except api_errors.UnknownPublisher:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2151
                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
  2152
                        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
  2153
                            "origin URI for new publisher."),
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2154
                            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
  2155
                        return EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2156
                # No pre-existing, so create a new one.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2157
                repo = publisher.Repository()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2158
                pub = publisher.Publisher(name, repositories=[repo])
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2159
                new_pub = True
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2160
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2161
        if disable is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2162
                # Set disabled property only if provided.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2163
                pub.disabled = disable
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2164
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2165
        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
  2166
                # 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
  2167
                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
  2168
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2169
        if origin_url:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2170
                # 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
  2171
                # of existing origins and add the new one.
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2172
                try:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2173
                        # 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
  2174
                        # https for transport.
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2175
                        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
  2176
                            origin_url.startswith("https:"):
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2177
                                for uri in repo.origins:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2178
                                        if ssl_cert is None:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2179
                                                ssl_cert = uri.ssl_cert
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2180
                                        if ssl_key is None:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2181
                                                ssl_key = uri.ssl_key
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2182
                                        break
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2183
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  2184
                        repo.reset_origins()
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2185
                        repo.add_origin(origin_url)
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2186
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2187
                        # XXX once image configuration supports storing this
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2188
                        # 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
  2189
                        # here.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2190
                except api_errors.PublisherError, e:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2191
                        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
  2192
                        return EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2193
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2194
        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
  2195
            add_origins, remove_origins)):
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2196
                etype, add, remove = entry
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2197
                # XXX once image configuration supports storing this
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2198
                # 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
  2199
                # here.
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2200
                try:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2201
                        for u in add:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2202
                                getattr(repo, "add_%s" % etype)(u)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2203
                        for u in remove:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2204
                                getattr(repo, "remove_%s" % etype)(u)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2205
                except (api_errors.PublisherError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2206
                    api_errors.CertificateError), e:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2207
                        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
  2208
                        return EXIT_OOPS
786
a400f8c4d1c0 2340 support authority enable and disable
Tom Mueller <Tom.Mueller@sun.com>
parents: 770
diff changeset
  2209
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2210
        # 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
  2211
        # ssl_key by using -k "" or -c "".
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2212
        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
  2213
                #
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2214
                # 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
  2215
                # 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
  2216
                #
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2217
                if img.is_zone():
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2218
                        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
  2219
                                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
  2220
                                    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
  2221
                        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
  2222
                                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
  2223
                                    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
  2224
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2225
                # 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
  2226
                # information for *all* of the currently selected
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2227
                # repository's origins and mirrors.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2228
                try:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2229
                        for uri in repo.origins:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2230
                                if ssl_cert is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2231
                                        uri.ssl_cert = ssl_cert
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2232
                                if ssl_key is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2233
                                        uri.ssl_key = ssl_key
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2234
                        for uri in repo.mirrors:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2235
                                if ssl_cert is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2236
                                        uri.ssl_cert = ssl_cert
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2237
                                if ssl_key is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2238
                                        uri.ssl_key = ssl_key
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2239
                except (api_errors.PublisherError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2240
                    api_errors.CertificateError), e:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2241
                        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
  2242
                        return EXIT_OOPS
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2243
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
  2244
        try:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2245
                if new_pub:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2246
                        api_inst.add_publisher(pub,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2247
                            refresh_allowed=refresh_catalogs)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2248
                else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2249
                        api_inst.update_publisher(pub,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2250
                            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
  2251
        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
  2252
                text = "Could not refresh the catalog for %s"
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2253
                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
  2254
                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
  2255
        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
  2256
                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
  2257
                    "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
  2258
                    "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
  2259
                    "\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
  2260
                    { "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
  2261
                return EXIT_OOPS
709
cfb249e57576 2393 traceback when attempting to change client settings without permission
Brock Pytlik <bpytlik@sun.com>
parents: 706
diff changeset
  2262
        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
  2263
                # 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
  2264
                # 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
  2265
                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
  2266
                return EXIT_OOPS
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2267
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2268
        if preferred:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2269
                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
  2270
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2271
        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
  2272
                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
  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
        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
  2275
                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
  2276
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2277
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2278
        return EXIT_OK
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2279
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2280
def publisher_unset(img, args):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2281
        """pkg unset-publisher publisher ..."""
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2282
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2283
        if len(args) == 0:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2284
                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
  2285
                    cmd="unset-publisher")
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2286
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2287
        api_inst = __api_alloc(img)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2288
        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
  2289
                return EXIT_OOPS
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2290
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2291
        errors = []
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2292
        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
  2293
                try:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2294
                        api_inst.remove_publisher(prefix=name, alias=name)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2295
                except (api_errors.PermissionsException,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2296
                    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
  2297
                        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
  2298
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2299
        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
  2300
        if errors:
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2301
                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
  2302
                        # 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
  2303
                        # 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
  2304
                        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
  2305
                else:
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2306
                        # 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
  2307
                        # 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
  2308
                        # 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
  2309
                        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
  2310
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  2311
                txt = ""
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2312
                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
  2313
                        txt += "\n"
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  2314
                        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
  2315
                            "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
  2316
                        txt += "\n"
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  2317
                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
  2318
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  2319
        return retcode
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2320
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2321
def publisher_list(img, args):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2322
        """pkg publishers"""
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2323
        omit_headers = False
410
403886a7592b 1259 Need CLI option to retrieve preferred authority
Shawn Walker <swalker@opensolaris.org>
parents: 409
diff changeset
  2324
        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
  2325
        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
  2326
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2327
        # '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
  2328
        opts, pargs = getopt.getopt(args, "HPan")
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2329
        for opt, arg in opts:
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2330
                if opt == "-H":
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2331
                        omit_headers = True
410
403886a7592b 1259 Need CLI option to retrieve preferred authority
Shawn Walker <swalker@opensolaris.org>
parents: 409
diff changeset
  2332
                if opt == "-P":
403886a7592b 1259 Need CLI option to retrieve preferred authority
Shawn Walker <swalker@opensolaris.org>
parents: 409
diff changeset
  2333
                        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
  2334
                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
  2335
                        inc_disabled = False
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2336
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2337
        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
  2338
        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
  2339
                return EXIT_OOPS
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2340
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2341
        cert_cache = {}
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2342
        def get_cert_info(ssl_cert):
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2343
                if not ssl_cert:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2344
                        return None
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2345
                if ssl_cert not in cert_cache:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2346
                        c = cert_cache[ssl_cert] = {}
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2347
                        errors = c["errors"] = []
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2348
                        times = c["info"] = {
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2349
                            "effective": "",
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2350
                            "expiration": "",
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2351
                        }
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2352
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2353
                        try:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2354
                                cert = misc.validate_ssl_cert(ssl_cert)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2355
                        except (EnvironmentError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2356
                            api_errors.CertificateError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2357
                            api_errors.PermissionsException), e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2358
                                # If the cert information can't be retrieved,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2359
                                # add the errors to a list and continue on.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2360
                                errors.append(e)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2361
                                c["valid"] = False
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2362
                        else:
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2363
                                nb = cert.get_notBefore()
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2364
                                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
  2365
                                nb = datetime.datetime.utcfromtimestamp(
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2366
                                    calendar.timegm(t))
1150
2b8aaf0b0b4e 4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents: 1141
diff changeset
  2367
                                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
  2368
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2369
                                na = cert.get_notAfter()
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2370
                                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
  2371
                                na = datetime.datetime.utcfromtimestamp(
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2372
                                    calendar.timegm(t))
1150
2b8aaf0b0b4e 4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents: 1141
diff changeset
  2373
                                times["expiration"] = na.strftime("%c")
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2374
                                c["valid"] = True
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2375
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2376
                return cert_cache[ssl_cert]
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2377
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2378
        retcode = EXIT_OK
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2379
        if len(pargs) == 0:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2380
                fmt = "%-24s %-12s %-8s %-8s %s"
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2381
                if not omit_headers:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2382
                        msg(fmt % (_("PUBLISHER"), "", _("TYPE"), _("STATUS"),
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2383
                            _("URI")))
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2384
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2385
                pref_pub = api_inst.get_preferred_publisher()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2386
                if preferred_only:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2387
                        pubs = [pref_pub]
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2388
                else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2389
                        pubs = [
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2390
                            p for p in api_inst.get_publishers()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2391
                            if inc_disabled or not p.disabled
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2392
                        ]
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2393
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2394
                # 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
  2395
                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
  2396
                        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
  2397
                        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
  2398
                        pubs = [
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2399
                                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
  2400
                                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
  2401
                                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
  2402
                                ]
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2403
                for p in pubs:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2404
                        pfx = p.prefix
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2405
                        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
  2406
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2407
                        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
  2408
                                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
  2409
                        else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2410
                                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
  2411
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2412
                        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
  2413
                                pstatus_list.append(_("preferred"))
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2414
                        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
  2415
                                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
  2416
                        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
  2417
                                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
  2418
                        else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2419
                                pstatus = ""
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2420
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2421
                        # Only show the selected repository's information in
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2422
                        # summary view.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2423
                        r = p.selected_repository
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2424
                        for uri in r.origins:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2425
                                # XXX get the real origin status
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2426
                                msg(fmt % (pfx, pstatus, _("origin"), "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
                        for uri in r.mirrors:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2429
                                # XXX get the real mirror status
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2430
                                msg(fmt % (pfx, pstatus, _("mirror"), "online",
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2431
                                    uri))
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2432
        else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2433
                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
  2434
                        retcode = EXIT_OK
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2435
                        c = get_cert_info(uri.ssl_cert)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2436
                        msg(_("              SSL Key:"), uri.ssl_key)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2437
                        msg(_("             SSL Cert:"), uri.ssl_cert)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2438
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2439
                        if not c:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2440
                                return retcode
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2441
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2442
                        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
  2443
                                retcode = EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2444
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2445
                        for e in c["errors"]:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2446
                                logger.error("\n" + str(e) + "\n")
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2447
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2448
                        if c["valid"]:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2449
                                msg(_(" Cert. Effective Date:"),
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2450
                                    c["info"]["effective"])
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2451
                                msg(_("Cert. Expiration Date:"),
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2452
                                    c["info"]["expiration"])
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2453
                        return retcode
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2454
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2455
                def display_repository(r):
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2456
                        retcode = 0
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2457
                        for uri in r.origins:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2458
                                msg(_("           Origin URI:"), uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2459
                                rval = display_ssl_info(uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2460
                                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
  2461
                                        retcode = EXIT_PARTIAL
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2462
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2463
                        for uri in r.mirrors:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2464
                                msg(_("           Mirror URI:"), uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2465
                                rval = display_ssl_info(uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2466
                                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
  2467
                                        retcode = EXIT_PARTIAL
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2468
                        return retcode
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2469
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2470
                for name in pargs:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2471
                        # detailed print
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2472
                        pub = api_inst.get_publisher(prefix=name, alias=name)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2473
                        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
  2474
                        if dt:
1150
2b8aaf0b0b4e 4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents: 1141
diff changeset
  2475
                                dt = dt.strftime("%c")
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  2476
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  2477
                        msg("")
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2478
                        msg(_("            Publisher:"), pub.prefix)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2479
                        msg(_("                Alias:"), pub.alias)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2480
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2481
                        for r in pub.repositories:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2482
                                rval = display_repository(r)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2483
                                if rval != 0:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2484
                                        # There was an error in displaying some
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2485
                                        # of the information about a repository.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2486
                                        # However, continue on.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2487
                                        retcode = rval
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2488
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2489
                        msg(_("          Client UUID:"), pub.client_uuid)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2490
                        msg(_("      Catalog Updated:"), dt)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2491
                        if pub.disabled:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2492
                                msg(_("              Enabled:"), _("No"))
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2493
                        else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2494
                                msg(_("              Enabled:"), _("Yes"))
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2495
        return retcode
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2496
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2497
def property_set(img, args):
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2498
        """pkg set-property propname propvalue"""
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2499
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2500
        # ensure no options are passed in
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2501
        opts, pargs = getopt.getopt(args, "")
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2502
        try:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2503
                propname, propvalue = pargs
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2504
        except ValueError:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2505
                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
  2506
                    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
  2507
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2508
        if propname == "preferred-publisher":
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2509
                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
  2510
                    "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
  2511
                return EXIT_OOPS
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2512
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2513
        try:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2514
                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
  2515
        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
  2516
                # 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
  2517
                # 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
  2518
                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
  2519
                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
  2520
        return EXIT_OK
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2521
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2522
def property_unset(img, args):
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2523
        """pkg unset-property propname ..."""
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
        # is this an existing property in our image?
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2526
        # if so, delete it
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2527
        # if not, error
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2528
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2529
        # ensure no options are passed in
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2530
        opts, pargs = getopt.getopt(args, "")
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2531
        if not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2532
                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
  2533
                    cmd="unset-property")
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2534
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2535
        for p in pargs:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2536
                if p == "preferred-publisher":
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2537
                        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
  2538
                            "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
  2539
                        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
  2540
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2541
                try:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2542
                        img.delete_property(p)
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2543
                except KeyError:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2544
                        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
  2545
                            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
  2546
                        return EXIT_OOPS
709
cfb249e57576 2393 traceback when attempting to change client settings without permission
Brock Pytlik <bpytlik@sun.com>
parents: 706
diff changeset
  2547
                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
  2548
                        # 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
  2549
                        # 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
  2550
                        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
  2551
                        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
  2552
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2553
        return EXIT_OK
551
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
def property_list(img, args):
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2556
        """pkg property [-H] [propname ...]"""
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2557
        omit_headers = False
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2558
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2559
        opts, pargs = getopt.getopt(args, "H")
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2560
        for opt, arg in opts:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2561
                if opt == "-H":
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2562
                        omit_headers = True
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2563
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2564
        for p in pargs:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2565
                if not img.has_property(p):
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2566
                        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
  2567
                        return EXIT_OOPS
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2568
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2569
        if not pargs:
611
e2a9af3f81ab 4131 "pkg property" prints only headers
Tom Mueller <Tom.Mueller@sun.com>
parents: 607
diff changeset
  2570
                pargs = list(img.properties())
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2571
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2572
        width = max(max([len(p) for p in pargs]), 8)
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2573
        fmt = "%%-%ss %%s" % width
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2574
        if not omit_headers:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2575
                msg(fmt % ("PROPERTY", "VALUE"))
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2576
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2577
        for p in pargs:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2578
                msg(fmt % (p, img.get_property(p)))
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  2579
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2580
        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
  2581
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2582
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
  2583
        """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
  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
        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
  2586
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2587
        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
  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
        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
  2590
                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
  2591
                        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
  2592
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2593
        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
  2594
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2595
        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
  2596
                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
  2597
                        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
  2598
                        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
  2599
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2600
        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
  2601
                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
  2602
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2603
        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
  2604
        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
  2605
        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
  2606
                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
  2607
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2608
        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
  2609
                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
  2610
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2611
        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
  2612
        
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2613
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
  2614
        """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
  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
        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
  2617
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2618
        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
  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
        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
  2621
                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
  2622
                        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
  2623
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2624
        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
  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
        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
  2627
                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
  2628
                        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
  2629
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2630
        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
  2631
                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
  2632
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2633
        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
  2634
                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
  2635
        else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2636
                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
  2637
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2638
        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
  2639
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2640
        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
  2641
                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
  2642
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2643
        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
  2644
                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
  2645
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2646
        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
  2647
       
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2648
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
  2649
        """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
  2650
        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
  2651
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
  2652
        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
  2653
        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
  2654
        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
  2655
        kernel statistics or device information."""
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  2656
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2657
        force = False
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
  2658
        imgtype = image.IMG_USER
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
  2659
        is_zone = False
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2660
        mirrors = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2661
        origins = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2662
        pub_name = None
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2663
        refresh_catalogs = True
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2664
        ssl_key = None
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2665
        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
  2666
        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
  2667
        facets = pkg.facet.Facets()
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  2668
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2669
        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
  2670
            ["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
  2671
                "mirror=", "origin=", "publisher=", "no-refresh", "variant="])
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  2672
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  2673
        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
  2674
                # -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
  2675
                if opt in ("-a", "-p", "--publisher"):
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2676
                        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
  2677
                        try:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2678
                                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
  2679
                        except ValueError:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2680
                                pub_name = None
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2681
                                pub_url = None
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2682
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2683
                        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
  2684
                                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
  2685
                                    "form '<prefix>=<url>'."),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2686
                                    cmd="image-create")
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2687
                        origins.add(pub_url)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2688
                elif opt == "-c":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2689
                        ssl_cert = arg
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2690
                elif opt == "-f" or opt == "--force":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2691
                        force = True
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2692
                elif opt in ("-g", "--origin"):
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2693
                        origins.add(arg)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2694
                elif opt == "-k":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2695
                        ssl_key = arg
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2696
                elif opt in ("-m", "--mirror"):
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2697
                        mirrors.add(arg)
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2698
                elif opt == "-z" or opt == "--zone":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2699
                        is_zone = True
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2700
                        imgtype = image.IMG_ENTIRE
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2701
                elif opt == "-F" or opt == "--full":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2702
                        imgtype = imgtypes.IMG_ENTIRE
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2703
                elif opt == "-P" or opt == "--partial":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2704
                        imgtype = imgtypes.IMG_PARTIAL
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2705
                elif opt == "-U" or opt == "--user":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2706
                        imgtype = imgtypes.IMG_USER
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2707
                elif opt == "--no-refresh":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2708
                        refresh_catalogs = False
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2709
                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
  2710
                        try:
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2711
                                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
  2712
                                if not v_name.startswith("variant."):
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  2713
                                        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
  2714
                        except ValueError:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2715
                                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
  2716
                                    "form '<name>=<value>'."),
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2717
                                    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
  2718
                        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
  2719
                if opt == "--facet":
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2720
                        allow = { "TRUE":True, "FALSE":False }
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2721
                        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
  2722
                        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
  2723
                                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
  2724
                        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
  2725
                                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
  2726
                                    "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
  2727
                                    cmd="image-create")
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2728
                        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
  2729
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  2730
        if len(pargs) != 1:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2731
                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
  2732
                    cmd="image-create")
1111
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2733
        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
  2734
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2735
        if ssl_key:
1111
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2736
                # 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
  2737
                if is_zone:
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2738
                        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
  2739
                            ssl_key)
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2740
                else:
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2741
                        ssl_key = os.path.abspath(ssl_key)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2742
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2743
        if ssl_cert:
1111
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2744
                # 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
  2745
                if is_zone:
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2746
                        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
  2747
                            ssl_cert)
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2748
                else:
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  2749
                        ssl_cert = os.path.abspath(ssl_cert)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  2750
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2751
        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
  2752
                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
  2753
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2754
        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
  2755
                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
  2756
                    "'<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
  2757
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2758
        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
  2759
                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
  2760
                        % 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
  2761
                return EXIT_OOPS
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2762
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2763
        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
  2764
                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
  2765
                    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
  2766
                return EXIT_OOPS
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  2767
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2768
        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
  2769
        try:
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2770
                progtrack = get_tracker()
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2771
                __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
  2772
                    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
  2773
                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
  2774
                    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
  2775
                    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
  2776
                    variants=variants, mirrors=mirrors)
1472
c50eb141435a 12128 client should pipeline manifest retrieval
johansen <johansen@sun.com>
parents: 1463
diff changeset
  2777
                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
  2778
        except OSError, e:
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  2779
                # 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
  2780
                img.cleanup_downloads()
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2781
                logger.error("\n")
1063
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  2782
                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
  2783
                    { "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
  2784
                    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
  2785
                return EXIT_OOPS
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2786
        except api_errors.PublisherError, e:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  2787
                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
  2788
                return EXIT_OOPS
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  2789
        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
  2790
                # 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
  2791
                img.cleanup_downloads()
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2792
                logger.error("")
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2793
                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
  2794
                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
  2795
        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
  2796
                # 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
  2797
                img.cleanup_downloads()
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2798
                logger.error("\n")
1063
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  2799
                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
  2800
                    "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
  2801
                    "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
  2802
                    "\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
  2803
                    { "pub_url": pub_url, "error": e },
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2804
                    cmd="image-create")
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2805
                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
  2806
                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
  2807
        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
  2808
                # 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
  2809
                img.cleanup_downloads()
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2810
                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
  2811
                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
  2812
                        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
  2813
                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
  2814
                        return EXIT_PARTIAL
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2815
        except api_errors.ImageCreationException, e:
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  2816
                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
  2817
                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
  2818
        return EXIT_OK
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  2819
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2820
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
  2821
        """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
  2822
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  2823
        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
  2824
        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
  2825
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  2826
        if pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2827
                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
  2828
                    " ".join(pargs), cmd="rebuild-index")
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2829
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2830
        api_inst = __api_alloc(img)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2831
        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
  2832
                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
  2833
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  2834
        try:
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2835
                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
  2836
        except api_errors.CorruptedIndexException:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2837
                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
  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.ProblematicPermissionsIndexException, 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) + PROBLEMATIC_PERMISSIONS_ERROR_MESSAGE,
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2841
                    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
  2842
                return EXIT_OOPS
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2843
        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
  2844
                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
  2845
                return EXIT_OOPS
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2846
        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
  2847
                return EXIT_OK
539
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
def history_list(img, args):
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2850
        """Display history about the current image.
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
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2853
        omit_headers = False
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2854
        long_format = False
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2855
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2856
        opts, pargs = getopt.getopt(args, "Hl")
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2857
        for opt, arg in opts:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2858
                if opt == "-H":
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2859
                        omit_headers = True
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2860
                elif opt == "-l":
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2861
                        long_format = True
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2862
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2863
        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
  2864
                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
  2865
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2866
        if not long_format:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2867
                if not omit_headers:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2868
                        msg("%-19s %-25s %-15s %s" % (_("TIME"),
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2869
                            _("OPERATION"), _("CLIENT"), _("OUTCOME")))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2870
732
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2871
        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
  2872
                # 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
  2873
                return EXIT_OK
732
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2874
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2875
        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
  2876
                # Load the history entry.
732
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2877
                try:
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2878
                        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
  2879
                            filename=entry)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  2880
                except api_errors.PermissionsException, e:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  2881
                        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
  2882
                        return EXIT_OOPS
732
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2883
                except history.HistoryLoadException, e:
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2884
                        if e.parse_failure:
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2885
                                # Ignore corrupt entries.
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2886
                                continue
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  2887
                        raise
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2888
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2889
                # 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
  2890
                # output format.
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2891
                start_time = misc.timestamp_to_time(
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2892
                    he.operation_start_time)
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2893
                start_time = datetime.datetime.fromtimestamp(
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2894
                    start_time).isoformat()
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2895
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2896
                res = he.operation_result
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2897
                if len(res) > 1:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2898
                        outcome = "%s (%s)" % (_(res[0]), _(res[1]))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2899
                else:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2900
                        outcome = _(res[0])
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
                if long_format:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2903
                        data = []
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2904
                        data.append(("Operation", he.operation_name))
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(("Outcome", outcome))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2907
                        data.append(("Client", he.client_name))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2908
                        data.append(("Version", he.client_version))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2909
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2910
                        data.append(("User", "%s (%s)" % \
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2911
                            (he.operation_username, he.operation_userid)))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2912
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2913
                        data.append(("Start Time", start_time))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2914
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2915
                        end_time = misc.timestamp_to_time(
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2916
                            he.operation_end_time)
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2917
                        end_time = datetime.datetime.fromtimestamp(
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2918
                            end_time).isoformat()
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2919
                        data.append(("End Time", end_time))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2920
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2921
                        data.append(("Command", " ".join(he.client_args)))
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_start_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(("Start 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
                        state = he.operation_end_state
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2928
                        if state:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2929
                                data.append(("End State", "\n" + state))
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
                        errors = "\n".join(he.operation_errors)
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2932
                        if errors:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2933
                                data.append(("Errors", "\n" + errors))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2934
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2935
                        for field, value in data:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2936
                                msg("%15s: %s" % (_(field), value))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2937
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2938
                        # Separate log entries with a blank line.
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2939
                        msg("")
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2940
                else:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2941
                        msg("%-19s %-25s %-15s %s" % (start_time,
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2942
                            he.operation_name, he.client_name, outcome))
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2943
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2944
        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
  2945
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2946
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
  2947
        """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
  2948
        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
  2949
        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
  2950
                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
  2951
        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
  2952
                
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2953
def print_proxy_config():
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2954
        """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
  2955
        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
  2956
        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
  2957
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2958
        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
  2959
        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
  2960
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2961
        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
  2962
                return
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2963
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2964
        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
  2965
            " environment:\n"))
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2966
        if http_proxy:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2967
                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
  2968
        if https_proxy:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  2969
                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
  2970
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  2971
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2972
# To allow exception handler access to the image.
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2973
__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
  2974
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
  2975
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
  2976
        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
  2977
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2978
        global __img
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  2979
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  2980
        try:
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  2981
                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
  2982
                    ["debug=", "help"])
52
d7c452ef7ae1 Sanitize getopt exception handling
Danek Duvall <danek.duvall@sun.com>
parents: 50
diff changeset
  2983
        except getopt.GetoptError, e:
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  2984
                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
  2985
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  2986
        show_usage = False
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  2987
        for opt, arg in opts:
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  2988
                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
  2989
                        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
  2990
                                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
  2991
                                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
  2992
                        else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2993
                                try:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2994
                                        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
  2995
                                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
  2996
                                        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
  2997
                                            "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
  2998
                                            "arg": arg })
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  2999
                        DebugValues.set_value(key, value)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  3000
                elif opt == "-R":
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  3001
                        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
  3002
                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
  3003
                        show_usage = True
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  3004
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  3005
        subcommand = None
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  3006
        if pargs:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  3007
                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
  3008
                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
  3009
                        show_usage = True
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  3010
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  3011
        if show_usage:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3012
                usage(retcode=0, full=True)
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  3013
        elif not subcommand:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3014
                usage(_("no subcommand specified"))
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  3015
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  3016
        # 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
  3017
        # 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
  3018
        # 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
  3019
        # 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
  3020
        # code the value here, at least for now.
49cd5492effc 9996 Exception thrown after cancel of install
johansen <johansen@sun.com>
parents: 1191
diff changeset
  3021
        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
  3022
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
  3023
        if subcommand == "image-create":
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  3024
                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
  3025
                        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
  3026
                              subcommand)
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  3027
                try:
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  3028
                        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
  3029
                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
  3030
                        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
  3031
                                usage(full=True)
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3032
                        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
  3033
                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
  3034
        elif subcommand == "version":
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  3035
                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
  3036
                        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
  3037
                              subcommand)
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  3038
                if pargs:
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  3039
                        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
  3040
                            "('%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
  3041
                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
  3042
                return EXIT_OK
50
bfcb1661f019 basic image and package plans
Stephen Hahn <sch@sun.com>
parents: 48
diff changeset
  3043
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3044
        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
  3045
        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
  3046
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
  3047
        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
  3048
                try:
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
  3049
                        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
  3050
                        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
  3051
                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
  3052
                        try:
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3053
                                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
  3054
                                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
  3055
                        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
  3056
                                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
  3057
                                        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
  3058
                                        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
  3059
                                                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
                                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
  3061
                                        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
  3062
888fa3187f68 2964 better error handling may be needed when working directory does not exist
Danek Duvall <danek.duvall@sun.com>
parents: 499
diff changeset
  3063
        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
  3064
                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
  3065
                    "$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
  3066
                    "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
  3067
                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
  3068
ba3a4af65479 add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents: 60
diff changeset
  3069
        try:
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  3070
                __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
  3071
        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
  3072
                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
  3073
                        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
  3074
                        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
  3075
                                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
  3076
                        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
  3077
                else:
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  3078
                        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
  3079
                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
  3080
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3081
        cmds = {
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3082
                "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
  3083
                "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
  3084
                "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
  3085
                "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
  3086
                "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
  3087
                "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
  3088
                "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
  3089
                "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
  3090
                "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
  3091
                "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
  3092
                "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
  3093
                "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
  3094
                "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
  3095
                "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
  3096
                "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
  3097
                "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
  3098
                "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
  3099
                "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
  3100
                "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
  3101
                "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
  3102
                "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
  3103
                "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
  3104
                "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
  3105
                "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
  3106
                "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
  3107
                "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
  3108
                "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
  3109
                "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
  3110
               }
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3111
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3112
        func = cmds.get(subcommand, None)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3113
        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
  3114
                usage(_("unknown subcommand '%s'") % subcommand)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3115
        try:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3116
                return func(img, pargs)
192
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3117
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3118
        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
  3119
                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
  3120
                        usage(full=True)
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3121
                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
  3122
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3123
#
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  3124
# 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
  3125
# 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
  3126
#
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
  3127
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
  3128
        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
  3129
            "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
  3130
            "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
  3131
            "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
  3132
            "'%s'.") % pkg.VERSION
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  3133
        try:
1035
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3134
                # 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
  3135
                # 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
  3136
                # 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
  3137
                # 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
  3138
                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
  3139
                        __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
  3140
                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
  3141
                        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
  3142
                            __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
  3143
                                raise
1035
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3144
                        if __img:
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  3145
                                __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
  3146
                        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
  3147
                        __ret = EXIT_OOPS
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3148
        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
  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_FAILED_UNKNOWN)
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3151
                raise __e
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  3152
        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
  3153
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3154
                        __img.history.abort(RESULT_CANCELED)
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3155
                # 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
  3156
                # 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
  3157
                __ret = EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3158
        except api_errors.CertificateError, __e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3159
                if __img:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3160
                        __img.history.abort(RESULT_FAILED_CONFIGURATION)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3161
                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
  3162
                __ret = EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3163
        except api_errors.PublisherError, __e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3164
                if __img:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3165
                        __img.history.abort(RESULT_FAILED_BAD_REQUEST)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3166
                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
  3167
                __ret = EXIT_OOPS
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  3168
        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
  3169
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3170
                        __img.history.abort(RESULT_FAILED_TRANSPORT)
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3171
                logger.error(_("\nErrors were encountered while attempting "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3172
                    "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
  3173
                    "operation."))
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3174
                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
  3175
                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
  3176
                __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
  3177
        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
  3178
                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
  3179
                        __img.history.abort(RESULT_FAILED_TRANSPORT)
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3180
                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
  3181
                    "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
  3182
                    "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
  3183
                    "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
  3184
                    "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
  3185
                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
  3186
                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
  3187
                __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
  3188
        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
  3189
                # 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
  3190
                # 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
  3191
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3192
                        __img.history.clear()
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3193
                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
  3194
                    "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
  3195
                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
  3196
                __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
  3197
        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
  3198
                # 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
  3199
                # 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
  3200
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3201
                        __img.history.clear()
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3202
                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
  3203
                    "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
  3204
                    "history."))
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3205
                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
  3206
                __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
  3207
        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
  3208
                # 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
  3209
                # 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
  3210
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3211
                        __img.history.clear()
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3212
                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
  3213
                    "client history."))
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3214
                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
  3215
                __ret = EXIT_OOPS
652
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3216
        except api_errors.VersionException, __e:
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3217
                if __img:
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3218
                        __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
  3219
                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
  3220
                    "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
  3221
                    "%(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
  3222
                    {'client': __e.received_version,
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3223
                     'api': __e.expected_version
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  3224
                    })
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3225
                __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
  3226
        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
  3227
                __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
  3228
        except api_errors.WrapIndexingException, __e:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  3229
                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
  3230
                        raise __e.wrapped
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  3231
                __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
  3232
                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
  3233
                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
  3234
                        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
  3235
2e5bb564a9e2 8948 search errors should make it clear that the rest of the command worked
Brock Pytlik <bpytlik@sun.com>
parents: 1280
diff changeset
  3236
                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
  3237
                    "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
  3238
                    "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
  3239
                error(s)
1335
3dde2385d05c 516 Clean up traceback for installs to read-only filesystems
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents: 1328
diff changeset
  3240
        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
  3241
                __ret = EXIT_OOPS
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  3242
        except:
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3243
                if __img:
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  3244
                        __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
  3245
                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
  3246
                        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
  3247
                        error(traceback_str)
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3248
                __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
  3249
        return __ret
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3250
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
  3251
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
  3252
        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
  3253
        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
  3254
        __retval = handle_errors(main_func)
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3255
        try:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3256
                logging.shutdown()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3257
        except IOError:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3258
                # Ignore python's spurious pipe problems.
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3259
                pass
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  3260
        sys.exit(__retval)