src/client.py
author Jon Tibble <meths@btinternet.com>
Sat, 06 Oct 2012 16:02:55 +0100
branchoi_151a
changeset 2587 1ff317412fe4
parent 2546 2b1fa6a54b5e
permissions -rwxr-xr-x
Added tag oi_151a_prestable7 for changeset 9d5d93fa673b
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
#
1889
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
    22
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
    23
#
2543
b1a6b0e4c685 17653 zone install fails with pkg.oracle.com/solaris/support set
Tim Foster <tim.s.foster@oracle.com>
parents: 2537
diff changeset
    24
# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
1889
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
    25
#
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
    26
1
3f1f244aa967 begin adding design/implementation documents
sch@rosseau
parents: 0
diff changeset
    27
#
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 14
diff changeset
    28
# pkg - package system client utility
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 14
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
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    45
try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    46
        import calendar
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    47
        import collections
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    48
        import datetime
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    49
        import errno
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    50
        import fnmatch
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    51
        import getopt
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    52
        import gettext
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    53
        import itertools
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    54
        import simplejson as json
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    55
        import locale
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    56
        import logging
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    57
        import os
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    58
        import socket
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    59
        import sys
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    60
        import textwrap
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    61
        import time
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    62
        import traceback
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    63
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    64
        import pkg
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    65
        import pkg.actions as actions
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    66
        import pkg.client.api as api
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    67
        import pkg.client.api_errors as api_errors
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    68
        import pkg.client.bootenv as bootenv
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    69
        import pkg.client.progress as progress
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    70
        import pkg.client.linkedimage as li
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    71
        import pkg.client.publisher as publisher
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    72
        import pkg.fmri as fmri
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    73
        import pkg.misc as misc
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    74
        import pkg.version as version
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    75
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    76
        from pkg.client import global_settings
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    77
        from pkg.client.api import (IMG_TYPE_ENTIRE, IMG_TYPE_PARTIAL,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    78
            IMG_TYPE_USER, RESULT_CANCELED, RESULT_FAILED_BAD_REQUEST,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    79
            RESULT_FAILED_CONFIGURATION, RESULT_FAILED_CONSTRAINED,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    80
            RESULT_FAILED_LOCKED, RESULT_FAILED_STORAGE, RESULT_NOTHING_TO_DO,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    81
            RESULT_SUCCEEDED, RESULT_FAILED_TRANSPORT, RESULT_FAILED_UNKNOWN,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    82
            RESULT_FAILED_OUTOFMEMORY)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    83
        from pkg.client.debugvalues import DebugValues
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    84
        from pkg.client.pkgdefs import *
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    85
        from pkg.misc import EmptyI, msg, PipeError
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    86
except KeyboardInterrupt:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    87
        import sys
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    88
        sys.exit(1)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    89
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
    90
CLIENT_API_VERSION = 70
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
    91
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
    92
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
    93
JUST_UNKNOWN = 0
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
    94
JUST_LEFT = -1
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
    95
JUST_RIGHT = 1
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
    96
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
    97
logger = global_settings.logger
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
    98
1563
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
    99
valid_special_attrs = ["action.hash", "action.key", "action.name", "action.raw"]
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
   100
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
   101
valid_special_prefixes = ["action."]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
   102
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   103
def format_update_error(e):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   104
        # This message is displayed to the user whenever an
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   105
        # ImageFormatUpdateNeeded exception is encountered.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   106
        logger.error("\n")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   107
        logger.error(str(e))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   108
        logger.error(_("To continue, execute 'pkg update-format' as a "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   109
            "privileged user and then try again.  Please note that updating "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   110
            "the format of the image will render it unusable with older "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   111
            "versions of the pkg(5) system."))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   112
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   113
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
   114
        """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
   115
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   116
        if not isinstance(text, basestring):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   117
                # Assume it's an object that can be stringified.
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   118
                text = str(text)
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   119
497
534694fcd5b7 2678 Toplevel traceback handler should emit pkg version id
Danek Duvall <danek.duvall@sun.com>
parents: 496
diff changeset
   120
        # 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
   121
        # *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
   122
        text_nows = text.lstrip()
534694fcd5b7 2678 Toplevel traceback handler should emit pkg version id
Danek Duvall <danek.duvall@sun.com>
parents: 496
diff changeset
   123
        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
   124
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   125
        if cmd:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   126
                text_nows = "%s: %s" % (cmd, text_nows)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   127
                pkg_cmd = "pkg "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   128
        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   129
                pkg_cmd = "pkg: "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   130
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   131
        # 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
   132
        # program name on all platforms.
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   133
        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
   134
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   135
def usage(usage_error=None, cmd=None, retcode=EXIT_BADOPT, 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
   136
        """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
   137
            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
   138
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   139
        if usage_error:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   140
                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
   141
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   142
        basic_usage = {}
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   143
        adv_usage = {}
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   144
        priv_usage = {}
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   145
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   146
        basic_cmds = ["refresh", "install", "uninstall", "update", "list",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   147
            "version"]
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   148
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   149
        basic_usage["install"] = _(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   150
            "[-nvq] [-g path_or_uri ...] [--accept]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   151
            "            [--licenses] [--no-be-activate] [--no-index] [--no-refresh]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   152
            "            [--no-backup-be | --require-backup-be] [--backup-be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   153
            "            [--deny-new-be | --require-new-be] [--be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   154
            "            [--reject pkg_fmri_pattern ... ] pkg_fmri_pattern ...")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   155
        basic_usage["uninstall"] = _(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   156
            "[-nvq] [--no-be-activate] [--no-index]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   157
            "            [--no-backup-be | --require-backup-be] [--backup-be-name]\n"
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   158
            "            [--deny-new-be | --require-new-be] [--be-name name]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   159
            "            pkg_fmri_pattern ...")
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
   160
        basic_usage["update"] = _(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   161
            "[-fnvq] [-g path_or_uri ...] [--accept]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   162
            "            [--licenses] [--no-be-activate] [--no-index] [--no-refresh]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   163
            "            [--no-backup-be | --require-backup-be] [--backup-be-name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   164
            "            [--deny-new-be | --require-new-be] [--be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   165
            "            [--reject pkg_fmri_pattern ...] [pkg_fmri_pattern ...]")
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   166
        basic_usage["list"] = _(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   167
            "[-Hafnsuv] [-g path_or_uri ...] [--no-refresh]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   168
            "            [pkg_fmri_pattern ...]")
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   169
        basic_usage["refresh"] = _("[--full] [publisher ...]")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   170
        basic_usage["version"] = ""
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   171
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   172
        advanced_cmds = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   173
            "info",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   174
            "contents",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   175
            "search",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   176
            "",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   177
            "verify",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   178
            "fix",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   179
            "revert",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   180
            "",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   181
            "mediator",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   182
            "set-mediator",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   183
            "unset-mediator",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   184
            "",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   185
            "variant",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   186
            "change-variant",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   187
            "",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   188
            "facet",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   189
            "change-facet",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   190
            "",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   191
            "avoid",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   192
            "unavoid",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   193
            "",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   194
            "freeze",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   195
            "unfreeze",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   196
            "",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   197
            "property",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   198
            "set-property",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   199
            "add-property-value",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   200
            "remove-property-value",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   201
            "unset-property",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   202
            "",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   203
            "publisher",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   204
            "set-publisher",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   205
            "unset-publisher",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   206
            "",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   207
            "history",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   208
            "purge-history",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   209
            "",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   210
            "rebuild-index",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   211
            "update-format",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   212
            "image-create",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   213
        ]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   214
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   215
        adv_usage["info"] = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   216
            _("[-lr] [-g path_or_uri ...] [--license] [pkg_fmri_pattern ...]")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   217
        adv_usage["contents"] = _(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   218
            "[-Hmr] [-a attribute=pattern ...] [-g path_or_uri ...]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   219
            "            [-o attribute ...] [-s sort_key] [-t action_type ...]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   220
            "            [pkg_fmri_pattern ...]")
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   221
        adv_usage["search"] = _(
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   222
            "[-HIaflpr] [-o attribute ...] [-s repo_uri] query")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   223
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   224
        adv_usage["verify"] = _("[-Hqv] [pkg_fmri_pattern ...]")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   225
        adv_usage["fix"] = _("[--accept] [--licenses] [pkg_fmri_pattern ...]")
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   226
        adv_usage["revert"] = _(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   227
            "[-nv] [--no-be-activate]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   228
            "            [--no-backup-be | --require-backup-be] [--backup-be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   229
            "            [--deny-new-be | --require-new-be] [--be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   230
            "            (--tagged tag-name ... | path-to-file ...)")
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   231
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   232
        adv_usage["image-create"] = _(
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   233
            "[-FPUfz] [--force] [--full|--partial|--user] [--zone]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   234
            "            [-k ssl_key] [-c ssl_cert] [--no-refresh]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   235
            "            [--variant <variant_spec>=<instance> ...]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   236
            "            [-g uri|--origin=uri ...] [-m uri|--mirror=uri ...]\n"
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   237
            "            [--facet <facet_spec>=(True|False) ...]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   238
            "            [(-p|--publisher) [<name>=]<repo_uri>] dir")
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   239
        adv_usage["change-variant"] = _(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   240
            "[-nvq] [-g path_or_uri ...]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   241
            "            [--accept] [--licenses] [--no-be-activate]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   242
            "            [--no-backup-be | --require-backup-be] [--backup-be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   243
            "            [--deny-new-be | --require-new-be] [--be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   244
            "            <variant_spec>=<instance> ...")
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   245
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   246
        adv_usage["change-facet"] = _(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   247
            "[-nvq] [-g path_or_uri ...]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   248
            "            [--accept] [--licenses] [--no-be-activate]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   249
            "            [--no-backup-be | --require-backup-be] [--backup-be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   250
            "            [--deny-new-be | --require-new-be] [--be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   251
            "            <facet_spec>=[True|False|None] ...")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   252
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   253
        adv_usage["mediator"] = _("[-aH] [-F format] [<mediator> ...]")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   254
        adv_usage["set-mediator"] = _(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   255
            "[-nv] [-I <implementation>]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   256
            "            [-V <version>] [--no-be-activate]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   257
            "            [--no-backup-be | --require-backup-be] [--backup-be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   258
            "            [--deny-new-be | --require-new-be] [--be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   259
            "            <mediator> ...")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   260
        adv_usage["unset-mediator"] = _("[-nvIV] [--no-be-activate]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   261
            "            [--no-backup-be | --require-backup-be] [--backup-be-name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   262
            "            [--deny-new-be | --require-new-be] [--be-name name]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   263
            "            <mediator> ...")
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   264
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   265
        adv_usage["variant"] = _("[-H] [<variant_spec>]")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   266
        adv_usage["facet"] = ("[-H] [<facet_spec>]")
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   267
        adv_usage["avoid"] = _("[pkg_fmri_pattern] ...")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   268
        adv_usage["unavoid"] = _("[pkg_fmri_pattern] ...")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   269
        adv_usage["freeze"] = _("[-n] [-c reason] [pkg_fmri_pattern] ...")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   270
        adv_usage["unfreeze"] = _("[-n] [pkg_name_pattern] ...")
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   271
        adv_usage["set-property"] = _("propname propvalue")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   272
        adv_usage["add-property-value"] = _("propname propvalue")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   273
        adv_usage["remove-property-value"] = _("propname propvalue")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   274
        adv_usage["unset-property"] = _("propname ...")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   275
        adv_usage["property"] = _("[-H] [propname ...]")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   276
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   277
        adv_usage["set-publisher"] = _("[-Ped] [-k ssl_key] [-c ssl_cert]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   278
            "            [-g origin_to_add|--add-origin=origin_to_add ...]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   279
            "            [-G origin_to_remove|--remove-origin=origin_to_remove ...]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   280
            "            [-m mirror_to_add|--add-mirror=mirror_to_add ...]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   281
            "            [-M mirror_to_remove|--remove-mirror=mirror_to_remove ...]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   282
            "            [-p repo_uri] [--enable] [--disable] [--no-refresh]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   283
            "            [--reset-uuid] [--non-sticky] [--sticky]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   284
            "            [--search-after=publisher]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   285
            "            [--search-before=publisher]\n"
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   286
            "            [--search-first]\n"
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   287
            "            [--approve-ca-cert=path_to_CA]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   288
            "            [--revoke-ca-cert=hash_of_CA_to_revoke]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   289
            "            [--unset-ca-cert=hash_of_CA_to_unset]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   290
            "            [--set-property name_of_property=value]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   291
            "            [--add-property-value name_of_property=value_to_add]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   292
            "            [--remove-property-value name_of_property=value_to_remove]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   293
            "            [--unset-property name_of_property_to_delete]\n"
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   294
            "            [publisher]")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   295
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   296
        adv_usage["unset-publisher"] = _("publisher ...")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   297
        adv_usage["publisher"] = _("[-HPn] [publisher ...]")
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   298
        adv_usage["history"] = _("[-Hl] [-t [time|time-time],...] [-n number] [-o column,...]")
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   299
        adv_usage["purge-history"] = ""
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   300
        adv_usage["rebuild-index"] = ""
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   301
        adv_usage["update-format"] = ""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   302
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   303
        priv_usage["list-linked"] = _("-H")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   304
        priv_usage["attach-linked"] = _(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   305
            "[-fnvq] [--accept] [--licenses] [--no-index]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   306
            "            [--no-refresh] [--no-pkg-updates] [--linked-md-only]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   307
            "            [--allow-relink]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   308
            "            [--prop-linked <propname>=<propvalue> ...]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   309
            "            (-c|-p) <li-name> <dir>")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   310
        priv_usage["detach-linked"] = _(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   311
            "[-fnvq] [-a|-l <li-name>] [--linked-md-only]")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   312
        priv_usage["property-linked"] = _("[-H] [-l <li-name>] [propname ...]")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   313
        priv_usage["audit-linked"] = _("[-a|-l <li-name>]")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   314
        priv_usage["sync-linked"] = _(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   315
            "[-nvq] [--accept] [--licenses] [--no-index]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   316
            "            [--no-refresh] [--no-parent-sync] [--no-pkg-updates]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   317
            "            [--linked-md-only] [-a|-l <name>]")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   318
        priv_usage["set-property-linked"] = _(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   319
            "[-nvq] [--accept] [--licenses] [--no-index] [--no-refresh]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   320
            "            [--no-parent-sync] [--no-pkg-updates]\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   321
            "            [--linked-md-only] <propname>=<propvalue> ...")
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   322
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   323
        def print_cmds(cmd_list, cmd_dic):
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   324
                for cmd in cmd_list:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   325
                        if cmd is "":
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   326
                                logger.error("")
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   327
                        else:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   328
                                if cmd not in cmd_dic:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   329
                                        # this should never happen - callers
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   330
                                        # should check for valid subcommands
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   331
                                        # before calling usage(..)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   332
                                        raise ValueError(
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   333
                                            "Unable to find usage str for %s" %
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   334
                                            cmd)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   335
                                usage = cmd_dic[cmd]
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   336
                                if usage is not "":
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   337
                                        logger.error(
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   338
                                            "        pkg %(cmd)s %(usage)s" %
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   339
                                            locals())
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   340
                                else:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   341
                                        logger.error("        pkg %s" % cmd)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   342
        if not full and cmd:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   343
                if cmd not in priv_usage:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   344
                        logger.error(_("Usage:"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   345
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   346
                        logger.error(_("Private subcommand usage, options "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   347
                            "subject to change at any time:"))
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   348
                combined = {}
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   349
                combined.update(basic_usage)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   350
                combined.update(adv_usage)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   351
                combined.update(priv_usage)
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   352
                print_cmds([cmd], combined)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   353
                sys.exit(retcode)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   354
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   355
        elif not full:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   356
                # The full usage message isn't desired.
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   357
                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
   358
                sys.exit(retcode)
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   359
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   360
        logger.error(_("""\
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   361
Usage:
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   362
        pkg [options] command [cmd_options] [operands]
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   363
"""))
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   364
        logger.error(_("Basic subcommands:"))
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   365
        print_cmds(basic_cmds, basic_usage)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   366
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   367
        logger.error(_("\nAdvanced subcommands:"))
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   368
        print_cmds(advanced_cmds, adv_usage)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   369
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   370
        logger.error(_("""
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   371
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
   372
        -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
   373
        --help or -?
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   374
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   375
Environment:
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   376
        PKG_IMAGE"""))
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
   377
        sys.exit(retcode)
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   378
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   379
def get_fmri_args(api_inst, pargs, cmd=None):
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   380
        """ Convenience routine to check that input args are valid fmris. """
1835
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   381
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   382
        res = []
1774
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   383
        errors = []
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   384
        for pat, err, pfmri, matcher in api_inst.parse_fmri_patterns(pargs):
1835
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   385
                if not err:
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   386
                        res.append((pat, err, pfmri, matcher))
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   387
                        continue
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   388
                if isinstance(err, version.VersionError):
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   389
                        # For version errors, include the pattern so
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   390
                        # that the user understands why it failed.
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   391
                        errors.append("Illegal FMRI '%s': %s" % (pat,
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   392
                            err))
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   393
                else:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   394
                        # Including the pattern is redundant for other
1835
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   395
                        # exceptions.
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   396
                        errors.append(err)
1774
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   397
        if errors:
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   398
                error("\n".join(str(e) for e in errors), cmd=cmd)
1835
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   399
        return len(errors) == 0, res
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   400
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   401
def list_inventory(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   402
    li_parent_sync, list_all, list_installed_newest, list_newest,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   403
    list_upgradable, omit_headers, origins, refresh_catalogs, summary,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   404
    verbose):
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
   405
        """List packages."""
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
   406
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   407
        api_inst.progresstracker = get_tracker(quiet=omit_headers)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   408
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   409
        variants = False
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   410
        pkg_list = api.ImageInterface.LIST_INSTALLED
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   411
        if list_all:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   412
                variants = True
1639
d8c628675154 13800 pkg list option order can cause output differences
Shawn Walker <srw@sun.com>
parents: 1628
diff changeset
   413
                pkg_list = api.ImageInterface.LIST_ALL
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   414
        elif list_installed_newest:
1639
d8c628675154 13800 pkg list option order can cause output differences
Shawn Walker <srw@sun.com>
parents: 1628
diff changeset
   415
                pkg_list = api.ImageInterface.LIST_INSTALLED_NEWEST
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   416
        elif list_newest:
1639
d8c628675154 13800 pkg list option order can cause output differences
Shawn Walker <srw@sun.com>
parents: 1628
diff changeset
   417
                pkg_list = api.ImageInterface.LIST_NEWEST
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   418
        elif list_upgradable:
1639
d8c628675154 13800 pkg list option order can cause output differences
Shawn Walker <srw@sun.com>
parents: 1628
diff changeset
   419
                pkg_list = api.ImageInterface.LIST_UPGRADABLE
d8c628675154 13800 pkg list option order can cause output differences
Shawn Walker <srw@sun.com>
parents: 1628
diff changeset
   420
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   421
        if verbose:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   422
                fmt_str = "%-76s %s"
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   423
        elif summary:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   424
                fmt_str = "%-55s %s"
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   425
        else:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   426
                fmt_str = "%-49s %-26s %s"
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
   427
1835
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   428
        # Each pattern in pats can be a partial or full FMRI, so
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   429
        # extract the individual components.  These patterns are
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   430
        # transformed here so that partial failure can be detected
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   431
        # when more than one pattern is provided.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   432
        rval, res = get_fmri_args(api_inst, pargs, cmd=op)
1835
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   433
        if not rval:
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   434
                return EXIT_OOPS
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
   435
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   436
        api_inst.log_operation_start(op)
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   437
        if pkg_list != api_inst.LIST_INSTALLED and refresh_catalogs:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   438
                # If the user requested packages other than those
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   439
                # installed, ensure that a refresh is performed if
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   440
                # needed since the catalog may be out of date or
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   441
                # invalid as a result of publisher information
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   442
                # changing (such as an origin uri, etc.).
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   443
                try:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   444
                        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
   445
                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
   446
                        # 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
   447
                        # 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
   448
                        # 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
   449
                        # 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
   450
                        pass
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   451
                except api_errors.CatalogRefreshException, e:
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
   452
                        succeeded = display_catalog_failures(e,
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   453
                            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
   454
                        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
   455
                                # 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
   456
                                # 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
   457
                                # refreshed, abort.
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   458
                                return EXIT_OOPS
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
   459
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   460
                except:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   461
                        # Ignore the above error and just use what
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   462
                        # already exists.
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   463
                        pass
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   464
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   465
        state_map = [
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   466
            [(api.PackageInfo.INSTALLED, "i")],
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   467
            [(api.PackageInfo.FROZEN, "f")],
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   468
            [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   469
                (api.PackageInfo.OBSOLETE, "o"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   470
                (api.PackageInfo.RENAMED, "r")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   471
            ],
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   472
        ]
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   473
1774
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   474
        # Now get the matching list of packages and display it.
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   475
        found = False
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   476
        ppub = api_inst.get_highest_ranked_publisher()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   477
        if ppub:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   478
                ppub = ppub.prefix
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   479
        try:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   480
                res = api_inst.get_pkg_list(pkg_list, patterns=pargs,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   481
                    raise_unmatched=True, repos=origins, variants=variants)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   482
                for pt, summ, cats, states, attrs in res:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   483
                        found = True
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   484
                        if not omit_headers:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   485
                                if verbose:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   486
                                        msg(fmt_str %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   487
                                            ("FMRI", "IFO"))
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   488
                                elif summary:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   489
                                        msg(fmt_str %
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   490
                                            ("NAME (PUBLISHER)",
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   491
                                            "SUMMARY"))
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   492
                                else:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   493
                                        msg(fmt_str %
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   494
                                            ("NAME (PUBLISHER)",
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   495
                                            "VERSION", "IFO"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   496
                                omit_headers = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   497
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   498
                        status = ""
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   499
                        for sentry in state_map:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   500
                                for s, v in sentry:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   501
                                        if s in states:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   502
                                                st = v
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   503
                                                break
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   504
                                        else:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   505
                                                st = "-"
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   506
                                status += st
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   507
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   508
                        pub, stem, ver = pt
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   509
                        if pub == ppub:
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   510
                                spub = ""
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 306
diff changeset
   511
                        else:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   512
                                spub = " (" + pub + ")"
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   513
1774
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   514
                        # Display full FMRI for verbose case.
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   515
                        if verbose:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   516
                                pfmri = "pkg://%s/%s@%s" % (pub, stem, ver)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   517
                                msg(fmt_str % (pfmri, status))
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   518
                                continue
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   519
1774
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   520
                        # Display short FMRI + summary.
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   521
                        pf = stem + spub
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   522
                        if summary:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   523
                                if summ is None:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   524
                                        summ = ""
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   525
                                msg(fmt_str % (pf, summ))
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   526
                                continue
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   527
1774
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   528
                        # Default case; display short FMRI and version info.
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   529
                        sver = version.Version.split(ver)[-1]
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   530
                        msg(fmt_str % (pf, sver, status))
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   531
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   532
                if not found and not pargs:
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   533
                        if pkg_list == api_inst.LIST_INSTALLED:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   534
                                error(_("no packages installed"))
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   535
                                api_inst.log_operation_end(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   536
                                    result=RESULT_NOTHING_TO_DO)
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   537
                                return EXIT_OOPS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   538
                        elif pkg_list == api_inst.LIST_INSTALLED_NEWEST:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   539
                                error(_("no packages installed or available "
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   540
                                    "for installation"))
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   541
                                api_inst.log_operation_end(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   542
                                    result=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
   543
                                return EXIT_OOPS
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   544
                        elif pkg_list == api_inst.LIST_UPGRADABLE:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   545
                                error(_("no packages are installed or are "
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   546
                                    "installed and have newer versions "
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   547
                                    "available"))
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   548
                                api_inst.log_operation_end(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   549
                                    result=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
   550
                                return EXIT_OOPS
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   551
                        else:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   552
                                api_inst.log_operation_end(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   553
                                    result=RESULT_NOTHING_TO_DO)
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   554
                                return EXIT_OOPS
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
   555
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   556
                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
   557
                return EXIT_OK
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1752
diff changeset
   558
        except (api_errors.InvalidPackageErrors,
1859
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1857
diff changeset
   559
            api_errors.ActionExecutionError,
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1752
diff changeset
   560
            api_errors.PermissionsException), e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   561
                error(e, cmd=op)
1672
3a71439a03f3 13021 file manager exceptions should be api exceptions
Shawn Walker <srw@sun.com>
parents: 1658
diff changeset
   562
                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
   563
        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
   564
                if e.illegal:
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   565
                        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
   566
                                error(i)
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   567
                        api_inst.log_operation_end(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   568
                            result=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
   569
                        return EXIT_OOPS
219
f303ff108edd 60 'pkg status does_not_exist' throws a traceback
Richard Lowe <richlowe@richlowe.net>
parents: 217
diff changeset
   570
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   571
                if found:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   572
                        # Ensure a blank line is inserted after list for
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   573
                        # partial failure case.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   574
                        logger.error(" ")
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   575
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   576
                if pkg_list == api.ImageInterface.LIST_ALL or \
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   577
                    pkg_list == api.ImageInterface.LIST_NEWEST:
1853
8f8a90301844 15234 "pkg list -a" doesn't account for pattern versions
Shawn Walker <shawn.walker@oracle.com>
parents: 1843
diff changeset
   578
                        error(_("no packages matching '%s' known") % \
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   579
                            ", ".join(e.notfound), cmd=op)
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
   580
                elif pkg_list == api.ImageInterface.LIST_INSTALLED_NEWEST:
1853
8f8a90301844 15234 "pkg list -a" doesn't account for pattern versions
Shawn Walker <shawn.walker@oracle.com>
parents: 1843
diff changeset
   581
                        error(_("no packages matching '%s' allowed by "
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   582
                            "installed incorporations, or image variants that "
1853
8f8a90301844 15234 "pkg list -a" doesn't account for pattern versions
Shawn Walker <shawn.walker@oracle.com>
parents: 1843
diff changeset
   583
                            "are known or installed") % \
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   584
                            ", ".join(e.notfound), cmd=op)
1853
8f8a90301844 15234 "pkg list -a" doesn't account for pattern versions
Shawn Walker <shawn.walker@oracle.com>
parents: 1843
diff changeset
   585
                        logger.error("Use -af to allow all versions.")
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   586
                elif pkg_list == api.ImageInterface.LIST_UPGRADABLE:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   587
                        error(_("no packages matching '%s' are installed "
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   588
                            "and have newer versions available") % \
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   589
                            ", ".join(e.notfound), cmd=op)
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 523
diff changeset
   590
                else:
1853
8f8a90301844 15234 "pkg list -a" doesn't account for pattern versions
Shawn Walker <shawn.walker@oracle.com>
parents: 1843
diff changeset
   591
                        error(_("no packages matching '%s' installed") % \
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   592
                            ", ".join(e.notfound), cmd=op)
1774
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   593
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   594
                if found and e.notfound:
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   595
                        # Only some patterns matched.
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   596
                        api_inst.log_operation_end()
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
   597
                        return EXIT_PARTIAL
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   598
                api_inst.log_operation_end(result=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
   599
                return EXIT_OOPS
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
   600
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   601
def get_tracker(parsable_version=None, quiet=False, verbose=0):
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   602
        if quiet:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   603
                progresstracker = progress.QuietProgressTracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   604
                    parsable_version=parsable_version)
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   605
        else:
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   606
                try:
236
834909099dab Fancy command line progress was busted (fix for 373)
Dan Price <dp@eng.sun.com>
parents: 235
diff changeset
   607
                        progresstracker = \
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   608
                            progress.FancyUNIXProgressTracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   609
                                parsable_version=parsable_version, quiet=quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   610
                                verbose=verbose)
236
834909099dab Fancy command line progress was busted (fix for 373)
Dan Price <dp@eng.sun.com>
parents: 235
diff changeset
   611
                except progress.ProgressTrackerException:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   612
                        progresstracker = progress.CommandLineProgressTracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   613
                            parsable_version=parsable_version, quiet=quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   614
                            verbose=verbose)
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   615
        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
   616
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   617
def fix_image(api_inst, args):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   618
        progresstracker = get_tracker(quiet=False)
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   619
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   620
        opts, pargs = getopt.getopt(args, "", ["accept", "licenses"])
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   621
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   622
        accept = show_licenses = False
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   623
        for opt, arg in opts:
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   624
                if opt == "--accept":
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   625
                        accept = True
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   626
                elif opt == "--licenses":
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   627
                        show_licenses = True
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   628
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   629
        # XXX fix should be part of pkg.client.api
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   630
        found = False
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   631
        try:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   632
                res = api_inst.get_pkg_list(api.ImageInterface.LIST_INSTALLED,
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   633
                    patterns=pargs, raise_unmatched=True, return_fmris=True)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   634
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   635
                repairs = []
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   636
                for entry in res:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   637
                        pfmri = entry[0]
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   638
                        found = True
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   639
                        entries = []
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   640
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   641
                        # Since every entry returned by verify might not be
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   642
                        # something needing repair, the relevant information
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   643
                        # for each package must be accumulated first to find
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   644
                        # an overall success/failure result and then the
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   645
                        # related messages output for it.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   646
                        for act, errors, warnings, pinfo in img.verify(pfmri,
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   647
                            progresstracker, verbose=True, forever=True):
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   648
                                if not errors:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   649
                                        # Fix will silently skip packages that
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   650
                                        # don't have errors, but will display
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   651
                                        # the additional messages if there
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   652
                                        # is at least one error.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   653
                                        continue
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   654
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   655
                                # Informational messages are ignored by fix.
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
   656
                                entries.append((act, errors, warnings))
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   657
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   658
                        if not entries:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   659
                                # Nothing to fix for this package.
1685
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
   660
                                continue
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
   661
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   662
                        msg(_("Verifying: %(pkg_name)-50s %(result)7s") % {
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   663
                            "pkg_name": pfmri.get_pkg_stem(),
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   664
                            "result": _("ERROR") })
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   665
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   666
                        failed = []
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   667
                        for act, errors, warnings in entries:
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
   668
                                if act:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
   669
                                        failed.append(act)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
   670
                                        msg("\t%s" % act.distinguished_name())
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   671
                                for x in errors:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   672
                                        msg("\t\t%s" % x)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   673
                                for x in warnings:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   674
                                        msg("\t\t%s" % x)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   675
                        repairs.append((pfmri, failed))
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   676
        except api_errors.InventoryException, e:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   677
                if e.illegal:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   678
                        for i in e.illegal:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   679
                                error(i)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   680
                        return EXIT_OOPS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   681
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   682
                if found:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   683
                        # Ensure a blank line is inserted after list for
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   684
                        # partial failure case.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   685
                        logger.error(" ")
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   686
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   687
                error(_("no packages matching '%s' installed") % \
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   688
                    ", ".join(e.notfound), cmd="fix")
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   689
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   690
                if found and e.notfound:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   691
                        # Only some patterns matched.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   692
                        return EXIT_PARTIAL
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   693
                return EXIT_OOPS
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   694
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   695
        # 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
   696
        if repairs:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   697
                # Since BootEnv records the snapshot name in the image history,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   698
                # we need to manage our own history start/end & exception
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   699
                # handling rather then delegating to <Image>.repair()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   700
                api_inst.log_operation_start("fix")
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   701
                # Create a snapshot in case they want to roll back
1775
479930c429a8 14713 pkg fix can traceback for unprivileged users
Shawn Walker <srw@sun.com>
parents: 1774
diff changeset
   702
                success = False
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   703
                try:
2105
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2100
diff changeset
   704
                        be = bootenv.BootEnv(img)
834
f8b3396500b3 4883 import failure for non-sunos platforms due to missing pspawn
Tom Mueller <Tom.Mueller@sun.com>
parents: 792
diff changeset
   705
                        if be.exists():
1945
a4fc142accb2 16111 pkgdepend expands format strings before passing through gettext
Richard Lowe <richlowe@richlowe.net>
parents: 1937
diff changeset
   706
                                msg(_("Created ZFS snapshot: %s") %
a4fc142accb2 16111 pkgdepend expands format strings before passing through gettext
Richard Lowe <richlowe@richlowe.net>
parents: 1937
diff changeset
   707
                                    be.snapshot_name)
605
f2898e0c1179 4002 pkg verify appends unnecessary "Unexpected OSerror" message
Brad Hall <bhall@eng.sun.com>
parents: 598
diff changeset
   708
                except RuntimeError:
1814
240614230562 14948 fix must set bootenv for image object
Brock Pytlik <bpytlik@sun.com>
parents: 1807
diff changeset
   709
                        # Error is printed by the BootEnv call.
2105
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2100
diff changeset
   710
                        be = bootenv.BootEnvNull(img)
1814
240614230562 14948 fix must set bootenv for image object
Brock Pytlik <bpytlik@sun.com>
parents: 1807
diff changeset
   711
                img.bootenv = be
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1326
diff changeset
   712
                try:
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   713
                        success = img.repair(repairs, progresstracker,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   714
                            accept=accept, show_licenses=show_licenses,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   715
                            new_history_op=False)
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1752
diff changeset
   716
                except (api_errors.InvalidPlanError,
1775
479930c429a8 14713 pkg fix can traceback for unprivileged users
Shawn Walker <srw@sun.com>
parents: 1774
diff changeset
   717
                    api_errors.InvalidPackageErrors,
1859
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1857
diff changeset
   718
                    api_errors.ActionExecutionError,
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
   719
                    api_errors.PermissionsException,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
   720
                    api_errors.SigningException,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   721
                    api_errors.InvalidResourceLocation,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   722
                    api_errors.ConflictingActionErrors), e:
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
   723
                        logger.error(str(e))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   724
                except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   725
                        format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   726
                        api_inst.log_operation_end(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   727
                            result=RESULT_FAILED_CONFIGURATION)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   728
                        return EXIT_OOPS
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   729
                except api_errors.PlanLicenseErrors, e:
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   730
                        error(_("The following packages require their "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   731
                            "licenses to be accepted before they can be "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   732
                            "repaired: "))
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   733
                        logger.error(str(e))
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   734
                        logger.error(_("To indicate that you agree to and "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   735
                            "accept the terms of the licenses of the packages "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   736
                            "listed above, use the --accept option.  To "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   737
                            "display all of the related licenses, use the "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   738
                            "--licenses option."))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   739
                        api_inst.log_operation_end(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   740
                            result=RESULT_FAILED_CONSTRAINED)
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   741
                        return EXIT_LICENSE
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1326
diff changeset
   742
                except api_errors.RebootNeededOnLiveImageException:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   743
                        error(_("Requested \"fix\" operation would affect "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   744
                            "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
   745
                            "Please retry this operation on an alternate boot "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   746
                            "environment."))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   747
                        api_inst.log_operation_end(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   748
                            result=RESULT_FAILED_CONSTRAINED)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   749
                        return EXIT_NOTLIVE
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   750
                except Exception, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   751
                        api_inst.log_operation_end(error=e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   752
                        raise
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1326
diff changeset
   753
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
   754
                if not success:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   755
                        api_inst.log_operation_end(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   756
                            result=RESULT_FAILED_UNKNOWN)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   757
                        return EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   758
                api_inst.log_operation_end(result=RESULT_SUCCEEDED)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
   759
        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
   760
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   761
def verify_image(api_inst, args):
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   762
        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
   763
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   764
        quiet = False
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   765
        verbose = 0
443
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 442
diff changeset
   766
        # 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
   767
        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
   768
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   769
        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
   770
                if opt == "-H":
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   771
                        display_headers = False
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   772
                if opt == "-v":
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   773
                        verbose = verbose + 1
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   774
                elif opt == "-f":
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   775
                        forever = True
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   776
                elif opt == "-q":
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   777
                        quiet = True
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   778
                        display_headers = False
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   779
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 227
diff changeset
   780
        if verbose and quiet:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
   781
                usage(_("-v and -q may not be combined"), cmd="verify")
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   782
        if verbose > 2:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   783
                DebugValues.set_value("plan", "True")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   784
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   785
        # XXX verify should be part of pkg.client.api
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   786
        any_errors = False
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   787
        processed = False
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   788
        notfound = EmptyI
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   789
        progresstracker = get_tracker(quiet=quiet, verbose=verbose)
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   790
        try:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   791
                res = api_inst.get_pkg_list(api.ImageInterface.LIST_INSTALLED,
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   792
                    patterns=pargs, raise_unmatched=True, return_fmris=True)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   793
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   794
                for entry in res:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   795
                        pfmri = entry[0]
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   796
                        entries = []
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   797
                        result = _("OK")
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   798
                        failed = False
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   799
                        processed = True
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   800
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   801
                        # Since every entry returned by verify might not be
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   802
                        # something needing repair, the relevant information
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   803
                        # for each package must be accumulated first to find
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   804
                        # an overall success/failure result and then the
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   805
                        # related messages output for it.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   806
                        for act, errors, warnings, pinfo in img.verify(pfmri,
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   807
                            progresstracker, verbose=verbose, forever=forever):
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   808
                                if errors:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   809
                                        failed = True
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   810
                                        if quiet:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   811
                                                # Nothing more to do.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   812
                                                break
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   813
                                        result = _("ERROR")
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   814
                                elif not failed and warnings:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   815
                                        result = _("WARNING")
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   816
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   817
                                entries.append((act, errors, warnings, pinfo))
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   818
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   819
                        any_errors = any_errors or failed
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   820
                        if (not failed and not verbose) or quiet:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   821
                                # Nothing more to do.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   822
                                continue
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   823
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   824
                        if display_headers:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   825
                                display_headers = False
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   826
                                msg(_("%(pkg_name)-70s %(result)7s") % {
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   827
                                    "pkg_name": _("PACKAGE"),
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   828
                                    "result": _("STATUS") })
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   829
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   830
                        msg(_("%(pkg_name)-70s %(result)7s") % {
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   831
                            "pkg_name": pfmri.get_pkg_stem(),
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   832
                            "result": result })
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   833
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   834
                        for act, errors, warnings, pinfo in entries:
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
   835
                                if act:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
   836
                                        msg("\t%s" % act.distinguished_name())
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   837
                                for x in errors:
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
   838
                                        msg("\t\t%s" % x)
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   839
                                for x in warnings:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   840
                                        msg("\t\t%s" % x)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   841
                                if verbose:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   842
                                        # Only display informational messages if
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   843
                                        # verbose is True.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   844
                                        for x in pinfo:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   845
                                                msg("\t\t%s" % x)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   846
        except api_errors.InventoryException, e:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   847
                if e.illegal:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   848
                        for i in e.illegal:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   849
                                error(i)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   850
                        return EXIT_OOPS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   851
                notfound = e.notfound
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   852
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   853
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   854
                return EXIT_OOPS
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   855
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   856
        if notfound:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   857
                if processed:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   858
                        # Ensure a blank line is inserted after verify output.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   859
                        logger.error(" ")
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   860
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   861
                error(_("no packages matching '%s' installed") % \
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   862
                    ", ".join(notfound), cmd="verify")
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   863
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
   864
                if processed:
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   865
                        if any_errors:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   866
                                msg2 = _("See above for\nverification failures.")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   867
                        else:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   868
                                msg2 = _("No packages failed\nverification.")
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   869
                        logger.error(_("\nAll other patterns matched "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
   870
                            "installed packages.  %s" % msg2))
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   871
                any_errors = True
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
   872
227
faba25c4bce3 368 pkg info -m should display raw manifest
Stephen Hahn <sch@Sun.COM>
parents: 222
diff changeset
   873
        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
   874
                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
   875
        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
   876
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   877
def accept_plan_licenses(api_inst):
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   878
        """Helper function that marks all licenses for the current plan as
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   879
        accepted if they require acceptance."""
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   880
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   881
        plan = api_inst.describe()
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   882
        for pfmri, src, dest, accepted, displayed in plan.get_licenses():
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   883
                if not dest.must_accept:
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   884
                        continue
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   885
                api_inst.set_plan_license_status(pfmri, dest.license,
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   886
                    accepted=True)
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
   887
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   888
display_plan_options = ["basic", "fmris", "variants/facets", "services",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   889
    "actions", "boot-archive"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   890
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   891
def __display_plan(api_inst, verbose):
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   892
        """Helper function to display plan to the desired degree.
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   893
        Verbose can either be a numerical value, or a list of
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   894
        items to display"""
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   895
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   896
        if isinstance(verbose, int):
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   897
                disp = ["basic"]
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   898
                if verbose > 0:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   899
                        disp.extend(["fmris", "mediators", "services",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   900
                            "variants/facets", "boot-archive"])
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   901
                if verbose > 1:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   902
                        disp.append("actions")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   903
                if verbose > 2:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   904
                        disp.append("solver-errors")
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   905
        else:
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   906
                disp = verbose
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   907
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   908
        if DebugValues["plan"] and "solver-errors" not in disp:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   909
                disp.append("solver-errors")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   910
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   911
        plan = api_inst.describe()
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
   912
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   913
        if api_inst.is_liveroot and not api_inst.is_zone and \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   914
            not plan.is_active_root_be:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   915
                # Warn the user since this isn't likely what they wanted.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   916
                if plan.new_be:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   917
                        logger.warning(_("""\
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   918
WARNING: The boot environment being modified is not the active one.  Changes
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   919
made in the active BE will not be reflected on the next boot.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   920
"""))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   921
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   922
                        logger.warning(_("""\
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   923
WARNING: The boot environment being modified is not the active one.  Changes
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   924
made will not be reflected on the next boot.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   925
"""))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   926
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   927
        a, r, i, c = [], [], [], []
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   928
        for src, dest in plan.get_changes():
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   929
                if dest is None:
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   930
                        r.append((src, dest))
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   931
                elif src is None:
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   932
                        i.append((src, dest))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   933
                elif src != dest:
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   934
                        c.append((src, dest))
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   935
                else:
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   936
                        a.append((src, dest))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   937
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   938
        def bool_str(val):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   939
                if val:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   940
                        return _("Yes")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   941
                return _("No")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   942
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   943
        status = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   944
        varcets = plan.get_varcets()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   945
        mediators = plan.get_mediators()
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   946
        if "basic" in disp:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   947
                def cond_show(s1, s2, v):
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   948
                        if v:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   949
                                status.append((s1, s2 % v))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   950
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   951
                cond_show(_("Packages to remove:"), "%d", len(r))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   952
                cond_show(_("Packages to install:"), "%d", len(i))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   953
                cond_show(_("Packages to update:"), "%d", len(c))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   954
                cond_show(_("Mediators to change:"), "%d", len(mediators))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   955
                cond_show(_("Variants/Facets to change:"), "%d", len(varcets))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   956
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   957
                if verbose:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   958
                        # Only show space information in verbose mode.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   959
                        abytes = plan.bytes_added
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   960
                        if abytes:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   961
                                status.append((_("Estimated space available:"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   962
                                    misc.bytes_to_str(plan.bytes_avail)))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   963
                                status.append((
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   964
                                    _("Estimated space to be consumed:"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   965
                                    misc.bytes_to_str(plan.bytes_added)))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   966
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   967
                if varcets or mediators:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   968
                        cond_show(_("Packages to change:"), "%d", len(a))
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   969
                else:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   970
                        cond_show(_("Packages to fix:"), "%d", len(a))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   971
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   972
                status.append((_("Create boot environment:"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   973
                    bool_str(plan.new_be)))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   974
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   975
                if plan.new_be and (verbose or not plan.activate_be):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   976
                        # Only show activation status if verbose or if new BE
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   977
                        # will not be activated.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   978
                        status.append((_("Activate boot environment:"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   979
                            bool_str(plan.activate_be)))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   980
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   981
                status.append((_("Create backup boot environment:"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   982
                    bool_str(plan.backup_be)))
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   983
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   984
                if not plan.new_be:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   985
                        cond_show(_("Services to change:"), "%d",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   986
                            len(plan.get_services()))
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
   987
2105
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2100
diff changeset
   988
        if "boot-archive" in disp:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   989
                status.append((_("Rebuild boot archive:"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   990
                    bool_str(plan.update_boot_archive)))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   991
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   992
        # Right-justify all status strings based on length of longest string.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   993
        rjust_status = max(len(s[0]) for s in status)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   994
        rjust_value = max(len(s[1]) for s in status)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   995
        for s in status:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   996
                logger.info("%s %s" % (s[0].rjust(rjust_status),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   997
                    s[1].rjust(rjust_value)))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   998
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
   999
        if status:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1000
                # Ensure there is a blank line between status information and
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1001
                # remainder.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1002
                logger.info("")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1003
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1004
        if "mediators" in disp and mediators:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1005
                logger.info(_("Changed mediators:"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1006
                for x in mediators:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1007
                        logger.info("  %s" % x)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1008
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1009
        if "variants/facets" in disp and varcets:
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1010
                logger.info(_("Changed variants/facets:"))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1011
                for x in varcets:
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1012
                        logger.info("  %s" % x)
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1013
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1014
        if "solver-errors" in disp:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1015
                first = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1016
                for l in plan.get_solver_errors():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1017
                        if first:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1018
                                logger.info(_("Solver dependency errors:"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1019
                                first = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1020
                        logger.info(l)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1021
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1022
        if "fmris" in disp:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1023
                changed = collections.defaultdict(list)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1024
                for src, dest in itertools.chain(r, i, c):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1025
                        if src and dest:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1026
                                if src.publisher != dest.publisher:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1027
                                        pparent = "%s -> %s" % (src.publisher,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1028
                                            dest.publisher)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1029
                                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1030
                                        pparent = dest.publisher
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1031
                                pname = dest.pkg_stem
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1032
                                pver = "%s -> %s" % (src.fmri.version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1033
                                    dest.fmri.version)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1034
                        elif dest:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1035
                                pparent = dest.publisher
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1036
                                pname = dest.pkg_stem
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1037
                                pver = "None -> %s" % dest.fmri.version
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1038
                        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1039
                                pparent = src.publisher
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1040
                                pname = src.pkg_stem
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1041
                                pver = "%s -> None" % src.fmri.version
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1042
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1043
                        changed[pparent].append((pname, pver))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1044
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1045
                if changed:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1046
                        logger.info(_("Changed packages:"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1047
                        last_parent = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1048
                        for pparent, pname, pver in (
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1049
                            (pparent, pname, pver)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1050
                            for pparent in sorted(changed)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1051
                            for pname, pver in changed[pparent]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1052
                        ):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1053
                                if pparent != last_parent:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1054
                                        logger.info(pparent)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1055
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1056
                                logger.info("  %s" % pname)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1057
                                logger.info("    %s" % pver)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1058
                                last_parent = pparent
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1059
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1060
                if len(a):
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1061
                        logger.info(_("Affected fmris:"))
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1062
                        for src, dest in a:
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1063
                                logger.info("  %s", src)
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  1064
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1065
        if "services" in disp and not plan.new_be:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1066
                last_action = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1067
                for action, smf_fmri in plan.get_services():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1068
                        if last_action is None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1069
                                logger.info("Services:")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1070
                        if action != last_action:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1071
                                logger.info("  %s:" % action)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1072
                        logger.info("    %s" % smf_fmri)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1073
                        last_action = action
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1074
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1075
        if "actions" in disp:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1076
                logger.info("Actions:")
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1077
                for a in plan.get_actions():
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1078
                        logger.info("  %s" % a)
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1079
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1080
def __display_parsable_plan(api_inst, parsable_version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1081
    child_images=None):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1082
        """Display the parsable version of the plan."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1083
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1084
        assert parsable_version == 0, "parsable_version was %r" % \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1085
            parsable_version
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1086
        plan = api_inst.describe()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1087
        # Set the default values.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1088
        added_fmris = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1089
        removed_fmris = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1090
        changed_fmris = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1091
        affected_fmris = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1092
        backup_be_created = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1093
        new_be_created = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1094
        backup_be_name = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1095
        be_name = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1096
        boot_archive_rebuilt = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1097
        be_activated = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1098
        space_available = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1099
        space_required = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1100
        facets_changed = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1101
        variants_changed = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1102
        services_affected = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1103
        mediators_changed = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1104
        licenses = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1105
        if child_images is None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1106
                child_images = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1107
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1108
        if plan:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1109
                for rem, add in plan.get_changes():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1110
                        assert rem is not None or add is not None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1111
                        if rem is not None and add is not None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1112
                                # Lists of lists are used here becuase json will
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1113
                                # convert lists of tuples into lists of lists
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1114
                                # anyway.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1115
                                if rem.fmri == add.fmri:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1116
                                        affected_fmris.append(str(rem))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1117
                                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1118
                                        changed_fmris.append(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1119
                                            [str(rem), str(add)])
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1120
                        elif rem is not None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1121
                                removed_fmris.append(str(rem))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1122
                        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1123
                                added_fmris.append(str(add))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1124
                variants_changed, facets_changed = plan.get_parsable_varcets()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1125
                backup_be_created = plan.backup_be
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1126
                new_be_created = plan.new_be
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1127
                backup_be_name = plan.backup_be_name
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1128
                be_name = plan.be_name
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1129
                boot_archive_rebuilt = plan.update_boot_archive
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1130
                be_activated = plan.activate_be
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1131
                space_available = plan.bytes_avail
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1132
                space_required = plan.bytes_added
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1133
                services_affected = plan.get_services()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1134
                mediators_changed = plan.get_parsable_mediators()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1135
                for dfmri, src_li, dest_li, acc, disp in \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1136
                    plan.get_licenses():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1137
                        src_tup = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1138
                        if src_li:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1139
                                src_tup = (str(src_li.fmri), src_li.license,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1140
                                    src_li.get_text(), src_li.must_accept,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1141
                                    src_li.must_display)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1142
                        dest_tup = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1143
                        if dest_li:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1144
                                dest_tup = (str(dest_li.fmri),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1145
                                    dest_li.license, dest_li.get_text(),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1146
                                    dest_li.must_accept, dest_li.must_display)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1147
                        licenses.append(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1148
                            (str(dfmri), src_tup, dest_tup))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1149
                        api_inst.set_plan_license_status(dfmri, dest_li.license,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1150
                            displayed=True)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1151
        ret = {
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1152
            "create-backup-be": backup_be_created,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1153
            "create-new-be": new_be_created,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1154
            "backup-be-name": backup_be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1155
            "be-name": be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1156
            "boot-archive-rebuild": boot_archive_rebuilt,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1157
            "activate-be": be_activated,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1158
            "space-available": space_available,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1159
            "space-required": space_required,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1160
            "remove-packages": sorted(removed_fmris),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1161
            "add-packages": sorted(added_fmris),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1162
            "change-packages": sorted(changed_fmris),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1163
            "affect-packages": sorted(affected_fmris),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1164
            "change-facets": sorted(facets_changed),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1165
            "change-variants": sorted(variants_changed),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1166
            "affect-services": sorted(services_affected),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1167
            "change-mediators": sorted(mediators_changed),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1168
            "image-name": None,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1169
            "child-images": child_images,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1170
            "version": parsable_version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1171
            "licenses": sorted(licenses)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1172
        }
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1173
        # The image name for the parent image is always None.  If this image is
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1174
        # a child image, then the image name will be set when the parent image
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1175
        # processes this dictionary.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1176
        logger.info(json.dumps(ret))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1177
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1178
def display_plan_licenses(api_inst, show_all=False, show_req=True):
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1179
        """Helper function to display licenses for the current plan.
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1180
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  1181
        'show_all' is an optional boolean value indicating whether all licenses
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1182
        should be displayed or only those that have must-display=true."""
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1183
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1184
        plan = api_inst.describe()
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1185
        for pfmri, src, dest, accepted, displayed in plan.get_licenses():
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  1186
                if not show_all and not dest.must_display:
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1187
                        continue
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1188
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1189
                if not show_all and dest.must_display and displayed:
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1190
                        # License already displayed, so doesn't need to be
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1191
                        # displayed again.
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1192
                        continue
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1193
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1194
                lic = dest.license
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1195
                if show_req:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1196
                        logger.info("-" * 60)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1197
                        logger.info(_("Package: %s") % pfmri)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1198
                        logger.info(_("License: %s\n") % lic)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1199
                        logger.info(dest.get_text())
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1200
                        logger.info("\n")
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1201
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1202
                # Mark license as having been displayed.
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1203
                api_inst.set_plan_license_status(pfmri, lic, displayed=True)
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1204
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1205
def display_plan(api_inst, child_image_plans, noexecute, op, parsable_version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1206
    quiet, show_licenses, stage, verbose):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1207
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1208
        plan = api_inst.describe()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1209
        if not plan:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1210
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1211
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1212
        if stage not in [API_STAGE_DEFAULT, API_STAGE_PLAN]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1213
                # we should have displayed licenses earlier so mark all
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1214
                # licenses as having been displayed.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1215
                display_plan_licenses(api_inst, show_req=False)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1216
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1217
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1218
        if api_inst.planned_nothingtodo(li_ignore_all=True):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1219
                # nothing todo
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1220
                if op == PKG_OP_UPDATE:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1221
                        s = _("No updates available for this image.")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1222
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1223
                        s = _("No updates necessary for this image.")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1224
                if api_inst.ischild():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1225
                        s + " (%s)" % api_inst.get_linked_name()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1226
                msg(s)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1227
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1228
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1229
        if parsable_version is None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1230
                display_plan_licenses(api_inst, show_all=show_licenses)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1231
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1232
        if not quiet:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1233
                __display_plan(api_inst, verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1234
        if parsable_version is not None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1235
                __display_parsable_plan(api_inst, parsable_version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1236
                    child_image_plans)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1237
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1238
def __api_prepare(operation, api_inst, accept=False):
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1239
        # 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
  1240
        # or without some extra decoration done here.
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1241
        # 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
  1242
        try:
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1243
                if accept:
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1244
                        accept_plan_licenses(api_inst)
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1245
                api_inst.prepare()
1779
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1775
diff changeset
  1246
        except (api_errors.PermissionsException, api_errors.UnknownErrors), e:
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1247
                # 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
  1248
                # 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
  1249
                error("\n" + str(e))
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1250
                return EXIT_OOPS
1280
9c577f0a6cd8 10411 Protect progress tracker against adversarial interfaces
johansen <johansen@sun.com>
parents: 1271
diff changeset
  1251
        except api_errors.TransportError, e:
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1252
                # move past the progress tracker line.
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1253
                msg("\n")
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1254
                raise e
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1255
        except api_errors.PlanLicenseErrors, e:
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1256
                # Prepend a newline because otherwise the exception will
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1257
                # be printed on the same line as the spinner.
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1258
                logger.error("\n")
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1259
                error(_("The following packages require their "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1260
                    "licenses to be accepted before they can be installed "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1261
                    "or updated: "))
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1262
                logger.error(str(e))
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1263
                logger.error(_("To indicate that you agree to and accept the "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1264
                    "terms of the licenses of the packages listed above, "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1265
                    "use the --accept option.  To display all of the related "
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1266
                    "licenses, use the --licenses option."))
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1267
                return EXIT_LICENSE
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  1268
        except api_errors.InvalidPlanError, e:
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  1269
                # Prepend a newline because otherwise the exception will
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  1270
                # be printed on the same line as the spinner.
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  1271
                error("\n" + str(e))
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  1272
                return EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1273
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1274
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1275
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1276
        except api_errors.ImageInsufficentSpace, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1277
                error(str(e))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1278
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1279
        except KeyboardInterrupt:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1280
                raise
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1281
        except:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1282
                error(_("\nAn unexpected error happened while preparing for "
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1283
                    "%s:") % operation)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1284
                raise
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  1285
        return EXIT_OK
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1286
1859
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1857
diff changeset
  1287
def __api_execute_plan(operation, api_inst):
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1288
        rval = None
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1289
        try:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  1290
                api_inst.execute_plan()
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1291
                rval = EXIT_OK
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1292
        except RuntimeError, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1293
                error(_("%s failed: %s") % (operation, e))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1294
                rval = EXIT_OOPS
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1752
diff changeset
  1295
        except (api_errors.InvalidPlanError,
1859
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1857
diff changeset
  1296
            api_errors.ActionExecutionError,
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1752
diff changeset
  1297
            api_errors.InvalidPackageErrors), e:
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  1298
                # Prepend a newline because otherwise the exception will
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  1299
                # be printed on the same line as the spinner.
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  1300
                error("\n" + str(e))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1301
                rval = EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1302
        except (api_errors.LinkedImageException), e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1303
                error(_("%s failed (linked image exception(s)):\n%s") %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1304
                      (operation, str(e)))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1305
                rval = e.lix_exitrv
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1306
        except api_errors.ImageUpdateOnLiveImageException:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1307
                error(_("%s cannot be done on live image") % operation)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1308
                rval = EXIT_NOTLIVE
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1326
diff changeset
  1309
        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
  1310
                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
  1311
                    "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
  1312
                    "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
  1313
                    "environment.") % operation)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1314
                rval = EXIT_NOTLIVE
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1315
        except api_errors.CorruptedIndexException, e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1316
                error("The search index appears corrupted.  Please rebuild the "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1317
                    "index with 'pkg rebuild-index'.")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1318
                rval = EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1319
        except api_errors.ProblematicPermissionsIndexException, e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1320
                error(str(e))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1321
                error(_("\n(Failure to consistently execute pkg commands as a "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1322
                    "privileged user is often a source of this problem.)"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1323
                rval = EXIT_OOPS
1779
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1775
diff changeset
  1324
        except (api_errors.PermissionsException, api_errors.UnknownErrors), e:
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1325
                # 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
  1326
                # 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
  1327
                error("\n" + str(e))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1328
                rval = EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1329
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1330
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1331
                rval = EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1332
        except api_errors.BEException, e:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1333
                error(e)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1334
                rval = 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
  1335
        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
  1336
                raise
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1337
        except api_errors.ImageInsufficentSpace, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1338
                error(str(e))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1339
                rval = EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1340
        except Exception, e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1341
                error(_("An unexpected error happened during "
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1342
                    "%s: %s") % (operation, e))
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1343
                raise
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1344
        finally:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1345
                exc_type = exc_value = exc_tb = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1346
                if rval is None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1347
                        # Store original exception so that the real cause of
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1348
                        # failure can be raised if this fails.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1349
                        exc_type, exc_value, exc_tb = sys.exc_info()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1350
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1351
                try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1352
                        salvaged = api_inst.describe().get_salvaged()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1353
                        if salvaged:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1354
                                logger.error("")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1355
                                logger.error(_("The following unexpected or "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1356
                                    "editable files and directories were\n"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1357
                                    "salvaged while executing the requested "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1358
                                    "package operation; they\nhave been moved "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1359
                                    "to the displayed location in the image:\n"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1360
                                for opath, spath in salvaged:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1361
                                        logger.error("  %s -> %s" % (opath,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1362
                                            spath))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1363
                except Exception:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1364
                        if rval is not None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1365
                                # Only raise exception encountered here if the
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1366
                                # exception previously raised was suppressed.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1367
                                raise
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1368
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1369
                if exc_value or exc_tb:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1370
                        raise exc_value, None, exc_tb
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1371
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1372
        return rval
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1373
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1374
def __api_alloc(imgdir, exact_match, pkg_image_used, quiet, runid=-1):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1375
        progresstracker = get_tracker(quiet=quiet)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1376
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1377
        def qv(val):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1378
                # Escape shell metacharacters; '\' must be escaped first to
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1379
                # prevent escaping escapes.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1380
                for c in "\\ \t\n'`;&()|^<>?*":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1381
                        val = val.replace(c, "\\" + c)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1382
                return val
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1383
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1384
        try:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1385
                return api.ImageInterface(imgdir, CLIENT_API_VERSION,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1386
                    progresstracker, None, PKG_CLIENT_NAME,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1387
                    exact_match=exact_match, runid=runid)
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1388
        except api_errors.ImageNotFoundException, e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1389
                if e.user_specified:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1390
                        if pkg_image_used:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1391
                                error(_("No image rooted at '%s' "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1392
                                    "(set by $PKG_IMAGE)") % e.user_dir)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1393
                        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1394
                                error(_("No image rooted at '%s'") % e.user_dir)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1395
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1396
                        error(_("No image found."))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1397
                return
1672
3a71439a03f3 13021 file manager exceptions should be api exceptions
Shawn Walker <srw@sun.com>
parents: 1658
diff changeset
  1398
        except api_errors.PermissionsException, e:
3a71439a03f3 13021 file manager exceptions should be api exceptions
Shawn Walker <srw@sun.com>
parents: 1658
diff changeset
  1399
                error(e)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1400
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1401
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1402
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1403
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1404
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1405
def __api_plan_exception(op, noexecute, verbose, api_inst):
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1406
        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
  1407
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1408
        if e_type == api_errors.ImageNotFoundException:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1409
                error(_("No image rooted at '%s'") % e.user_dir, cmd=op)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1410
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1411
        if e_type == api_errors.InventoryException:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1412
                error("\n" + _("%s failed (inventory exception):\n%s") % (op,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1413
                    e))
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1414
                return EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1415
        if isinstance(e, api_errors.LinkedImageException):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1416
                error(_("%s failed (linked image exception(s)):\n%s") %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1417
                      (op, str(e)))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1418
                return e.lix_exitrv
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1419
        if e_type == api_errors.IpkgOutOfDateException:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1420
                msg(_("""\
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1421
WARNING: pkg(5) appears to be out of date, and should be updated before
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1422
running %(op)s.  Please update pkg(5) by executing 'pkg install
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1423
pkg:/package/pkg' as a privileged user and then retry the %(op)s."""
1829
e581a205ec02 14907 references to old-style package names must be purged
Danek Duvall <danek.duvall@sun.com>
parents: 1814
diff changeset
  1424
                    ) % locals())
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1425
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1426
        if e_type == api_errors.NonLeafPackageException:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1427
                error(_("""\
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1428
Cannot remove '%s' due to the following packages that depend on it:"""
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1429
                    ) % e.fmri, cmd=op)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1430
                for d in e.dependents:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  1431
                        logger.error("  %s" % d)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1432
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1433
        if e_type == api_errors.CatalogRefreshException:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1434
                if display_catalog_failures(e) != 0:
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1435
                        return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1436
                if noexecute:
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1437
                        return EXIT_OK
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1438
                return EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1439
        if e_type == api_errors.ConflictingActionErrors:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1440
                error("\n" + str(e), cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1441
                if verbose:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1442
                        __display_plan(api_inst, verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1443
                return EXIT_OOPS
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1752
diff changeset
  1444
        if e_type in (api_errors.InvalidPlanError,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1445
            api_errors.ReadOnlyFileSystemException,
1859
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1857
diff changeset
  1446
            api_errors.ActionExecutionError,
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1752
diff changeset
  1447
            api_errors.InvalidPackageErrors):
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1448
                error("\n" + str(e), cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1449
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1450
        if e_type == api_errors.ImageFormatUpdateNeeded:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1451
                format_update_error(e)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1452
                return EXIT_OOPS
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1453
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1454
        if e_type == api_errors.ImageUpdateOnLiveImageException:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1455
                error("\n" + _("The proposed operation cannot be performed on "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1456
                    "a live image."), cmd=op)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1457
                return EXIT_NOTLIVE
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1458
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1459
        if issubclass(e_type, api_errors.BEException):
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1460
                error("\n" + str(e), cmd=op)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1461
                return EXIT_OOPS
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1462
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1463
        if e_type == api_errors.PlanCreationException:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1464
                # Prepend a newline because otherwise the exception will
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1465
                # be printed on the same line as the spinner.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1466
                txt = str(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1467
                if e.multiple_matches:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1468
                        txt += "\n\n" + _("Please provide one of the package "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1469
                            "FMRIs listed above to the install command.")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1470
                error("\n" + txt, cmd=op)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1471
                if verbose:
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1472
                        logger.error("\n".join(e.verbose_info))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1473
                if e.invalid_mediations:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1474
                        # Bad user input for mediation.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1475
                        return EXIT_BADOPT
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1476
                return EXIT_OOPS
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1477
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1478
        if e_type in (api_errors.CertificateError,
1779
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1775
diff changeset
  1479
            api_errors.UnknownErrors,
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  1480
            api_errors.PermissionsException,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  1481
            api_errors.InvalidPropertyValue,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  1482
            api_errors.InvalidResourceLocation):
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1483
                # 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
  1484
                # be printed on the same line as the spinner.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1485
                error("\n" + str(e), cmd=op)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1486
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1487
        if e_type == fmri.IllegalFmri:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1488
                # Prepend a newline because otherwise the exception will
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1489
                # be printed on the same line as the spinner.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1490
                error("\n" + str(e), cmd=op)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1491
                return EXIT_OOPS
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  1492
        if isinstance(e, api_errors.SigningException):
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1493
                # Prepend a newline because otherwise the exception will
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1494
                # be printed on the same line as the spinner.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1495
                error("\n" + str(e), cmd=op)
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  1496
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1497
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1498
        # 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
  1499
        raise
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1500
        # NOTREACHED
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  1501
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1502
def __api_op(_op, _api_inst, _accept=False, _li_ignore=None, _noexecute=False,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1503
    _origins=None, _parsable_version=None, _quiet=False,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1504
    _review_release_notes=False, _show_licenses=False, _stage=API_STAGE_DEFAULT,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1505
    _verbose=0, **kwargs):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1506
        """Do something that involves the api.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1507
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1508
        Arguments prefixed with '_' are primarily used within this
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1509
        function.  All other arguments must be specified via keyword
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1510
        assignment and will be passed directly on to the api
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1511
        interfaces being invoked."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1512
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1513
        # massage arguments
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1514
        if type(_li_ignore) == list:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1515
                # parse any linked image names specified on the command line
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1516
                _li_ignore = _api_inst.parse_linked_name_list(_li_ignore)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1517
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1518
        # All the api interface functions that we inovke have some
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1519
        # common arguments.  Set those up now.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1520
        if _op != PKG_OP_REVERT:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1521
                kwargs["accept"] = _accept
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1522
                kwargs["li_ignore"] = _li_ignore
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1523
        kwargs["noexecute"] = _noexecute
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1524
        if _origins != None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1525
                kwargs["repos"] = _origins
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1526
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1527
        # display plan debugging information
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1528
        if _verbose > 2:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1529
                DebugValues.set_value("plan", "True")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1530
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1531
        # plan the requested operation
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1532
        stuff_to_do = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1533
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1534
        if _op == PKG_OP_ATTACH:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1535
                api_plan_func = _api_inst.gen_plan_attach
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1536
        elif _op in [PKG_OP_CHANGE_FACET, PKG_OP_CHANGE_VARIANT]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1537
                api_plan_func = _api_inst.gen_plan_change_varcets
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1538
        elif _op == PKG_OP_DETACH:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1539
                api_plan_func = _api_inst.gen_plan_detach
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1540
        elif _op == PKG_OP_INSTALL:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1541
                api_plan_func = _api_inst.gen_plan_install
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1542
        elif _op == PKG_OP_REVERT:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1543
                api_plan_func = _api_inst.gen_plan_revert
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1544
        elif _op == PKG_OP_SYNC:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1545
                api_plan_func = _api_inst.gen_plan_sync
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1546
        elif _op == PKG_OP_UNINSTALL:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1547
                api_plan_func = _api_inst.gen_plan_uninstall
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1548
        elif _op == PKG_OP_UPDATE:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1549
                api_plan_func = _api_inst.gen_plan_update
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1550
        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1551
                raise RuntimeError("__api_op() invalid op: %s" % _op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1552
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1553
        first_plan = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1554
        plan_displayed = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1555
        child_plans = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1556
        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1557
                for pd in api_plan_func(**kwargs):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1558
                        if not first_plan:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1559
                                #
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1560
                                # we don't display anything for child images
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1561
                                # since they currently do their own display
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1562
                                # work unless parsable output is requested.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1563
                                #
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1564
                                child_plans.append(pd)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1565
                                continue
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1566
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1567
                        # the first plan description is always for ourself.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1568
                        first_plan = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1569
                        if _parsable_version is None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1570
                                display_plan(_api_inst, [], _noexecute,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1571
                                    _op, _parsable_version, _quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1572
                                    _show_licenses, _stage, _verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1573
                                plan_displayed = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1574
        except:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1575
                rv = __api_plan_exception(_op, _noexecute, _verbose, _api_inst)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1576
                if rv != EXIT_OK:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1577
                        return rv
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1578
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1579
        if not plan_displayed:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1580
                try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1581
                        display_plan(_api_inst, child_plans, _noexecute, _op,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1582
                            _parsable_version, _quiet, _show_licenses, _stage,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1583
                            _verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1584
                except api_errors.ApiException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1585
                        error(e, cmd=_op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1586
                        return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1587
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1588
        stuff_to_do = not _api_inst.planned_nothingtodo()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1589
        if not stuff_to_do:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1590
                return EXIT_NOP
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1591
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1592
        if _noexecute or _stage in [API_STAGE_PUBCHECK, API_STAGE_PLAN]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1593
                return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1594
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1595
        # Exceptions which happen here are printed in the above level,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1596
        # with or without some extra decoration done here.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1597
        ret_code = __api_prepare(_op, _api_inst, accept=_accept)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1598
        if ret_code != EXIT_OK:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1599
                return ret_code
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1600
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1601
        if _stage == API_STAGE_PREPARE:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1602
                return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1603
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1604
        ret_code = __api_execute_plan(_op, _api_inst)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1605
        if _review_release_notes and ret_code == 0 and \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1606
            _stage == API_STAGE_DEFAULT and _api_inst.solaris_image():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1607
                msg("\n" + "-" * 75)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1608
                msg(_("NOTE: Please review release notes posted at:\n" ))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1609
                msg(misc.get_release_notes_url())
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1610
                msg("-" * 75 + "\n")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1611
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1612
        return ret_code
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1613
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1614
def opts_err_opt1_req_opt2(opt1, opt2, op):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1615
        txt = _("%(opt1)s may only be used in combination with %(opt2)s") % \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1616
            {"opt1": opt1, "opt2": opt2}
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1617
        usage(txt, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1618
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1619
def opts_err_incompat(opt1, opt2, op):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1620
        txt = _("the %(opt1)s and %(opt2)s options may not be combined") % \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1621
            {"opt1": opt1, "opt2": opt2}
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1622
        usage(txt, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1623
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1624
def opts_err_repeated(opt1, op):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1625
        txt = _("option '%s' repeated") % (opt1)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1626
        usage(txt, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1627
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1628
def opts_table_cb_beopts(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1629
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1630
        # synthesize require_new_be and deny_new_be into new_be
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1631
        del opts_new["require_new_be"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1632
        del opts_new["deny_new_be"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1633
        opts_new["new_be"] = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1634
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1635
        if (opts["be_name"] or opts["require_new_be"]) and opts["deny_new_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1636
                opts_err_incompat("--require-new-be", "--deny-new-be", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1637
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1638
        # create a new key called "backup_be" in the options array
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1639
        if opts["require_new_be"] or opts["be_name"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1640
                opts_new["new_be"] = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1641
        if opts["deny_new_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1642
                opts_new["new_be"] = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1643
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1644
        # synthesize require_backup_be and no_backup_be into backup_be
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1645
        del opts_new["require_backup_be"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1646
        del opts_new["no_backup_be"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1647
        opts_new["backup_be"] = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1648
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1649
        if (opts["require_backup_be"] or opts["backup_be_name"]) and \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1650
            opts["no_backup_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1651
                opts_err_incompat("--require-backup-be", "--no-backup-be", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1652
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1653
        if (opts["require_backup_be"] or opts["backup_be_name"]) and \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1654
            (opts["require_new_be"] or opts["be_name"]):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1655
                opts_err_incompat("--require-backup-be", "--require-new-be", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1656
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1657
        # create a new key called "backup_be" in the options array
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1658
        if opts["require_backup_be"] or opts["backup_be_name"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1659
                opts_new["backup_be"] = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1660
        if opts["no_backup_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1661
                opts_new["backup_be"] = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1662
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1663
def opts_table_cb_li_ignore(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1664
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1665
        # synthesize li_ignore_all and li_ignore_list into li_ignore
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1666
        del opts_new["li_ignore_all"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1667
        del opts_new["li_ignore_list"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1668
        opts_new["li_ignore"] = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1669
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1670
        # check if there's nothing to ignore
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1671
        if not opts["li_ignore_all"] and not opts["li_ignore_list"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1672
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1673
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1674
        if opts["li_ignore_all"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1675
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1676
                # can't ignore all and specific images
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1677
                if opts["li_ignore_list"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1678
                        opts_err_incompat("-I", "-i", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1679
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1680
                # can't ignore all and target anything.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1681
                if "li_target_all" in opts and opts["li_target_all"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1682
                        opts_err_incompat("-I", "-a", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1683
                if "li_target_list" in opts and opts["li_target_list"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1684
                        opts_err_incompat("-I", "-l", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1685
                if "li_name" in opts and opts["li_name"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1686
                        opts_err_incompat("-I", "-l", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1687
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1688
                opts_new["li_ignore"] = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1689
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1690
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1691
        assert opts["li_ignore_list"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1692
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1693
        # it doesn't make sense to specify images to ignore if the
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1694
        # user is already specifying images to operate on.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1695
        if "li_target_all" in opts and opts["li_target_all"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1696
                opts_err_incompat("-i", "-a", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1697
        if "li_target_list" in opts and opts["li_target_list"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1698
                opts_err_incompat("-i", "-l", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1699
        if "li_name" in opts and opts["li_name"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1700
                opts_err_incompat("-i", "-l", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1701
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1702
        li_ignore = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1703
        for li_name in opts["li_ignore_list"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1704
                # check for repeats
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1705
                if li_name in li_ignore:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1706
                        opts_err_repeated("-i %s" % (li_name), op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1707
                # add to ignore list
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1708
                li_ignore.append(li_name)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1709
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1710
        opts_new["li_ignore"] = li_ignore
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1711
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1712
def opts_table_cb_li_no_psync(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1713
        # if a target child linked image was specified, the no-parent-sync
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1714
        # option doesn't make sense since we know that both the parent and
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1715
        # child image are accessible
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1716
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1717
        if "li_target_all" not in opts:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1718
                # we don't accept linked image target options
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1719
                assert "li_target_list" not in opts
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1720
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1721
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1722
        if opts["li_target_all"] and not opts["li_parent_sync"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1723
                opts_err_incompat("-a", "--no-parent-sync", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1724
        if opts["li_target_list"] and not opts["li_parent_sync"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1725
                opts_err_incompat("-l", "--no-parent-sync", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1726
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1727
def opts_table_cb_li_props(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1728
        """convert linked image prop list into a dictionary"""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1729
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1730
        opts_new["li_props"] = __parse_linked_props(opts["li_props"], op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1731
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1732
def opts_table_cb_li_target(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1733
        # figure out which option the user specified
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1734
        if opts["li_target_all"] and opts["li_target_list"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1735
                opts_err_incompat("-a", "-l", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1736
        elif opts["li_target_all"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1737
                arg1 = "-a"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1738
        elif opts["li_target_list"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1739
                arg1 = "-l"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1740
        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1741
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1742
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1743
        if "be_activate" in opts and not opts["be_activate"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1744
                opts_err_incompat(arg1, "--no-be-activate", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1745
        if "be_name" in opts and opts["be_name"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1746
                opts_err_incompat(arg1, "--be-name", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1747
        if "deny_new_be" in opts and opts["deny_new_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1748
                opts_err_incompat(arg1, "--deny-new-be", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1749
        if "require_new_be" in opts and opts["require_new_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1750
                opts_err_incompat(arg1, "--require-new-be", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1751
        if "reject_pats" in opts and opts["reject_pats"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1752
                opts_err_incompat(arg1, "--reject", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1753
        if "origins" in opts and opts["origins"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1754
                opts_err_incompat(arg1, "-g", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1755
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1756
        # validate linked image name
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1757
        li_target_list = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1758
        for li_name in opts["li_target_list"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1759
                # check for repeats
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1760
                if li_name in li_target_list:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1761
                        opts_err_repeated("-l %s" % (li_name), op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1762
                # add to ignore list
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1763
                li_target_list.append(li_name)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1764
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1765
        opts_new["li_target_list"] = li_target_list
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1766
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1767
def opts_table_cb_li_target1(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1768
        # figure out which option the user specified
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1769
        if opts["li_name"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1770
                arg1 = "-l"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1771
        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1772
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1773
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1774
        if "be_activate" in opts and not opts["be_activate"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1775
                opts_err_incompat(arg1, "--no-be-activate", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1776
        if "be_name" in opts and opts["be_name"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1777
                opts_err_incompat(arg1, "--be-name", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1778
        if "deny_new_be" in opts and opts["deny_new_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1779
                opts_err_incompat(arg1, "--deny-new-be", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1780
        if "require_new_be" in opts and opts["require_new_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1781
                opts_err_incompat(arg1, "--require-new-be", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1782
        if "reject_pats" in opts and opts["reject_pats"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1783
                opts_err_incompat(arg1, "--require", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1784
        if "origins" in opts and opts["origins"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1785
                opts_err_incompat(arg1, "-g", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1786
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1787
def opts_table_cb_no_headers_vs_quiet(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1788
        # check if we accept the -q option
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1789
        if "quiet" not in opts:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1790
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1791
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1792
        # -q implies -H
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1793
        if opts["quiet"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1794
                opts_new["omit_headers"] = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1795
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1796
def opts_table_cb_nqv(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1797
        if opts["verbose"] and opts["quiet"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1798
                opts_err_incompat("-v", "-q", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1799
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1800
def opts_table_cb_parsable(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1801
        if opts["parsable_version"] and opts.get("verbose", False):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1802
                opts_err_incompat("--parsable", "-v", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1803
        if opts["parsable_version"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1804
                try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1805
                        opts_new["parsable_version"] = int(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1806
                            opts["parsable_version"])
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1807
                except ValueError:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1808
                        usage(_("--parsable expects an integer argument."),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1809
                            cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1810
                opts_new["quiet"] = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1811
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1812
def opts_table_cb_origins(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1813
        origins = set()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1814
        for o in opts["origins"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1815
                origins.add(misc.parse_uri(o, cwd=orig_cwd))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1816
        opts_new["origins"] = origins
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1817
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1818
def opts_table_cb_stage(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1819
        if opts["stage"] == None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1820
                opts_new["stage"] = API_STAGE_DEFAULT
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1821
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1822
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1823
        if opts_new["stage"] not in api_stage_values:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1824
                usage(_("invalid operation stage: '%s'") % opts["stage"],
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1825
                    cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1826
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1827
def opts_cb_li_attach(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1828
        if opts["attach_parent"] and opts["attach_child"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1829
                opts_err_incompat("-c", "-p", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1830
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1831
        if not opts["attach_parent"] and not opts["attach_child"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1832
                usage(_("either -c or -p must be specified"), cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1833
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1834
        if opts["attach_child"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1835
                # if we're attaching a new child then that doesn't affect
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1836
                # any other children, so ignoring them doesn't make sense.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1837
                if opts["li_ignore_all"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1838
                        opts_err_incompat("-c", "-I", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1839
                if opts["li_ignore_list"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1840
                        opts_err_incompat("-c", "-i", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1841
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1842
def opts_table_cb_md_only(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1843
        # if the user didn't specify linked-md-only we're done
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1844
        if not opts["li_md_only"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1845
                return
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1846
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1847
        # li_md_only implies no li_pkg_updates
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1848
        if "li_pkg_updates" in opts:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1849
                opts_new["li_pkg_updates"] = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1850
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1851
        #
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1852
        # if li_md_only is false that means we're not updating any packages
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1853
        # within the current image so there are a ton of options that no
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1854
        # longer apply to the current operation, and hence are incompatible
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1855
        # with li_md_only.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1856
        #
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1857
        arg1 = "--linked-md-only"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1858
        if "be_name" in opts and opts["be_name"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1859
                opts_err_incompat(arg1, "--be-name", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1860
        if "deny_new_be" in opts and opts["deny_new_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1861
                opts_err_incompat(arg1, "--deny-new-be", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1862
        if "require_new_be" in opts and opts["require_new_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1863
                opts_err_incompat(arg1, "--require-new-be", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1864
        if "li_parent_sync" in opts and not opts["li_parent_sync"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1865
                opts_err_incompat(arg1, "--no-parent-sync", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1866
        if "reject_pats" in opts and opts["reject_pats"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1867
                opts_err_incompat(arg1, "--reject", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1868
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1869
def opts_cb_list(op, api_inst, opts, opts_new):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1870
        if opts_new["origins"] and not opts_new["list_newest"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1871
                # Use of -g implies -a unless -n is provided.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1872
                opts_new["list_installed_newest"] = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1873
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1874
        if opts_new["list_all"] and not opts_new["list_installed_newest"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1875
                opts_err_opt1_req_opt2("-f", "-a", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1876
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1877
        if opts_new["list_installed_newest"] and opts_new["list_newest"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1878
                opts_err_incompat("-a", "-n", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1879
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1880
        if opts_new["list_installed_newest"] and opts_new["list_upgradable"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1881
                opts_err_incompat("-a", "-u", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1882
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1883
        if opts_new["summary"] and opts_new["verbose"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1884
                opts_err_incompat("-s", "-v", op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1885
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1886
#
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1887
# options common to multiple pkg(1) subcommands.  The format for specifying
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1888
# options is a list which can contain:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1889
#
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1890
# - Function pointers which define callbacks that are invoked after all
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1891
#   options (aside from extra pargs) have been parsed.  These callbacks can
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1892
#   verify the the contents and combinations of different options.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1893
#
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1894
# - Tuples formatted as:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1895
#       (s, l, k, v)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1896
#   where the values are:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1897
#       s: a short option, ex: -f
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1898
#       l: a long option, ex: --foo
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1899
#       k: the key value for the options dictionary
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1900
#       v: the default value. valid values are: True/False, None, [], 0
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1901
#
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1902
opts_table_beopts = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1903
    opts_table_cb_beopts,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1904
    ("",  "backup-be-name=",   "backup_be_name",     None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1905
    ("",  "be-name=",          "be_name",            None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1906
    ("",  "deny-new-be",       "deny_new_be",        False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1907
    ("",  "no-backup-be",      "no_backup_be",       False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1908
    ("",  "no-be-activate",    "be_activate",        True),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1909
    ("",  "require-backup-be", "require_backup_be",  False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1910
    ("",  "require-new-be",    "require_new_be",     False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1911
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1912
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1913
opts_table_force = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1914
    ("f", "",                "force",                False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1915
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1916
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1917
opts_table_li_ignore = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1918
    opts_table_cb_li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1919
    ("I", "",                "li_ignore_all",        False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1920
    ("i", "",                "li_ignore_list",       []),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1921
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1922
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1923
opts_table_li_md_only = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1924
    opts_table_cb_md_only,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1925
    ("",  "linked-md-only",    "li_md_only",         False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1926
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1927
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1928
opts_table_li_no_pkg_updates = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1929
    ("",  "no-pkg-updates",  "li_pkg_updates",       True),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1930
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1931
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1932
opts_table_li_no_psync = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1933
    opts_table_cb_li_no_psync,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1934
    ("",  "no-parent-sync",  "li_parent_sync",       True),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1935
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1936
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1937
opts_table_li_props = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1938
    opts_table_cb_li_props,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1939
    ("", "prop-linked",      "li_props",             []),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1940
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1941
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1942
opts_table_li_target = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1943
    opts_table_cb_li_target,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1944
    ("a", "",                "li_target_all",        False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1945
    ("l", "",                "li_target_list",       []),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1946
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1947
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1948
opts_table_li_target1 = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1949
    opts_table_cb_li_target1,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1950
    ("l", "",                "li_name",              None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1951
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1952
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1953
opts_table_licenses = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1954
    ("",  "accept",          "accept",               False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1955
    ("",  "licenses",        "show_licenses",        False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1956
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1957
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1958
opts_table_no_headers = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1959
    opts_table_cb_no_headers_vs_quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1960
    ("H", "",                "omit_headers",         False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1961
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1962
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1963
opts_table_no_index = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1964
    ("",  "no-index",        "update_index",         True),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1965
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1966
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1967
opts_table_no_refresh = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1968
    ("",  "no-refresh",      "refresh_catalogs",     True),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1969
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1970
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1971
opts_table_reject = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1972
    ("", "reject=",          "reject_pats",          []),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1973
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1974
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1975
opts_table_verbose = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1976
    ("v", "",                "verbose",              0),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1977
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1978
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1979
opts_table_quiet = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1980
    ("q", "",                "quiet",                False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1981
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1982
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1983
opts_table_parsable = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1984
    opts_table_cb_parsable,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1985
    ("", "parsable=",        "parsable_version",     None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1986
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1987
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1988
opts_table_nqv = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1989
    opts_table_quiet + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1990
    opts_table_verbose + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1991
    [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1992
    opts_table_cb_nqv,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1993
    ("n", "",                "noexecute",            False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1994
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1995
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1996
opts_table_origins = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1997
    opts_table_cb_origins,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1998
    ("g", "",                "origins",              []),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  1999
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2000
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2001
opts_table_stage = [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2002
    opts_table_cb_stage,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2003
    ("",  "stage",           "stage",                None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2004
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2005
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2006
#
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2007
# Options for pkg(1) subcommands.  Built by combining the option tables above,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2008
# with some optional subcommand unique options defined below.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2009
#
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2010
opts_install = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2011
    opts_table_beopts + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2012
    opts_table_li_ignore + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2013
    opts_table_li_no_psync + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2014
    opts_table_licenses + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2015
    opts_table_reject + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2016
    opts_table_no_index + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2017
    opts_table_no_refresh + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2018
    opts_table_nqv + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2019
    opts_table_parsable + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2020
    opts_table_origins + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2021
    []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2022
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2023
# "update" cmd inherits all "install" cmd options
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2024
opts_update = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2025
    opts_install + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2026
    opts_table_force + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2027
    opts_table_stage + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2028
    []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2029
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2030
# "attach-linked" cmd inherits all "install" cmd options
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2031
opts_attach_linked = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2032
    opts_install + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2033
    opts_table_force + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2034
    opts_table_li_md_only + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2035
    opts_table_li_no_pkg_updates + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2036
    opts_table_li_props + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2037
    [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2038
    opts_cb_li_attach,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2039
    ("",  "allow-relink",   "allow_relink",         False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2040
    ("c", "",               "attach_child",         False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2041
    ("p", "",               "attach_parent",        False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2042
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2043
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2044
opts_list_mediator = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2045
    opts_table_no_headers + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2046
    [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2047
    ("a", "",                "list_available",      False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2048
    ("F", "output-format",   "output_format",       None)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2049
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2050
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2051
opts_revert = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2052
    opts_table_beopts + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2053
    opts_table_nqv + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2054
    opts_table_parsable + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2055
    [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2056
    ("",  "tagged",          "tagged",               False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2057
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2058
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2059
opts_set_mediator = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2060
    opts_table_beopts + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2061
    opts_table_no_index + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2062
    opts_table_nqv + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2063
    opts_table_parsable + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2064
    [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2065
    ("I", "implementation",  "med_implementation",   None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2066
    ("V", "version",         "med_version",          None)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2067
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2068
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2069
opts_unset_mediator = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2070
    opts_table_beopts + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2071
    opts_table_no_index + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2072
    opts_table_nqv + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2073
    opts_table_parsable + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2074
    [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2075
    ("I", "",               "med_implementation",   False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2076
    ("V", "",               "med_version",          False)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2077
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2078
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2079
# "set-property-linked" cmd inherits all "install" cmd options
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2080
opts_set_property_linked = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2081
    opts_install + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2082
    opts_table_li_md_only + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2083
    opts_table_li_no_pkg_updates + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2084
    opts_table_li_target1 + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2085
    []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2086
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2087
# "sync-linked" cmd inherits all "install" cmd options
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2088
opts_sync_linked = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2089
    opts_install + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2090
    opts_table_li_md_only + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2091
    opts_table_li_no_pkg_updates + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2092
    opts_table_li_target + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2093
    opts_table_stage + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2094
    []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2095
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2096
opts_uninstall = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2097
    opts_table_beopts + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2098
    opts_table_li_ignore + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2099
    opts_table_no_index + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2100
    opts_table_nqv + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2101
    opts_table_parsable + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2102
    opts_table_stage
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2103
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2104
opts_audit_linked = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2105
    opts_table_li_no_psync + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2106
    opts_table_li_target + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2107
    opts_table_no_headers + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2108
    opts_table_quiet + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2109
    []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2110
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2111
opts_detach_linked = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2112
    opts_table_force + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2113
    opts_table_li_target + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2114
    opts_table_nqv + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2115
    []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2116
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2117
opts_list_linked = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2118
    opts_table_li_ignore + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2119
    opts_table_no_headers + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2120
    []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2121
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2122
opts_list_property_linked = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2123
    opts_table_li_target1 + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2124
    opts_table_no_headers + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2125
    []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2126
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2127
opts_list_inventory = \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2128
    opts_table_li_no_psync + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2129
    opts_table_no_refresh + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2130
    opts_table_no_headers + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2131
    opts_table_origins + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2132
    opts_table_verbose + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2133
    [
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2134
    opts_cb_list,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2135
    ("a", "",               "list_installed_newest", False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2136
    ("f", "",               "list_all",              False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2137
    ("n", "",               "list_newest",           False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2138
    ("s", "",               "summary",               False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2139
    ("u", "",               "list_upgradable",       False),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2140
]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2141
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2142
def change_variant(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2143
    accept, backup_be, backup_be_name, be_activate, be_name, li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2144
    li_parent_sync, new_be, noexecute, origins, parsable_version, quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2145
    refresh_catalogs, reject_pats, show_licenses, update_index, verbose):
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2146
        """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
  2147
        the image contents as necessary."""
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2148
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2149
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2150
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2151
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2152
        xrval, xres = get_fmri_args(api_inst, reject_pats, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2153
        if not xrval:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2154
                return EXIT_OOPS
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2155
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2156
        if not pargs:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2157
                usage(_("%s: no variants specified") % op)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2158
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  2159
        variants = dict()
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2160
        for arg in pargs:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2161
                # '=' 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
  2162
                if (len(arg.split('=')) != 2):
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2163
                        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
  2164
                            "'<name>=<value>'.") % op)
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2165
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2166
                # get the variant name and value
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2167
                name, value = arg.split('=')
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2168
                if not name.startswith("variant."):
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2169
                        name = "variant.%s" % name
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2170
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2171
                # 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
  2172
                if name in variants:
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2173
                        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
  2174
                            (op, name))
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2175
                variants[name] = value
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2176
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2177
        return __api_op(op, api_inst, _accept=accept, _li_ignore=li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2178
            _noexecute=noexecute, _origins=origins,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2179
            _parsable_version=parsable_version, _quiet=quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2180
            _show_licenses=show_licenses, _verbose=verbose,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2181
            backup_be=backup_be, backup_be_name=backup_be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2182
            be_activate=be_activate, be_name=be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2183
            li_parent_sync=li_parent_sync, new_be=new_be,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2184
            refresh_catalogs=refresh_catalogs, reject_list=reject_pats,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2185
            update_index=update_index, variants=variants)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2186
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2187
def change_facet(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2188
    accept, backup_be, backup_be_name, be_activate, be_name, li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2189
    li_parent_sync, new_be, noexecute, origins, parsable_version, quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2190
    refresh_catalogs, reject_pats, show_licenses, update_index, 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
  2191
        """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
  2192
        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
  2193
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2194
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2195
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2196
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2197
        xrval, xres = get_fmri_args(api_inst, reject_pats, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2198
        if not xrval:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2199
                return EXIT_OOPS
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2200
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2201
        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
  2202
                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
  2203
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2204
        # XXX facets should be accessible through pkg.client.api
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2205
        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
  2206
        allowed_values = {
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  2207
            "TRUE" : True,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  2208
            "FALSE": 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
  2209
            "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
  2210
        }
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2211
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2212
        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
  2213
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2214
                # '=' 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
  2215
                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
  2216
                        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
  2217
                            "'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
  2218
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2219
                # get the facet name and value
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  2220
                name, value = arg.split('=')
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2221
                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
  2222
                        name = "facet." + name
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  2223
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2224
                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
  2225
                        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
  2226
                            "'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
  2227
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2228
                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
  2229
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2230
                if v is None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2231
                        facets.pop(name, 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
  2232
                else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2233
                        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
  2234
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2235
        return __api_op(op, api_inst, _accept=accept, _li_ignore=li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2236
            _noexecute=noexecute, _origins=origins,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2237
            _parsable_version=parsable_version, _quiet=quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2238
            _show_licenses=show_licenses, _verbose=verbose,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2239
            backup_be=backup_be, backup_be_name=backup_be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2240
            be_activate=be_activate, be_name=be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2241
            li_parent_sync=li_parent_sync, new_be=new_be, facets=facets,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2242
            refresh_catalogs=refresh_catalogs, reject_list=reject_pats,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2243
            update_index=update_index)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2244
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2245
def install(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2246
    accept, backup_be, backup_be_name, be_activate, be_name, li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2247
    li_parent_sync, new_be, noexecute, origins, parsable_version, quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2248
    refresh_catalogs, reject_pats, show_licenses, update_index, verbose):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2249
50
bfcb1661f019 basic image and package plans
Stephen Hahn <sch@sun.com>
parents: 48
diff changeset
  2250
        """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
  2251
        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
  2252
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2253
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2254
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2255
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2256
        if not pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2257
                usage(_("at least one package name required"), cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2258
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2259
        rval, res = get_fmri_args(api_inst, pargs, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2260
        if not rval:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2261
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2262
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2263
        xrval, xres = get_fmri_args(api_inst, reject_pats, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2264
        if not xrval:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2265
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2266
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2267
        return __api_op(op, api_inst, _accept=accept, _li_ignore=li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2268
            _noexecute=noexecute, _origins=origins, _quiet=quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2269
            _show_licenses=show_licenses, _verbose=verbose,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2270
            backup_be=backup_be, backup_be_name=backup_be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2271
            be_activate=be_activate, be_name=be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2272
            li_parent_sync=li_parent_sync, new_be=new_be,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2273
            _parsable_version=parsable_version, pkgs_inst=pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2274
            refresh_catalogs=refresh_catalogs, reject_list=reject_pats,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2275
            update_index=update_index)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2276
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2277
def uninstall(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2278
    be_activate, backup_be, backup_be_name, be_name, new_be, li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2279
    update_index, noexecute, parsable_version, quiet, verbose, stage):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2280
        """Attempt to take package specified to DELETED state."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2281
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2282
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2283
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
32
c26788b7217c begin client install; sequences are now timestamps; skeleton ELF module
Stephen Hahn <sch@sun.com>
parents: 30
diff changeset
  2284
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
  2285
        if not pargs:
1774
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
  2286
                usage(_("at least one package name required"), cmd=op)
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
  2287
326
0f1ba0508d1b 583 src/pkg-server.xml missing a CDDL block
Dan Price <dp@eng.sun.com>
parents: 323
diff changeset
  2288
        if verbose and quiet:
1774
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
  2289
                usage(_("-v and -q may not be combined"), cmd=op)
2946fbd3ba3d 14292 pkg list doesn't exit with partial failure when some names are unmatched
Shawn Walker <srw@sun.com>
parents: 1758
diff changeset
  2290
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2291
        rval, res = get_fmri_args(api_inst, pargs, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2292
        if not rval:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2293
                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
  2294
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2295
        return __api_op(op, api_inst, _li_ignore=li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2296
            _noexecute=noexecute, _quiet=quiet, _stage=stage,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2297
            _verbose=verbose, backup_be=backup_be,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2298
            backup_be_name=backup_be_name, be_activate=be_activate,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2299
            be_name=be_name, new_be=new_be, _parsable_version=parsable_version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2300
            pkgs_to_uninstall=pargs, update_index=update_index)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2301
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2302
def update(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2303
    accept, backup_be, backup_be_name, be_activate, be_name, force, li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2304
    li_parent_sync, new_be, noexecute, origins, parsable_version, quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2305
    refresh_catalogs, reject_pats, show_licenses, stage, update_index, verbose):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2306
        """Attempt to take all installed packages specified to latest
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2307
        version."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2308
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2309
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2310
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2311
1835
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
  2312
        rval, res = get_fmri_args(api_inst, pargs, cmd=op)
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
  2313
        if not rval:
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
  2314
                return EXIT_OOPS
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
  2315
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2316
        xrval, xres = get_fmri_args(api_inst, reject_pats, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2317
        if not xrval:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2318
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2319
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2320
        api_inst.set_stage(stage)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2321
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2322
        if res and "*" not in pargs and "*@*" not in pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2323
                # If there are specific installed packages to update,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2324
                # then take only those packages to the latest version
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2325
                # allowed by the patterns specified.  (The versions
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2326
                # specified can be older than what is installed.)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2327
                pkgs_update = pargs
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2328
                review_release_notes = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2329
        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2330
                # If no packages were specified, or '*' was one of the
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2331
                # patterns provided, attempt to update all installed packages.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2332
                pkgs_update = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2333
                review_release_notes = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2334
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2335
        return __api_op(op, api_inst, _accept=accept, _li_ignore=li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2336
            _noexecute=noexecute, _origins=origins,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2337
            _parsable_version=parsable_version, _quiet=quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2338
            _review_release_notes=review_release_notes,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2339
            _show_licenses=show_licenses, _stage=stage, _verbose=verbose,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2340
            backup_be=backup_be, backup_be_name=backup_be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2341
            be_activate=be_activate, be_name=be_name, force=force,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2342
            li_parent_sync=li_parent_sync, new_be=new_be,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2343
            pkgs_update=pkgs_update, refresh_catalogs=refresh_catalogs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2344
            reject_list=reject_pats, update_index=update_index)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2345
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2346
def revert(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2347
    backup_be, backup_be_name, be_activate, be_name, new_be, noexecute,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2348
    parsable_version, quiet, tagged, verbose):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2349
        """Attempt to revert files to their original state, either
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2350
        via explicit path names or via tagged contents."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2351
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2352
        if not pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2353
                usage(_("at least one file path or tag name required"), cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2354
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2355
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2356
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2357
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2358
        return __api_op(op, api_inst, _noexecute=noexecute, _quiet=quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2359
            _verbose=verbose, be_activate=be_activate, be_name=be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2360
            new_be=new_be, _parsable_version=parsable_version, args=pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2361
            tagged=tagged)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2362
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2363
def list_mediators(op, api_inst, pargs, omit_headers, output_format,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2364
    list_available):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2365
        """Display configured or available mediator version(s) and
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2366
        implementation(s)."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2367
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2368
        subcommand = "mediator"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2369
        if output_format is None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2370
                output_format = "default"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2371
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2372
        # mediator information is returned as a dictionary of dictionaries
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2373
        # of version and implementation indexed by mediator name.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2374
        mediations = collections.defaultdict(list)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2375
        if list_available:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2376
                gen_mediators = api_inst.gen_available_mediators()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2377
        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2378
                # Configured mediator information
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2379
                gen_mediators = (
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2380
                    (mediator, mediation)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2381
                    for mediator, mediation in api_inst.mediators.iteritems()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2382
                )
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2383
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2384
        # Set minimum widths for mediator and version columns by using the
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2385
        # length of the column headers and values to be displayed.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2386
        mediators = set()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2387
        max_mname_len = len(_("MEDIATOR"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2388
        max_vsrc_len = len(_("VER. SRC."))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2389
        max_version_len = len(_("VERSION"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2390
        max_isrc_len = len(_("IMPL. SRC."))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2391
        for mname, values in gen_mediators:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2392
                max_mname_len = max(max_mname_len, len(mname))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2393
                med_version = values.get("version", "")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2394
                max_version_len = max(max_version_len, len(med_version))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2395
                mediators.add(mname)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2396
                mediations[mname].append(values)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2397
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2398
        requested_mediators = set(pargs)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2399
        if requested_mediators:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2400
                found = mediators & requested_mediators
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2401
                notfound = requested_mediators - found
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2402
        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2403
                found = mediators
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2404
                notfound = set()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2405
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2406
        def gen_listing():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2407
                for mediator, mediation in (
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2408
                    (mname, mentry)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2409
                    for mname in sorted(found)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2410
                    for mentry in mediations[mname]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2411
                ):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2412
                        med_impl = mediation.get("implementation")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2413
                        med_impl_ver = mediation.get("implementation-version")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2414
                        if output_format == "default" and med_impl and \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2415
                            med_impl_ver:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2416
                                med_impl += "(@%s)" % med_impl_ver
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2417
                        yield {
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2418
                            "mediator": mediator,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2419
                            "version": mediation.get("version"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2420
                            "version-source": mediation.get("version-source"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2421
                            "implementation": med_impl,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2422
                            "implementation-source": mediation.get(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2423
                                "implementation-source"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2424
                            "implementation-version": med_impl_ver,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2425
                        }
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2426
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2427
        #    MEDIATOR VER. SRC.  VERSION IMPL. SRC. IMPLEMENTATION IMPL. VER.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2428
        #    <med_1>  <src_1>    <ver_1> <src_1>    <impl_1_value> <impl_1_ver>
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2429
        #    <med_2>  <src_2>    <ver_2> <src_2>    <impl_2_value> <impl_2_ver>
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2430
        #    ...
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2431
        field_data = {
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2432
            "mediator" : [("default", "json", "tsv"), _("MEDIATOR"), ""],
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2433
            "version" : [("default", "json", "tsv"), _("VERSION"), ""],
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2434
            "version-source": [("default", "json", "tsv"), _("VER. SRC."), ""],
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2435
            "implementation" : [("default", "json", "tsv"), _("IMPLEMENTATION"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2436
                ""],
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2437
            "implementation-source": [("default", "json", "tsv"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2438
                _("IMPL. SRC."), ""],
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2439
            "implementation-version" : [("json", "tsv"), _("IMPL. VER."), ""],
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2440
        }
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2441
        desired_field_order = (_("MEDIATOR"), _("VER. SRC."), _("VERSION"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2442
            _("IMPL. SRC."), _("IMPLEMENTATION"), _("IMPL. VER."))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2443
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2444
        # Default output formatting.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2445
        def_fmt = "%-" + str(max_mname_len) + "s %-" + str(max_vsrc_len) + \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2446
            "s %-" + str(max_version_len) + "s %-" + str(max_isrc_len) + "s %s"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2447
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2448
        if found or (not requested_mediators and output_format == "default"):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2449
                sys.stdout.write(misc.get_listing(desired_field_order,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2450
                    field_data, gen_listing(), output_format, def_fmt,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2451
                    omit_headers, escape_output=False))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2452
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2453
        if found and notfound:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2454
                return EXIT_PARTIAL
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2455
        if requested_mediators and not found:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2456
                if output_format == "default":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2457
                        # Don't pollute other output formats.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2458
                        error(_("no matching mediators found"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2459
                            cmd=subcommand)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2460
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2461
        return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2462
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2463
def set_mediator(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2464
    backup_be, backup_be_name, be_activate, be_name, med_implementation,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2465
    med_version, new_be, noexecute, parsable_version, quiet, update_index,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2466
    verbose):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2467
        """Set the version and/or implementation for the specified
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2468
        mediator(s)."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2469
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2470
        if not pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2471
                usage(_("at least one mediator must be specified"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2472
                    cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2473
        if not (med_version or med_implementation):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2474
                usage(_("a mediator version and/or implementation must be "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2475
                    "specified using -V and -I"), cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2476
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2477
        if verbose > 2:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2478
                DebugValues.set_value("plan", "True")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2479
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2480
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2481
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2482
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2483
        # Now set version and/or implementation for all matching mediators.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2484
        # The user may specify 'None' as a special value to explicitly
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2485
        # request mediations that do not have the related component.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2486
        mediators = collections.defaultdict(dict)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2487
        for m in pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2488
                if med_version == "":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2489
                        # Request reset of version.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2490
                        mediators[m]["version"] = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2491
                elif med_version == "None":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2492
                        # Explicit selection of no version.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2493
                        mediators[m]["version"] = ""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2494
                elif med_version:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2495
                        mediators[m]["version"] = med_version
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2496
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2497
                if med_implementation == "":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2498
                        # Request reset of implementation.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2499
                        mediators[m]["implementation"] = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2500
                elif med_implementation == "None":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2501
                        # Explicit selection of no implementation.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2502
                        mediators[m]["implementation"] = ""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2503
                elif med_implementation:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2504
                        mediators[m]["implementation"] = med_implementation
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2505
1543
223040b72119 13039 various install/update operations can traceback if nothing to do
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2506
        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
  2507
        try:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2508
                for pd in api_inst.gen_plan_set_mediators(mediators,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2509
                    noexecute=noexecute, backup_be=backup_be,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2510
                    backup_be_name=backup_be_name, be_name=be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2511
                    new_be=new_be, be_activate=be_activate):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2512
                        continue
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2513
                stuff_to_do = not api_inst.planned_nothingtodo()
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2514
        except:
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  2515
                ret_code = __api_plan_exception(op, api_inst, noexecute,
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  2516
                    verbose)
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  2517
                if ret_code != EXIT_OK:
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  2518
                        return ret_code
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2519
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1266
diff changeset
  2520
        if not stuff_to_do:
2537
82ca1bf8d191 18178 verbose planning information is not displayed if plan results in "nothing to do"
Shawn Walker <shawn.walker@oracle.com>
parents: 2107
diff changeset
  2521
                if verbose:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2522
                        __display_plan(api_inst, verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2523
                if parsable_version is not None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2524
                        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2525
                                __display_parsable_plan(api_inst,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2526
                                    parsable_version)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2527
                        except api_errors.ApiException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2528
                                error(e, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2529
                                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2530
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2531
                        msg(_("No changes required."))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2532
                return EXIT_NOP
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  2533
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  2534
        if not quiet:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2535
                __display_plan(api_inst, verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2536
        if parsable_version is not None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2537
                try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2538
                        __display_parsable_plan(api_inst, parsable_version)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2539
                except api_errors.ApiException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2540
                        error(e, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2541
                        return EXIT_OOPS
2034
d5ee7746faeb 16108 boot environments should be created by default only when needed
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2028
diff changeset
  2542
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  2543
        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
  2544
                return EXIT_OK
329
f549eab0d7b7 735 install -n uninformative
Dan Price <dp@eng.sun.com>
parents: 327
diff changeset
  2545
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2546
        ret_code = __api_prepare(op, api_inst, accept=False)
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2547
        if ret_code != EXIT_OK:
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2548
                return ret_code
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2549
1859
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1857
diff changeset
  2550
        ret_code = __api_execute_plan(op, api_inst)
271
ec8a7669bff2 659 package that delivers existing automounter mountpoint fails installation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 266
diff changeset
  2551
251
6c3d70b74865 470 pkg image-update can fail under some conditions
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 243
diff changeset
  2552
        return ret_code
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  2553
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2554
def unset_mediator(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2555
    backup_be, backup_be_name, be_activate, be_name, med_implementation,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2556
    med_version, new_be, noexecute, parsable_version, quiet, update_index,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2557
    verbose):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2558
        """Unset the version and/or implementation for the specified
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2559
        mediator(s)."""
66
e307f4f837c3 support package removal
Danek Duvall <danek.duvall@sun.com>
parents: 63
diff changeset
  2560
361
5aca6ca29a5d 1612 pkg contents doesn't give me the manifest I asked for
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 344
diff changeset
  2561
        if not pargs:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2562
                usage(_("at least one mediator must be specified"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2563
                    cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2564
        if verbose > 2:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2565
                DebugValues.set_value("plan", "True")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2566
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2567
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2568
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2569
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2570
        # Build dictionary of mediators to unset based on input.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2571
        mediators = collections.defaultdict(dict)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2572
        if not (med_version or med_implementation):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2573
                # Unset both if nothing specific requested.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2574
                med_version = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2575
                med_implementation = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2576
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2577
        # Now unset version and/or implementation for all matching mediators.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2578
        for m in pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2579
                if med_version:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2580
                        mediators[m]["version"] = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2581
                if med_implementation:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2582
                        mediators[m]["implementation"] = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2583
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2584
        stuff_to_do = None
432
578875da6e04 48 Removing a dependency is not flagged, and recovery is not obvious
Danek Duvall <danek.duvall@sun.com>
parents: 431
diff changeset
  2585
        try:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2586
                for pd in api_inst.gen_plan_set_mediators(mediators,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2587
                    noexecute=noexecute, backup_be=backup_be,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2588
                    backup_be_name=backup_be_name, be_name=be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2589
                    new_be=new_be, be_activate=be_activate):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2590
                        continue
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2591
                stuff_to_do = not api_inst.planned_nothingtodo()
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2592
        except:
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2593
                ret_code = __api_plan_exception(op, api_inst, noexecute,
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2594
                    verbose)
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2595
                if ret_code != EXIT_OK:
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2596
                        return ret_code
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2597
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2598
        if not stuff_to_do:
2537
82ca1bf8d191 18178 verbose planning information is not displayed if plan results in "nothing to do"
Shawn Walker <shawn.walker@oracle.com>
parents: 2107
diff changeset
  2599
                if verbose:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2600
                        __display_plan(api_inst, verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2601
                if parsable_version is not None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2602
                        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2603
                                __display_parsable_plan(api_inst,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2604
                                    parsable_version)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2605
                        except api_errors.ApiException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2606
                                error(e, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2607
                                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2608
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2609
                        msg(_("No changes required."))
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2610
                return EXIT_NOP
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2611
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2612
        if not quiet:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2613
                __display_plan(api_inst, verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2614
        if parsable_version is not None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2615
                try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2616
                        __display_parsable_plan(api_inst, parsable_version)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2617
                except api_errors.ApiException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2618
                        error(e, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2619
                        return EXIT_OOPS
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2620
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2621
        if noexecute:
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2622
                return EXIT_OK
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2623
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2624
        ret_code = __api_prepare(op, api_inst, accept=False)
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2625
        if ret_code != EXIT_OK:
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2626
                return ret_code
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2627
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2628
        ret_code = __api_execute_plan(op, api_inst)
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2629
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2630
        return ret_code
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  2631
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2632
def avoid(api_inst, args):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2633
        """Place the specified packages on the avoid list"""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2634
        if not args:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2635
                return __display_avoids(api_inst)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2636
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2637
        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2638
                api_inst.avoid_pkgs(args)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2639
                return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2640
        except:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2641
                return __api_plan_exception("avoid", False, 0, api_inst)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2642
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2643
def unavoid(api_inst, args):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2644
        """Remove the specified packages from the avoid list"""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2645
        if not args:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2646
                return __display_avoids(api_inst)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2647
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2648
        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2649
                api_inst.avoid_pkgs(args, unavoid=True)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2650
                return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2651
        except:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2652
                return __api_plan_exception("unavoid", False, 0, api_inst)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2653
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2654
def __display_avoids(api_inst):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2655
        """Display the current avoid list, and the pkgs that are tracking
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2656
        that pkg"""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2657
        for a in api_inst.get_avoid_list():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2658
                tracking = " ".join(a[1])
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2659
                if tracking:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2660
                        logger.info(_("    %s (group dependency of '%s')")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2661
                            % (a[0], tracking))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2662
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2663
                        logger.info("    %s" % a[0])
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2664
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2665
        return EXIT_OK
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  2666
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2667
def freeze(api_inst, args):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2668
        """Place the specified packages on the frozen list"""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2669
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2670
        opts, pargs = getopt.getopt(args, "Hc:n")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2671
        comment = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2672
        display_headers = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2673
        dry_run = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2674
        for opt, arg in opts:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2675
                if opt == "-H":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2676
                        display_headers = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2677
                elif opt == "-c":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2678
                        comment = arg
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2679
                elif opt == "-n":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2680
                        dry_run = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2681
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2682
        if comment and not pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2683
                usage(usage_error=_("At least one package to freeze must be "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2684
                    "given when -c is used."), cmd="freeze")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2685
        if not display_headers and pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2686
                usage(usage_error=_("-H may only be specified when listing the "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2687
                    "currently frozen packages."))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2688
        if not pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2689
                return __display_cur_frozen(api_inst, display_headers)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2690
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2691
        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2692
                pfmris = api_inst.freeze_pkgs(pargs, dry_run=dry_run,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2693
                    comment=comment)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2694
                for pfmri in pfmris:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2695
                        vertext = pfmri.version.get_short_version()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2696
                        ts = pfmri.version.get_timestamp()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2697
                        if ts:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2698
                                vertext += ":" + pfmri.version.timestr
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2699
                        logger.info(_("%(name)s was frozen at %(ver)s") %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2700
                            {"name": pfmri.pkg_name, "ver": vertext})
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2701
                return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2702
        except api_errors.FreezePkgsException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2703
                error("\n%s" % e, cmd="freeze")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2704
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2705
        except:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2706
                return __api_plan_exception("freeze", False, 0, api_inst)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2707
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2708
def unfreeze(api_inst, args):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2709
        """Remove the specified packages from the frozen list"""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2710
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2711
        opts, pargs = getopt.getopt(args, "Hn")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2712
        display_headers = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2713
        dry_run = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2714
        for opt, arg in opts:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2715
                if opt == "-H":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2716
                        display_headers = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2717
                elif opt == "-n":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2718
                        dry_run = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2719
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2720
        if not pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2721
                return __display_cur_frozen(api_inst, display_headers)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2722
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2723
        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2724
                pkgs = api_inst.freeze_pkgs(pargs, unfreeze=True,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2725
                    dry_run=dry_run)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2726
                if not pkgs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2727
                        return EXIT_NOP
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2728
                for s in pkgs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2729
                        logger.info(_("%s was unfrozen.") % s)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2730
                return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2731
        except:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2732
                return __api_plan_exception("unfreeze", False, 0, api_inst)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2733
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2734
def __display_cur_frozen(api_inst, display_headers):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2735
        """Display the current frozen list"""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2736
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2737
        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2738
                lst = sorted(api_inst.get_frozen_list())
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2739
        except api_errors.ApiException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2740
                error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2741
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2742
	if len(lst) == 0:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2743
                return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2744
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2745
        fmt = "%(name)-18s %(ver)-27s %(time)-24s %(comment)s"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2746
        if display_headers:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2747
                logger.info(fmt % {
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2748
                    "name": _("NAME"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2749
                    "ver": _("VERSION"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2750
                    "time": _("DATE"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2751
                    "comment": _("COMMENT")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2752
                })
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2753
        
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2754
        for pfmri, comment, timestamp in lst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2755
                vertext = pfmri.version.get_short_version()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2756
                ts = pfmri.version.get_timestamp()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2757
                if ts:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2758
                        vertext += ":" + pfmri.version.timestr
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2759
                if not comment:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2760
                        comment = "None"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2761
                logger.info(fmt % {
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2762
                    "name": pfmri.pkg_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2763
                    "comment": comment,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2764
                    "time": time.strftime("%d %b %Y %H:%M:%S %Z",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2765
                                time.localtime(timestamp)),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2766
                    "ver": vertext
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2767
                })
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2768
        return EXIT_OK
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  2769
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2770
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
  2771
        """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
  2772
        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
  2773
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  2774
        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
  2775
1100
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  2776
        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
  2777
        below.
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  2778
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  2779
        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
  2780
        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
  2781
        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
  2782
        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
  2783
        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
  2784
        states which value matched the query."""
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  2785
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2786
        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
  2787
        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
  2788
                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
  2789
        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
  2790
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2791
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
  2792
        """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
  2793
        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
  2794
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2795
        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
  2796
                return match
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2797
        if match == "basename":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2798
                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
  2799
        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
  2800
        if r:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2801
                return r
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2802
        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
  2803
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2804
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
  2805
        """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
  2806
        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
  2807
        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
  2808
        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
  2809
        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
  2810
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2811
        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
  2812
                return match
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2813
        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
  2814
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2815
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
  2816
        """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
  2817
        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
  2818
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  2819
        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
  2820
        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
  2821
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  2822
        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
  2823
        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
  2824
        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
  2825
        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
  2826
        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
  2827
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2828
        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
  2829
        the result was obtained."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2830
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2831
        action = None
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2832
        match = None
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2833
        match_type = None
1100
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  2834
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2835
        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
  2836
                try:
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  2837
                        pfmri, match, action = tup
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  2838
                except ValueError:
1895
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  2839
                        error(_("The repository returned a malformed result.\n"
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  2840
                            "The problematic structure:%r") % (tup,))
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  2841
                        return False
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  2842
                try:
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2843
                        action = actions.fromstr(action.rstrip())
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  2844
                except actions.ActionError, e:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  2845
                        error(_("The repository returned an invalid or "
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  2846
                            "unsupported action.\n%s") % e)
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  2847
                        return False
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2848
                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
  2849
                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
  2850
        else:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2851
                pfmri = tup
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2852
        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
  2853
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2854
def search(api_inst, args):
1100
22a8b08d460a 7364 documentation and code comments needed for fix for 6175
Brock Pytlik <bpytlik@sun.com>
parents: 1094
diff changeset
  2855
        """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
  2856
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2857
        # 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
  2858
        page_timeout = .5
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2859
        max_timeout = 5
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2860
        min_page_size = 5
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2861
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2862
        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
  2863
        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
  2864
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2865
        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
  2866
        search_prefixes.extend(["search."])
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2867
1843
b9333a197e40 6177 filtering search against a particular incorporation is needed
Brock Pytlik <bpytlik@sun.com>
parents: 1835
diff changeset
  2868
        opts, pargs = getopt.getopt(args, "Haflo:prs:I")
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2869
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2870
        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
  2871
            "search.match", "pkg.shortfmri"]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2872
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2873
        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
  2874
499
ff214b0daeb1 2672 Search should allow for case insensitive search.
Brock Pytlik <bpytlik@sun.com>
parents: 497
diff changeset
  2875
        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
  2876
        servers = []
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2877
        attrs = []
1843
b9333a197e40 6177 filtering search against a particular incorporation is needed
Brock Pytlik <bpytlik@sun.com>
parents: 1835
diff changeset
  2878
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2879
        display_headers = True
1843
b9333a197e40 6177 filtering search against a particular incorporation is needed
Brock Pytlik <bpytlik@sun.com>
parents: 1835
diff changeset
  2880
        prune_versions = True
b9333a197e40 6177 filtering search against a particular incorporation is needed
Brock Pytlik <bpytlik@sun.com>
parents: 1835
diff changeset
  2881
        return_actions = True
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2882
        use_default_attrs = True
1843
b9333a197e40 6177 filtering search against a particular incorporation is needed
Brock Pytlik <bpytlik@sun.com>
parents: 1835
diff changeset
  2883
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  2884
        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
  2885
                if opt == "-H":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2886
                        display_headers = False
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2887
                elif opt == "-a":
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2888
                        return_actions = True
1843
b9333a197e40 6177 filtering search against a particular incorporation is needed
Brock Pytlik <bpytlik@sun.com>
parents: 1835
diff changeset
  2889
                elif opt == "-f":
b9333a197e40 6177 filtering search against a particular incorporation is needed
Brock Pytlik <bpytlik@sun.com>
parents: 1835
diff changeset
  2890
                        prune_versions = False
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2891
                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
  2892
                        local = True
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2893
                elif opt == "-o":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2894
                        attrs.extend(arg.split(","))
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2895
                        use_default_attrs = False
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2896
                elif opt == "-p":
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2897
                        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
  2898
                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
  2899
                        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
  2900
                elif opt == "-s":
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  2901
                        remote = True
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2902
                        servers.append({
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  2903
                            "origin": misc.parse_uri(arg, cwd=orig_cwd) })
499
ff214b0daeb1 2672 Search should allow for case insensitive search.
Brock Pytlik <bpytlik@sun.com>
parents: 497
diff changeset
  2904
                elif opt == "-I":
ff214b0daeb1 2672 Search should allow for case insensitive search.
Brock Pytlik <bpytlik@sun.com>
parents: 497
diff changeset
  2905
                        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
  2906
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  2907
        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
  2908
                remote = True
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2909
204
8f650d596aec 72 pkg command throws an exception when no search arguments are given
Danek Duvall <danek.duvall@sun.com>
parents: 201
diff changeset
  2910
        if not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  2911
                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
  2912
                    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
  2913
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2914
        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
  2915
            prefixes=search_prefixes)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2916
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2917
        action_attr = False
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2918
        for a in attrs:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2919
                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
  2920
                        action_attr = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2921
                        if not return_actions:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2922
                                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
  2923
                                    "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
  2924
                                    cmd="search")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2925
                        break
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2926
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2927
        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
  2928
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2929
        try:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2930
                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
  2931
                    return_actions)]
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2932
        except api_errors.BooleanQueryException, e:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2933
                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
  2934
                return EXIT_OOPS
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  2935
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  2936
        good_res = False
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  2937
        bad_res = False
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  2938
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2939
        try:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2940
                if local:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2941
                        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
  2942
                if remote:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2943
                        searches.append(api_inst.remote_search(query,
1843
b9333a197e40 6177 filtering search against a particular incorporation is needed
Brock Pytlik <bpytlik@sun.com>
parents: 1835
diff changeset
  2944
                            servers=servers, prune_versions=prune_versions))
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  2945
                # 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
  2946
                retcode = EXIT_OOPS
302
a5268194080e 981 pkg search could have more useful output
Danek Duvall <danek.duvall@sun.com>
parents: 301
diff changeset
  2947
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2948
                # 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
  2949
                justs = calc_justs(attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2950
                page_again = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2951
                widths = []
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2952
                st = None
1628
82c58b51e409 12739 remote search returns no results if one depot fails
Brock Pytlik <bpytlik@sun.com>
parents: 1618
diff changeset
  2953
                err = None
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2954
                header_attrs = attrs
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  2955
                last_line = None
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  2956
                shown_headers = False
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2957
                while page_again:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2958
                        unprocessed_res = []
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2959
                        page_again = False
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2960
                        # 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
  2961
                        # 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
  2962
                        # results, then propogate the error.
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  2963
                        try:
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2964
                                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
  2965
                                        if not st:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2966
                                                st = time.time()
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2967
                                        try:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2968
                                                query_num, pub, \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2969
                                                    (v, return_type, tmp) = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2970
                                                    raw_value
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2971
                                        except ValueError, e:
1895
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  2972
                                                error(_("The repository "
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  2973
                                                    "returned a malformed "
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  2974
                                                    "result:%r") %
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2975
                                                    (raw_value,))
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2976
                                                bad_res = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2977
                                                continue
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2978
                                        # 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
  2979
                                        # 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
  2980
                                        # using the <> operator.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2981
                                        if action_attr and \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2982
                                            return_type != \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2983
                                            api.Query.RETURN_ACTIONS:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2984
                                                usage(_("action level options "
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2985
                                                    "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
  2986
                                                    "the queries that return "
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2987
                                                    "packages"), cmd="search")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2988
                                        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
  2989
                                                if return_type == \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2990
                                                    api.Query.RETURN_ACTIONS:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2991
                                                        attrs = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2992
                                                            default_attrs_action
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2993
                                                        header_attrs = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2994
                                                            ["index", "action",
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2995
                                                            "value", "package"]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2996
                                                else:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2997
                                                        attrs = default_attrs_package
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2998
                                                        header_attrs = \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  2999
                                                            ["package",
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3000
                                                            "publisher"]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3001
                                                justs = calc_justs(attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3002
                                        ret = v1_extract_info(
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3003
                                            tmp, return_type, pub)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3004
                                        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
  3005
                                        if ret:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3006
                                                good_res = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3007
                                                unprocessed_res.append(ret)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3008
                                        # 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
  3009
                                        # should be increased.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3010
                                        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
  3011
                                                if len(unprocessed_res) > \
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3012
                                                    min_page_size:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3013
                                                        page_again = True
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3014
                                                        break
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3015
                                                else:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3016
                                                        page_timeout = min(
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3017
                                                            page_timeout * 2,
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3018
                                                            max_timeout)
1628
82c58b51e409 12739 remote search returns no results if one depot fails
Brock Pytlik <bpytlik@sun.com>
parents: 1618
diff changeset
  3019
                        except api_errors.ApiException, e:
82c58b51e409 12739 remote search returns no results if one depot fails
Brock Pytlik <bpytlik@sun.com>
parents: 1618
diff changeset
  3020
                                err = e
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3021
                        lines = produce_lines(unprocessed_res, attrs,
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3022
                            show_all=True, remove_consec_dup_lines=True,
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3023
                            last_res=last_line)
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3024
                        if not lines:
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3025
                                continue
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3026
                        old_widths = widths[:]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3027
                        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
  3028
                        # 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
  3029
                        # 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
  3030
                        # the new widths.
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3031
                        if display_headers and (not shown_headers or
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3032
                            old_widths[:-1] != widths[:-1]):
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3033
                                shown_headers = True
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3034
                                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
  3035
                        for line in lines:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3036
                                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
  3037
                                    widths, justs, line) %
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3038
                                    tuple(line)).rstrip())
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3039
                        last_line = lines[-1]
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3040
                        st = time.time()
1628
82c58b51e409 12739 remote search returns no results if one depot fails
Brock Pytlik <bpytlik@sun.com>
parents: 1618
diff changeset
  3041
                if err:
82c58b51e409 12739 remote search returns no results if one depot fails
Brock Pytlik <bpytlik@sun.com>
parents: 1618
diff changeset
  3042
                        raise err
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3043
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3044
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  3045
        except (api_errors.IncorrectIndexFileHash,
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  3046
            api_errors.InconsistentIndexException):
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  3047
                error(_("The search index appears corrupted.  Please "
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  3048
                    "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
  3049
                return EXIT_OOPS
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  3050
        except api_errors.ProblematicSearchServers, e:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  3051
                error(e)
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  3052
                bad_res = True
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  3053
        except api_errors.SlowSearchUsed, e:
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  3054
                error(e)
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  3055
        except (api_errors.IncorrectIndexFileHash,
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  3056
            api_errors.InconsistentIndexException):
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  3057
                error(_("The search index appears corrupted.  Please "
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  3058
                    "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
  3059
                return EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3060
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3061
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3062
                return EXIT_OOPS
1053
00fe9773d072 8098 parsing errors should not cause a stacktrace
Brock Pytlik <bpytlik@sun.com>
parents: 1052
diff changeset
  3063
        except api_errors.ApiException, e:
00fe9773d072 8098 parsing errors should not cause a stacktrace
Brock Pytlik <bpytlik@sun.com>
parents: 1052
diff changeset
  3064
                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
  3065
                return EXIT_OOPS
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  3066
        if good_res and bad_res:
1628
82c58b51e409 12739 remote search returns no results if one depot fails
Brock Pytlik <bpytlik@sun.com>
parents: 1618
diff changeset
  3067
                retcode = EXIT_PARTIAL
1052
b022868f7356 6251 Unpacking value errors leave unhelpful messages
Brock Pytlik <bpytlik@sun.com>
parents: 1050
diff changeset
  3068
        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
  3069
                retcode = EXIT_OOPS
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3070
        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
  3071
                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
  3072
        return retcode
60
6bd5cd83cfb1 Reverse index database and searching support.
Danek Duvall <danek.duvall@sun.com>
parents: 59
diff changeset
  3073
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3074
def info(api_inst, args):
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3075
        """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
  3076
        """
195
b23d0425f0f7 11 use FMRIs with fully specified authorities internally
johansen <johansen@sun.com>
parents: 192
diff changeset
  3077
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3078
        display_license = False
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3079
        info_local = False
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3080
        info_remote = False
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3081
        origins = set()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3082
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3083
        opts, pargs = getopt.getopt(args, "g:lr", ["license"])
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3084
        for opt, arg in opts:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3085
                if opt == "-g":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3086
                        origins.add(misc.parse_uri(arg, cwd=orig_cwd))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3087
                        info_remote = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3088
                elif opt == "-l":
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3089
                        info_local = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3090
                elif opt == "-r":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3091
                        info_remote = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3092
                elif opt == "--license":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3093
                        display_license = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3094
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3095
        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
  3096
                info_local = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3097
        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
  3098
                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
  3099
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3100
        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
  3101
                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
  3102
                    cmd="info")
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  3103
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3104
        err = 0
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3105
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3106
        api_inst.progresstracker = get_tracker(quiet=True)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3107
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3108
        info_needed = api.PackageInfo.ALL_OPTIONS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3109
        if not display_license:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3110
                info_needed = api.PackageInfo.ALL_OPTIONS - \
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3111
                    frozenset([api.PackageInfo.LICENSES])
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3112
        info_needed -= api.PackageInfo.ACTION_OPTIONS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3113
        info_needed |= frozenset([api.PackageInfo.DEPENDENCIES])
1835
13fdfa2f7993 15029 pkg list can traceback if character only allowed with wildcards used
Shawn Walker <shawn.walker@oracle.com>
parents: 1834
diff changeset
  3114
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3115
        try:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3116
                ret = api_inst.info(pargs, info_local, info_needed,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3117
                    ranked=info_remote, repos=origins)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3118
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3119
                format_update_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
  3120
                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
  3121
        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
  3122
                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
  3123
                return EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3124
        except api_errors.ApiException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3125
                error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3126
                return EXIT_OOPS
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3127
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3128
        pis = ret[api.ImageInterface.INFO_FOUND]
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3129
        notfound = ret[api.ImageInterface.INFO_MISSING]
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3130
        illegals = ret[api.ImageInterface.INFO_ILLEGALS]
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3131
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3132
        if illegals:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3133
                # No other results will be returned if illegal patterns were
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3134
                # specified.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3135
                for i in illegals:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3136
                        logger.error(str(i))
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3137
                return EXIT_OOPS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3138
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  3139
        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
  3140
        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
  3141
                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
  3142
                        msg("")
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  3143
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3144
                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
  3145
                        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
  3146
                                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
  3147
                        else:
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  3148
                                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
  3149
                                        msg(lic)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3150
                        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
  3151
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  3152
                state = ""
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3153
                if api.PackageInfo.INSTALLED in pi.states:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3154
                        state = _("Installed")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3155
                elif api.PackageInfo.UNSUPPORTED in pi.states:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3156
                        state = _("Unsupported")
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3157
                else:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3158
                        state = _("Not installed")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3159
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3160
                lparen = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3161
                if api.PackageInfo.OBSOLETE in pi.states:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3162
                        state += " (%s" % _("Obsolete")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3163
                        lparen = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3164
                elif api.PackageInfo.RENAMED in pi.states:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3165
                        state += " (%s" % _("Renamed")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3166
                        lparen = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3167
                if api.PackageInfo.FROZEN in pi.states:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3168
                        if lparen:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3169
                                state += ", %s)" % _("Frozen")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3170
                        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3171
                                state += " (%s)" % _("Frozen")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3172
                elif lparen:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3173
                        state += ")"
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  3174
688
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  3175
                name_str = _("          Name:")
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  3176
                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
  3177
                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
  3178
                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
  3179
                        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
  3180
                        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
  3181
                        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
  3182
                        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
  3183
                            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
  3184
                        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
  3185
                        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
  3186
                        msg(desc_label, res)
688
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  3187
                if pi.category_info_list:
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  3188
                        verbose = len(pi.category_info_list) > 1
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  3189
                        msg(_("      Category:"),
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  3190
                            pi.category_info_list[0].__str__(verbose))
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  3191
                        if len(pi.category_info_list) > 1:
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  3192
                                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
  3193
                                        msg(" " * len(name_str),
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  3194
                                            ci.__str__(verbose))
32a3ca40676e 4260 pkg info should print the classification
Brock Pytlik <bpytlik@sun.com>
parents: 685
diff changeset
  3195
615
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  3196
                msg(_("         State:"), state)
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  3197
1801
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1795
diff changeset
  3198
                # Renamed packages have dependencies, but the dependencies
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1795
diff changeset
  3199
                # may not apply to this image's variants so won't be
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1795
diff changeset
  3200
                # returned.
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  3201
                if api.PackageInfo.RENAMED in pi.states:
1801
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1795
diff changeset
  3202
                        renamed_to = ""
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1795
diff changeset
  3203
                        if pi.dependencies:
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1795
diff changeset
  3204
                                renamed_to = pi.dependencies[0]
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1795
diff changeset
  3205
                        msg(_("    Renamed to:"), renamed_to)
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  3206
                        for dep in pi.dependencies[1:]:
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  3207
                                msg(" " * len(name_str), dep)
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1431
diff changeset
  3208
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3209
                # 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
  3210
                msg(_("     Publisher:"), pi.publisher)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3211
                hum_ver = pi.get_attr_values("pkg.human-version")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3212
                if hum_ver and hum_ver[0] != pi.version:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3213
                        msg(_("       Version:"), "%s (%s)" %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3214
                            (pi.version, hum_ver[0]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3215
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3216
                        msg(_("       Version:"), pi.version)
615
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  3217
                msg(_(" Build Release:"), pi.build_release)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  3218
                msg(_("        Branch:"), pi.branch)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  3219
                msg(_("Packaging Date:"), pi.packaging_date)
aeeeb9f31173 4114 Api.Info needs to provide more info
Brock Pytlik <bpytlik@sun.com>
parents: 611
diff changeset
  3220
                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
  3221
                msg(_("          FMRI:"), pi.fmri)
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3222
                # XXX add license/copyright info here?
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  3223
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3224
        if notfound:
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3225
                if pis:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3226
                        err = EXIT_PARTIAL
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3227
                        logger.error("")
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3228
                else:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3229
                        err = EXIT_OOPS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3230
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3231
                if info_local:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3232
                        logger.error(_("""\
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3233
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
  3234
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
  3235
                elif info_remote:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3236
                        logger.error(_("""\
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3237
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
  3238
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
  3239
examining the catalogs:"""))
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3240
                logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3241
                for p in notfound:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3242
                        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
  3243
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  3244
        if no_licenses:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3245
                if len(no_licenses) == len(pis):
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3246
                        err = EXIT_OOPS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3247
                else:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3248
                        err = EXIT_PARTIAL
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  3249
                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
  3250
                    "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
  3251
                for pfmri in no_licenses:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3252
                        logger.error("\t%s" % pfmri)
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3253
        return err
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3254
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3255
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
  3256
        """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
  3257
        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
  3258
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3259
        if not widths:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3260
                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
  3261
        for l in lines:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3262
                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
  3263
                        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
  3264
                                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
  3265
        return widths
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3266
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3267
def calc_justs(attrs):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3268
        """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
  3269
        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
  3270
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3271
        def __chose_just(attr):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3272
                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
  3273
                    "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
  3274
                        return JUST_LEFT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3275
                return JUST_UNKNOWN
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3276
        return [ __chose_just(attr) for attr in attrs ]
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3277
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3278
def produce_lines(actionlist, attrs, action_types=None, show_all=False,
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3279
    remove_consec_dup_lines=False, last_res=None):
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3280
        """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
  3281
        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
  3282
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3283
        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
  3284
        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
  3285
        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
  3286
        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
  3287
        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
  3288
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3289
        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
  3290
        should be displayed.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3291
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3292
        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
  3293
        that should be displayed.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3294
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3295
        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
  3296
        or more of the desired attributes will be displayed or not.
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3297
1752
b62d86fb62c8 14515 client can traceback during search
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
  3298
        The "remove_consec_dup_lines" parameter determines whether consecutive
b62d86fb62c8 14515 client can traceback during search
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
  3299
        duplicate lines should be removed from the results.
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3300
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3301
        The "last_res" paramter is a seed to compare the first result against
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3302
        for duplicate removal.
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3303
        """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3304
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3305
        # Assert that if last_res is set, we should be removing duplicate
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3306
        # lines.
1752
b62d86fb62c8 14515 client can traceback during search
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
  3307
        assert(remove_consec_dup_lines or not last_res)
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  3308
        lines = []
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3309
        if last_res:
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3310
                lines.append(last_res)
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3311
        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
  3312
                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
  3313
                        continue
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3314
                line = []
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3315
                for attr in attrs:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3316
                        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
  3317
                                a = action.attrs[attr]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3318
                        elif attr == "action.name":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3319
                                a = action.name
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3320
                        elif attr == "action.key":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3321
                                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
  3322
                        elif attr == "action.raw":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3323
                                a = action
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3324
                        elif attr in ("hash", "action.hash"):
1563
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3325
                                a = getattr(action, "hash", "")
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3326
                        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
  3327
                                a = pfmri.get_name()
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3328
                        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
  3329
                                a = pfmri
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3330
                        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
  3331
                                a = pfmri.get_short_fmri()
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3332
                        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
  3333
                                a = pfmri.get_publisher()
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3334
                                if a is None:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3335
                                        a = pub
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3336
                                        if a is None:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3337
                                                a = ""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3338
                        elif attr == "search.match":
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3339
                                a = match
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3340
                        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
  3341
                                a = match_type
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3342
                        else:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3343
                                a = ""
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  3344
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3345
                        line.append(a)
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  3346
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3347
                if (line and [l for l in line if str(l) != ""] or show_all) \
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3348
                    and (not remove_consec_dup_lines or not lines or
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3349
                    lines[-1] != line):
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3350
                        lines.append(line)
1729
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3351
        if last_res:
4cee72755ae9 12271 consecutive duplicate search rows should be eliminated
Brock Pytlik <bpytlik@sun.com>
parents: 1715
diff changeset
  3352
                lines.pop(0)
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3353
        return lines
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3354
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3355
def default_left(v):
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3356
        """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
  3357
        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
  3358
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3359
        if v == JUST_UNKNOWN:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3360
                return JUST_LEFT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3361
        return v
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3362
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3363
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
  3364
        """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
  3365
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3366
        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
  3367
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3368
        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
  3369
        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
  3370
        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
  3371
        function.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3372
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3373
        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
  3374
        header."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3375
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3376
        headers = []
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3377
        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
  3378
                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
  3379
                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
  3380
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3381
        # 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
  3382
        # 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
  3383
        # pass to the %-expander.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3384
        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
  3385
        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
  3386
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3387
        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
  3388
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3389
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
  3390
        """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
  3391
        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
  3392
        should be left justified."""
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3393
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3394
        if j != JUST_UNKNOWN:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3395
                return j
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3396
        try:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3397
                int(v)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3398
                return JUST_RIGHT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3399
        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
  3400
                # 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
  3401
                # a list.
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3402
                return JUST_LEFT
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3403
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3404
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
  3405
        """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
  3406
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3407
        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
  3408
        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
  3409
        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
  3410
        formatting of the line.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3411
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3412
        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
  3413
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3414
        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
  3415
        column.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3416
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3417
        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
  3418
        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
  3419
        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
  3420
        """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3421
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3422
        if display_headers:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3423
                # 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
  3424
                # 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
  3425
                # pass to the %-expander.
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3426
                line_widths = [
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3427
                    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
  3428
                    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
  3429
                ]
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3430
                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
  3431
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3432
                return fmt
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3433
        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
  3434
        fmt.rstrip("\t")
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3435
        return fmt
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3436
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3437
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
  3438
    display_headers):
1857
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3439
        """Print results of a "list" operation.  Returns False if no output
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3440
        was produced."""
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3441
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3442
        justs = calc_justs(attrs)
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3443
        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
  3444
        widths = calc_widths(lines, attrs)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3445
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3446
        if sort_attrs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3447
                sortidx = 0
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3448
                for i, attr in enumerate(attrs):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3449
                        if attr == sort_attrs[0]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3450
                                sortidx = i
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3451
                                break
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3452
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3453
                # Sort numeric columns numerically.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3454
                if justs[sortidx] == JUST_RIGHT:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3455
                        def key_extract(x):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3456
                                try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3457
                                        return int(x[sortidx])
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3458
                                except (ValueError, TypeError):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3459
                                        return 0
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3460
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3461
                        key_extract = lambda x: x[sortidx]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3462
                line_gen = sorted(lines, key=key_extract)
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  3463
        else:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3464
                line_gen = lines
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  3465
1857
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3466
        printed_output = False
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3467
        for line in line_gen:
1857
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3468
                text = (create_output_format(display_headers, widths, justs,
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3469
                    line) % tuple(line)).rstrip()
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3470
                if not text:
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3471
                        continue
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3472
                if not printed_output and display_headers:
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3473
                        print_headers(attrs, widths, justs)
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3474
                printed_output = True
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3475
                msg(text)
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3476
        return printed_output
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3477
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3478
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
  3479
        """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
  3480
        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
  3481
        """
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3482
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3483
        if reference is None:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3484
                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
  3485
        if prefixes is None:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3486
                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
  3487
        for a in attrs:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3488
                for p in prefixes:
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3489
                        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
  3490
                                usage(_("Invalid attribute '%s'") % a, cmd)
162
275856fd67a7 Implement simple 'info' and 'list' subcommands.
Danek Duvall <danek.duvall@sun.com>
parents: 161
diff changeset
  3491
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3492
def list_contents(api_inst, args):
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3493
        """List package contents.
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3494
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3495
        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
  3496
        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
  3497
        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
  3498
        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
  3499
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3500
        opts, pargs = getopt.getopt(args, "Ha:g:o:s:t:mfr")
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3501
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3502
        subcommand = "contents"
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3503
        display_headers = True
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3504
        display_raw = False
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3505
        origins = set()
1857
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3506
        output_fields = False
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3507
        remote = False
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3508
        local = False
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3509
        attrs = []
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3510
        sort_attrs = []
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3511
        action_types = []
1563
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3512
        attr_match = {}
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3513
        for opt, arg in opts:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3514
                if opt == "-H":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3515
                        display_headers = False
1563
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3516
                elif opt == "-a":
1687
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  3517
                        try:
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  3518
                                attr, match = arg.split("=", 1)
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  3519
                        except ValueError:
1806
e835bd77038f 14625 incorrect error message for 'contents -a foo'
Tim Foster <tim.foster@sun.com>
parents: 1801
diff changeset
  3520
                                usage(_("-a takes an argument of the form "
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3521
                                    "<attribute>=<pattern>"), cmd=subcommand)
1563
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3522
                        attr_match.setdefault(attr, []).append(match)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3523
                elif opt == "-g":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3524
                        origins.add(misc.parse_uri(arg, cwd=orig_cwd))
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3525
                elif opt == "-o":
1857
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3526
                        output_fields = True
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3527
                        attrs.extend(arg.split(","))
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3528
                elif opt == "-s":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3529
                        sort_attrs.append(arg)
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3530
                elif opt == "-t":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3531
                        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
  3532
                elif opt == "-r":
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3533
                        remote = True
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3534
                elif opt == "-m":
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3535
                        display_raw = True
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3536
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3537
        if origins:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3538
                remote = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3539
        elif not remote:
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3540
                local = True
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3541
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  3542
        if remote and not pargs:
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  3543
                usage(_("contents: must request remote contents for specific "
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3544
                   "packages"), cmd=subcommand)
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  3545
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3546
        if display_raw:
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 306
diff changeset
  3547
                display_headers = False
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3548
                attrs = ["action.raw"]
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3549
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3550
                invalid = set(("-H", "-o", "-t", "-s", "-a")). \
391
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
  3551
                    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
  3552
391
23ec5f7ee0d3 2245 client - pylint cleanup needed
Shawn Walker <swalker@opensolaris.org>
parents: 388
diff changeset
  3553
                if len(invalid) > 0:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3554
                        usage(_("-m and %s may not be specified at the same "
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3555
                            "time") % invalid.pop(), cmd=subcommand)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3556
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3557
        check_attrs(attrs, subcommand)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3558
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3559
        api_inst.log_operation_start(subcommand)
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3560
        if local:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3561
                pkg_list = api.ImageInterface.LIST_INSTALLED
342
5e1f4d8429bf 669 Need method to print package licenses before installation
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3562
        elif remote:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3563
                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
  3564
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3565
        #
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3566
        # 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
  3567
        # 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
  3568
        #
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3569
        if not attrs:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3570
                # 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
  3571
                # 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
  3572
                # 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
  3573
                # dependencies.
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3574
                attrs = ["path"]
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3575
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3576
        if not sort_attrs and not display_raw:
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3577
                # XXX reverse sorting
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3578
                # 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
  3579
                # make it explicit
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3580
                if "path" in attrs:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3581
                        sort_attrs = ["path"]
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3582
                else:
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3583
                        sort_attrs = attrs[:1]
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3584
969
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  3585
        # 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
  3586
        # 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
  3587
        if display_raw:
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  3588
                excludes = EmptyI
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  3589
        else:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3590
                excludes = api_inst.excludes
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3591
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3592
        def mmatches(action):
1563
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3593
                """Given an action, return True if any of its attributes' values
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3594
                matches the pattern for the same attribute in the attr_match
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3595
                dictionary, and False otherwise."""
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3596
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3597
                # If no matches have been specified, all actions match
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3598
                if not attr_match:
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3599
                        return True
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3600
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3601
                matchset = set(attr_match.keys())
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3602
                attrset = set(action.attrs.keys())
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3603
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3604
                iset = attrset.intersection(matchset)
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3605
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3606
                # Iterate over the set of attributes common to the action and
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3607
                # the match specification.  If the values match the pattern in
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3608
                # the specification, then return True (implementing an OR across
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3609
                # multiple possible matches).
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3610
                for attr in iset:
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3611
                        for match in attr_match[attr]:
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3612
                                for attrval in action.attrlist(attr):
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3613
                                        if fnmatch.fnmatch(attrval, match):
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3614
                                                return True
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3615
                return False
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3616
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3617
        # Now get the matching list of packages and display it.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3618
        processed = False
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3619
        notfound = EmptyI
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3620
        try:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3621
                res = api_inst.get_pkg_list(pkg_list, patterns=pargs,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3622
                    raise_unmatched=True, ranked=remote, return_fmris=True,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3623
                    variants=True, repos=origins)
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3624
                manifests = []
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3625
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3626
                for pfmri, summ, cats, states, pattrs in res:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3627
                        manifests.append(api_inst.get_manifest(pfmri,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3628
                            all_variants=display_raw, repos=origins))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3629
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3630
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3631
                return EXIT_OOPS
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3632
        except api_errors.InvalidPackageErrors, e:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3633
                error(str(e), cmd=subcommand)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3634
                api_inst.log_operation_end(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3635
                    result=RESULT_FAILED_UNKNOWN)
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3636
                return EXIT_OOPS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3637
        except api_errors.InventoryException, e:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3638
                if e.illegal:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3639
                        for i in e.illegal:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3640
                                error(i)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3641
                        api_inst.log_operation_end(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3642
                            result=RESULT_FAILED_BAD_REQUEST)
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3643
                        return EXIT_OOPS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3644
                notfound = e.notfound
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3645
        else:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3646
                if local and not manifests and not pargs:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3647
                        error(_("no packages installed"), cmd=subcommand)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3648
                        api_inst.log_operation_end(
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3649
                            result=RESULT_NOTHING_TO_DO)
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3650
                        return EXIT_OOPS
969
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  3651
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  3652
        actionlist = [
1351
75f7a28beaf5 10515 search should support -o for output like pkg contents
Brock Pytlik <bpytlik@sun.com>
parents: 1335
diff changeset
  3653
            (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
  3654
            for m in manifests
1234
d9885dff5d16 4705 UnboundLocalError in depend action
Shawn Walker <srw@sun.com>
parents: 1218
diff changeset
  3655
            for a in m.gen_actions(excludes)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3656
            if mmatches(a)
969
da90392d2f80 6672 "pkg contents -m" filters out other variants
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  3657
        ]
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3658
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3659
        rval = EXIT_OK
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3660
        if attr_match and manifests and not actionlist:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3661
                rval = EXIT_OOPS
1563
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3662
                logger.error(_("""\
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3663
pkg: contents: no matching actions found in the listed packages"""))
b24d60ef4c70 2885 pkg contents can't specify hash for output field
Danek Duvall <danek.duvall@sun.com>
parents: 1543
diff changeset
  3664
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3665
        if manifests and rval == EXIT_OK:
1857
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3666
                displayed_results = display_contents_results(actionlist, attrs,
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3667
                    sort_attrs, action_types, display_headers)
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3668
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3669
                if not displayed_results:
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3670
                        if output_fields:
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3671
                                error(gettext.ngettext("""\
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3672
This package contains no actions with the fields specified using the -o
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3673
option. Please specify other fields, or use the -m option to show the raw
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3674
package manifests.""", """\
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3675
These packages contain no actions with the fields specified using the -o
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3676
option. Please specify other fields, or use the -m option to show the raw
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3677
package manifests.""", len(pargs)))
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3678
                        else:
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3679
                                error(gettext.ngettext("""\
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3680
This package delivers no filesystem content, but may contain metadata. Use
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3681
the -o option to specify fields other than 'path', or use the -m option to show
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3682
the raw package manifests.""", """\
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3683
These packages deliver no filesystem content, but may contain metadata. Use
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3684
the -o option to specify fields other than 'path', or use the -m option to show
d272ec25678e 1797 packages without filesystem content appear empty
Tim Foster <tim.foster@sun.com>
parents: 1853
diff changeset
  3685
the raw package manifests.""", len(pargs)))
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3686
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3687
        if notfound:
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3688
                rval = EXIT_OOPS
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3689
                if manifests:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3690
                        logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3691
                if local:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3692
                        logger.error(_("""\
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3693
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
  3694
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
  3695
                elif remote:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3696
                        logger.error(_("""\
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  3697
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
  3698
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
  3699
examining the catalogs:"""))
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3700
                logger.error("")
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 417
diff changeset
  3701
                for p in notfound:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  3702
                        logger.error("        %s" % p)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3703
                api_inst.log_operation_end(result=RESULT_NOTHING_TO_DO)
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 551
diff changeset
  3704
        else:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3705
                api_inst.log_operation_end(result=RESULT_SUCCEEDED)
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3706
        return rval
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1945
diff changeset
  3707
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  3708
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  3709
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
  3710
        total = cre.total
3dc9fc9b5fee 1540 changes to authorities should include refresh
Brock Pytlik <bpytlik@sun.com>
parents: 526
diff changeset
  3711
        succeeded = cre.succeeded
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  3712
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  3713
        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
  3714
            total)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  3715
        if cre.failed:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  3716
                # 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
  3717
                logger.error(txt)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  3718
        else:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  3719
                msg(txt)
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  3720
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3721
        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
  3722
                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
  3723
                    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
  3724
                        # 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
  3725
                        # 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
  3726
                        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
  3727
                        break
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  3728
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  3729
        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
  3730
                # 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
  3731
                # 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
  3732
                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
  3733
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  3734
        for pub, err in cre.failed:
1895
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  3735
                logger.error("   ")
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  3736
                logger.error(str(err))
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  3737
1603
84bd53597209 13019 DeprecationWarnings seen after python 2.6 migration
Dan Price <dp@eng.sun.com>
parents: 1570
diff changeset
  3738
        if cre.errmessage:
84bd53597209 13019 DeprecationWarnings seen after python 2.6 migration
Dan Price <dp@eng.sun.com>
parents: 1570
diff changeset
  3739
                logger.error(cre.errmessage)
789
f82de17d23fd 2274 "pkg info --license" succeeds even if there are no license actions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 786
diff changeset
  3740
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  3741
        return succeeded
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  3742
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3743
def __refresh(api_inst, pubs, full_refresh=False):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3744
        """Private helper method for refreshing publisher data."""
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3745
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3746
        try:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3747
                # The user explicitly requested this refresh, so set the
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3748
                # refresh to occur immediately.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3749
                api_inst.refresh(full_refresh=full_refresh,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3750
                    immediate=True, pubs=pubs)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3751
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3752
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3753
                return EXIT_OOPS
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3754
        except api_errors.PublisherError, e:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3755
                error(e)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3756
                error(_("'pkg publisher' will show a list of publishers."))
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3757
                return EXIT_OOPS
1779
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1775
diff changeset
  3758
        except (api_errors.UnknownErrors, api_errors.PermissionsException), e:
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3759
                # Prepend a newline because otherwise the exception will
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3760
                # be printed on the same line as the spinner.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3761
                error("\n" + str(e))
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3762
                return EXIT_OOPS
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3763
        except api_errors.CatalogRefreshException, e:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3764
                if display_catalog_failures(e) == 0:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3765
                        return EXIT_OOPS
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3766
                return EXIT_PARTIAL
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3767
        return EXIT_OK
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3768
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3769
def publisher_refresh(api_inst, args):
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 987
diff changeset
  3770
        """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
  3771
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  3772
        # 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
  3773
        full_refresh = False
523
69a22d5d368c 3387 pkg refresh --full gives a syntax error
Brock Pytlik <bpytlik@sun.com>
parents: 518
diff changeset
  3774
        opts, pargs = getopt.getopt(args, "", ["full"])
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  3775
        for opt, arg in opts:
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  3776
                if opt == "--full":
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  3777
                        full_refresh = True
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3778
        return __refresh(api_inst, pargs, full_refresh=full_refresh)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3779
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3780
def _get_ssl_cert_key(root, is_zone, ssl_cert, ssl_key):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3781
        if ssl_cert is not None or ssl_key is not None:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3782
                # In the case of zones, the ssl cert given is assumed to
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3783
                # be relative to the root of the image, not truly absolute.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3784
                if is_zone:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3785
                        if ssl_cert is not None:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3786
                                ssl_cert = os.path.abspath(
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3787
                                    root + os.sep + ssl_cert)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3788
                        if ssl_key is not None:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3789
                                ssl_key = os.path.abspath(
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3790
                                    root + os.sep + ssl_key)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3791
                elif orig_cwd:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3792
                        if ssl_cert and not os.path.isabs(ssl_cert):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3793
                                ssl_cert = os.path.normpath(os.path.join(
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3794
                                    orig_cwd, ssl_cert))
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3795
                        if ssl_key and not os.path.isabs(ssl_key):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3796
                                ssl_key = os.path.normpath(os.path.join(
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3797
                                    orig_cwd, ssl_key))
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3798
        return ssl_cert, ssl_key
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3799
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3800
def _set_pub_error_wrap(func, pfx, raise_errors, *args, **kwargs):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3801
        """Helper function to wrap set-publisher private methods.  Returns
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3802
        a tuple of (return value, message).  Callers should check the return
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3803
        value for errors."""
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  3804
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  3805
        try:
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3806
                return func(*args, **kwargs)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3807
        except api_errors.CatalogRefreshException, e:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3808
                for entry in raise_errors:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3809
                        if isinstance(e, entry):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3810
                                raise
1895
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  3811
                txt = _("Could not refresh the catalog for %s\n") % \
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3812
                    pfx
1895
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  3813
                for pub, err in e.failed:
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  3814
                        txt += "   \n%s" % err
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  3815
                return EXIT_OOPS, txt
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3816
        except api_errors.InvalidDepotResponseException, e:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3817
                for entry in raise_errors:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3818
                        if isinstance(e, entry):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3819
                                raise
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3820
                if pfx:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3821
                        return EXIT_OOPS, _("The origin URIs for '%(pubname)s' "
1895
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  3822
                            "do not appear to point to a valid pkg repository."
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  3823
                            "\nPlease verify the repository's location and the "
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  3824
                            "client's network configuration."
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3825
                            "\nAdditional details:\n\n%(details)s") % {
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3826
                            "pubname": pfx, "details": str(e) }
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3827
                return EXIT_OOPS, _("The specified URI does not appear to "
1895
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  3828
                    "point to a valid pkg repository.\nPlease check the URI "
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3829
                    "and the client's network configuration."
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3830
                    "\nAdditional details:\n\n%s") % str(e)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3831
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3832
                for entry in raise_errors:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3833
                        if isinstance(e, entry):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3834
                                raise
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3835
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3836
                return EXIT_OOPS, ""
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3837
        except api_errors.ApiException, e:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3838
                for entry in raise_errors:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3839
                        if isinstance(e, entry):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3840
                                raise
790
e2cf47b23e7a 5481 pkg refresh traceback without permissions
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 789
diff changeset
  3841
                # 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
  3842
                # be printed on the same line as the spinner.
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3843
                return EXIT_OOPS, ("\n" + str(e))
259
5083c093ab6c 563 server problems on image-create give traceback
Stephen Hahn <sch@Sun.COM>
parents: 251
diff changeset
  3844
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3845
def publisher_set(api_inst, args):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  3846
        """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
  3847
            [-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
  3848
            remove] [-m|--add-mirror mirror to add] [-M|--remove-mirror mirror
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3849
            to remove] [-p repo_uri] [--enable] [--disable] [--no-refresh]
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3850
            [--sticky] [--non-sticky ] [--search-before=publisher]
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3851
            [--search-after=publisher]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3852
            [--approve-ca-cert path to CA]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3853
            [--revoke-ca-cert hash of CA to remove]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3854
            [--unset-ca-cert hash of CA to unset]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3855
            [--set-property name of property=value]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3856
            [--add-property-value name of property=value to add]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3857
            [--remove-property-value name of property=value to remove]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3858
            [--unset-property name of property to delete]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3859
            [publisher] """
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3860
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3861
        cmd_name = "set-publisher"
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  3862
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  3863
        ssl_key = None
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  3864
        ssl_cert = None
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3865
        origin_uri = None
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  3866
        reset_uuid = False
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3867
        add_mirrors = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3868
        remove_mirrors = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3869
        add_origins = set()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3870
        remove_origins = set()
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3871
        refresh_allowed = True
786
a400f8c4d1c0 2340 support authority enable and disable
Tom Mueller <Tom.Mueller@sun.com>
parents: 770
diff changeset
  3872
        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
  3873
        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
  3874
        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
  3875
        search_after = None
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3876
        search_first = False
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3877
        repo_uri = None
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3878
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3879
        approved_ca_certs = []
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3880
        revoked_ca_certs = []
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3881
        unset_ca_certs = []
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3882
        set_props = {}
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3883
        add_prop_values = {}
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3884
        remove_prop_values = {}
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3885
        unset_props = set()
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3886
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3887
        opts, pargs = getopt.getopt(args, "Pedk:c:O:G:g:M:m:p:",
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3888
            ["add-mirror=", "remove-mirror=", "add-origin=", "remove-origin=",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3889
            "no-refresh", "reset-uuid", "enable", "disable", "sticky",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3890
            "non-sticky", "search-after=", "search-before=", "search-first",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3891
            "approve-ca-cert=", "revoke-ca-cert=", "unset-ca-cert=",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3892
            "set-property=", "add-property-value=", "remove-property-value=",
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3893
            "unset-property="])
461
37cf3ac75e37 1018 actions with payloads should include all sizes and hashes
johansen <johansen@sun.com>
parents: 443
diff changeset
  3894
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  3895
        for opt, arg in opts:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3896
                if opt == "-c":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3897
                        ssl_cert = arg
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3898
                elif opt == "-d" or opt == "--disable":
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3899
                        disable = True
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3900
                elif opt == "-e" or opt == "--enable":
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3901
                        disable = False
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3902
                elif opt == "-g" or opt == "--add-origin":
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3903
                        add_origins.add(misc.parse_uri(arg, cwd=orig_cwd))
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3904
                elif opt == "-G" or opt == "--remove-origin":
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3905
                        if arg == "*":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3906
                                # Allow wildcard to support an easy, scriptable
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3907
                                # way of removing all existing entries.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3908
                                remove_origins.add("*")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3909
                        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3910
                                remove_origins.add(misc.parse_uri(arg,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3911
                                    cwd=orig_cwd))
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3912
                elif opt == "-k":
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  3913
                        ssl_key = arg
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3914
                elif opt == "-O":
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3915
                        origin_uri = arg
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3916
                elif opt == "-m" or opt == "--add-mirror":
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3917
                        add_mirrors.add(misc.parse_uri(arg, cwd=orig_cwd))
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3918
                elif opt == "-M" or opt == "--remove-mirror":
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3919
                        if arg == "*":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3920
                                # Allow wildcard to support an easy, scriptable
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3921
                                # way of removing all existing entries.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3922
                                remove_mirrors.add("*")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3923
                        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3924
                                remove_mirrors.add(misc.parse_uri(arg,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3925
                                    cwd=orig_cwd))
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3926
                elif opt == "-p":
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3927
                        repo_uri = misc.parse_uri(arg, cwd=orig_cwd)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3928
                elif opt in ("-P", "--search-first"):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3929
                        search_first = True
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3930
                elif opt == "--reset-uuid":
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3931
                        reset_uuid = True
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3932
                elif opt == "--no-refresh":
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3933
                        refresh_allowed = False
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3934
                elif opt == "--sticky":
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3935
                        sticky = True
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3936
                elif opt == "--non-sticky":
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3937
                        sticky = False
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3938
                elif opt == "--search-before":
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3939
                        search_before = arg
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3940
                elif opt == "--search-after":
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3941
                        search_after = arg
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3942
                elif opt == "--approve-ca-cert":
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3943
                        approved_ca_certs.append(arg)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3944
                elif opt == "--revoke-ca-cert":
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3945
                        revoked_ca_certs.append(arg)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3946
                elif opt == "--unset-ca-cert":
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3947
                        unset_ca_certs.append(arg)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3948
                elif opt == "--set-property":
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3949
                        t = arg.split("=", 1)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3950
                        if len(t) < 2:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3951
                                usage(_("properties to be set must be of the "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3952
                                    "form '<name>=<value>'. This is what was "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3953
                                    "given: %s") % arg, cmd=cmd_name)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3954
                        if t[0] in set_props:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3955
                                usage(_("a property may only be set once in a "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3956
                                    "command. %s was set twice") % t[0],
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3957
                                    cmd=cmd_name)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3958
                        set_props[t[0]] = t[1]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3959
                elif opt == "--add-property-value":
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3960
                        t = arg.split("=", 1)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3961
                        if len(t) < 2:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3962
                                usage(_("property values to be added must be "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3963
                                    "of the form '<name>=<value>'. This is "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3964
                                    "what was given: %s") % arg, cmd=cmd_name)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3965
                        add_prop_values.setdefault(t[0], [])
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3966
                        add_prop_values[t[0]].append(t[1])
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3967
                elif opt == "--remove-property-value":
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3968
                        t = arg.split("=", 1)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3969
                        if len(t) < 2:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3970
                                usage(_("property values to be removed must be "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3971
                                    "of the form '<name>=<value>'. This is "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3972
                                    "what was given: %s") % arg, cmd=cmd_name)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3973
                        remove_prop_values.setdefault(t[0], [])
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3974
                        remove_prop_values[t[0]].append(t[1])
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3975
                elif opt == "--unset-property":
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  3976
                        unset_props.add(arg)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3977
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3978
        name = None
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3979
        if len(pargs) == 0 and not repo_uri:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  3980
                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
  3981
        elif len(pargs) > 1:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3982
                usage(_("only one publisher name may be specified"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3983
                    cmd="set-publisher")
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3984
        elif pargs:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3985
                name = pargs[0]
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  3986
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3987
        if origin_uri and (add_origins or remove_origins):
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  3988
                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
  3989
                    "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
  3990
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3991
        if (search_before and search_after) or \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3992
            (search_before and search_first) or (search_after and search_first):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3993
                usage(_("search-before, search-after, and search-first (-P) "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  3994
                    "may not be combined"), 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
  3995
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3996
        if repo_uri and (add_origins or add_mirrors or remove_origins or
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3997
            remove_mirrors or disable != None or not refresh_allowed or
2100
6a366b063036 17144 Unix socket support is defunct
johansen <johansen@opensolaris.org>
parents: 2097
diff changeset
  3998
            reset_uuid):
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  3999
                usage(_("the -p option may not be combined with the -g, "
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4000
                    "--add-origin, -G, --remove-origin, -m, --add-mirror, "
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4001
                    "-M, --remove-mirror, --enable, --disable, --no-refresh, "
2100
6a366b063036 17144 Unix socket support is defunct
johansen <johansen@opensolaris.org>
parents: 2097
diff changeset
  4002
                    "or --reset-uuid options"), cmd="set-publisher")
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4003
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4004
        # Get sanitized SSL Cert/Key input values.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4005
        ssl_cert, ssl_key = _get_ssl_cert_key(api_inst.root, api_inst.is_zone,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4006
            ssl_cert, ssl_key)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4007
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4008
        if not repo_uri:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4009
                # Normal case.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4010
                ret = _set_pub_error_wrap(_add_update_pub, name, [],
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4011
                    api_inst, name, disable=disable, sticky=sticky,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4012
                    origin_uri=origin_uri, add_mirrors=add_mirrors,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4013
                    remove_mirrors=remove_mirrors, add_origins=add_origins,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4014
                    remove_origins=remove_origins, ssl_cert=ssl_cert,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4015
                    ssl_key=ssl_key, search_before=search_before,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4016
                    search_after=search_after, search_first=search_first,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4017
                    reset_uuid=reset_uuid, refresh_allowed=refresh_allowed,
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4018
                    set_props=set_props, add_prop_values=add_prop_values,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4019
                    remove_prop_values=remove_prop_values,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4020
                    unset_props=unset_props, approved_cas=approved_ca_certs,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4021
                    revoked_cas=revoked_ca_certs, unset_cas=unset_ca_certs)
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4022
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4023
                rval, rmsg = ret
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4024
                if rmsg:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4025
                        error(rmsg, cmd="set-publisher")
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4026
                return rval
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4027
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4028
        pubs = None
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4029
        # Automatic configuration via -p case.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4030
        def get_pubs():
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4031
                repo = publisher.RepositoryURI(repo_uri,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4032
                    ssl_cert=ssl_cert, ssl_key=ssl_key)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4033
                return EXIT_OK, api_inst.get_publisherdata(repo=repo)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4034
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4035
        ret = None
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4036
        try:
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4037
                ret = _set_pub_error_wrap(get_pubs, name,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4038
                    [api_errors.UnsupportedRepositoryOperation])
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4039
        except api_errors.UnsupportedRepositoryOperation, e:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4040
                # Fail if the operation can't be done automatically.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4041
                error(str(e), cmd="set-publisher")
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4042
                logger.error(_("""
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4043
To add a publisher using this repository, execute the following command as a
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4044
privileged user:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4045
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4046
  pkg set-publisher -g %s <publisher>
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4047
""") % repo_uri)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4048
                return EXIT_OOPS
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4049
        else:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4050
                rval, rmsg = ret
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4051
                if rval != EXIT_OK:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4052
                        error(rmsg, cmd="set-publisher")
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4053
                        return rval
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4054
                pubs = rmsg
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4055
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4056
        # For the automatic publisher configuration case, update or add
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4057
        # publishers based on whether they exist and if they match any
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4058
        # specified publisher prefix.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4059
        if not pubs:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4060
                error(_("""
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4061
The specified repository did not contain any publisher configuration
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4062
information.  This is likely the result of a repository configuration
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4063
error.  Please contact the repository administrator for further
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4064
assistance."""))
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4065
                return EXIT_OOPS
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4066
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4067
        if name and name not in pubs:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4068
                known = [p.prefix for p in pubs]
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4069
                unknown = [name]
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4070
                e = api_errors.UnknownRepositoryPublishers(known=known,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4071
                    unknown=unknown, location=repo_uri)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4072
                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
  4073
                return EXIT_OOPS
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4074
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4075
        added = []
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4076
        updated = []
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4077
        failed = []
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4078
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4079
        for src_pub in sorted(pubs):
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4080
                prefix = src_pub.prefix
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4081
                if name and prefix != name:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4082
                        # User didn't request this one.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4083
                        continue
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4084
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4085
                src_repo = src_pub.repository
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4086
                if not api_inst.has_publisher(prefix=prefix):
1795
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4087
                        add_origins = []
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4088
                        if not src_repo or not src_repo.origins:
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4089
                                # If the repository publisher configuration
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4090
                                # didn't include configuration information
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4091
                                # for the publisher's repositories, assume
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4092
                                # that the origin for the new publisher
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4093
                                # matches the URI provided.
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4094
                                add_origins.append(repo_uri)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4095
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4096
                        rval, rmsg = _set_pub_error_wrap(_add_update_pub, name,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4097
                            [], api_inst, prefix, pub=src_pub,
1795
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4098
                            add_origins=add_origins, ssl_cert=ssl_cert,
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4099
                            ssl_key=ssl_key, sticky=sticky,
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4100
                            search_after=search_after,
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4101
                            search_before=search_before,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4102
                            search_first=search_first,
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4103
                            set_props=set_props,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4104
                            add_prop_values=add_prop_values,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4105
                            remove_prop_values=remove_prop_values,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4106
                            unset_props=unset_props)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4107
                        if rval == EXIT_OK:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4108
                                added.append(prefix)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4109
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4110
                        # When multiple publishers result from a single -p
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4111
                        # operation, this ensures that the new publishers are
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4112
                        # ordered correctly.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4113
                        search_first = False
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4114
                        search_after = prefix
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4115
                else:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4116
                        # The update case is special and requires some
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4117
                        # finesse.  In particular, the update should
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4118
                        # only happen if the repo_uri specified is
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4119
                        # already known to the existing publisher.  This
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4120
                        # is just a sanity check to ensure that random
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4121
                        # repositories can't attempt to hijack other
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4122
                        # publishers.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4123
                        dest_pub = api_inst.get_publisher(prefix=prefix,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4124
                            duplicate=True)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4125
                        dest_repo = dest_pub.repository
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4126
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4127
                        if dest_repo.origins and \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4128
                            not dest_repo.has_origin(repo_uri):
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4129
                                failed.append((prefix, _("""\
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4130
    The specified repository location is not a known source of publisher
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4131
    configuration updates for '%s'.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4132
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4133
    This new repository location must be added as an origin to the publisher
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4134
    to accept configuration updates from this repository.""") % prefix))
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4135
                                continue
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4136
1795
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4137
                        if not src_repo:
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4138
                                # The repository doesn't have to provide origin
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4139
                                # information for publishers.  If it doesn't,
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4140
                                # the origin of every publisher returned is
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4141
                                # assumed to match the URI that the user
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4142
                                # provided.  Since this is an update case,
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4143
                                # nothing special needs to be done.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4144
                                if not dest_repo.origins:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4145
                                        add_origins = [repo_uri]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4146
                                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4147
                                        add_origins = []
1795
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4148
                                add_mirrors = []
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4149
                        else:
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4150
                                # Avoid duplicates by adding only those mirrors
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4151
                                # or origins not already known.
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4152
                                add_mirrors = [
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4153
                                    u.uri
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4154
                                    for u in src_repo.mirrors
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4155
                                    if u.uri not in dest_repo.mirrors
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4156
                                ]
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4157
                                add_origins = [
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4158
                                    u.uri
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4159
                                    for u in src_repo.origins
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4160
                                    if u.uri not in dest_repo.origins
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4161
                                ]
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4162
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4163
                                # Special bits to update; for these, take the
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4164
                                # new value as-is (don't attempt to merge).
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4165
                                for prop in ("collection_type", "description",
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4166
                                    "legal_uris", "name", "refresh_seconds",
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4167
                                    "registration_uri", "related_uris"):
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4168
                                        src_val = getattr(src_repo, prop)
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4169
                                        if src_val is not None:
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4170
                                                setattr(dest_repo, prop,
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4171
                                                    src_val)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4172
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4173
                        # If an alias doesn't already exist, update it too.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4174
                        if src_pub.alias and not dest_pub.alias:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4175
                                dest_pub.alias = src_pub.alias
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4176
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4177
                        rval, rmsg = _set_pub_error_wrap(_add_update_pub, name,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4178
                            [], api_inst, prefix, pub=dest_pub,
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4179
                            add_mirrors=add_mirrors, add_origins=add_origins,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4180
                            set_props=set_props,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4181
                            add_prop_values=add_prop_values,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4182
                            remove_prop_values=remove_prop_values,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4183
                            unset_props=unset_props)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4184
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4185
                        if rval == EXIT_OK:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4186
                                updated.append(prefix)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4187
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4188
                if rval != EXIT_OK:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4189
                        failed.append((prefix, rmsg))
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4190
                        continue
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4191
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4192
        first = True
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4193
        for pub, rmsg in failed:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4194
                if first:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4195
                        first = False
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4196
                        error("failed to add or update one or more "
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4197
                            "publishers", cmd="set-publisher")
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4198
                logger.error("  %s:" % pub)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4199
                logger.error(rmsg)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4200
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4201
        if added or updated:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4202
                if first:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4203
                        logger.info("pkg set-publisher:")
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4204
                if added:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4205
                        logger.info(_("  Added publisher(s): %s") %
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4206
                            ", ".join(added))
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4207
                if updated:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4208
                        logger.info(_("  Updated publisher(s): %s") %
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4209
                            ", ".join(updated))
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4210
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4211
        if failed:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4212
                if len(failed) != len(pubs):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4213
                        # Not all publishers retrieved could be added or
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4214
                        # updated.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4215
                        return EXIT_PARTIAL
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4216
                return EXIT_OOPS
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4217
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4218
        # Now that the configuration was successful, attempt to refresh the
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4219
        # catalog data for all of the configured publishers.  If the refresh
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4220
        # had been allowed earlier while configuring each publisher, then this
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4221
        # wouldn't be necessary and some possibly invalid configuration could
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4222
        # have been eliminated sooner.  However, that would be much slower as
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4223
        # each refresh requires a client image state rebuild.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4224
        return __refresh(api_inst, added + updated)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4225
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4226
def _add_update_pub(api_inst, prefix, pub=None, disable=None, sticky=None,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4227
    origin_uri=None, add_mirrors=EmptyI, remove_mirrors=EmptyI,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4228
    add_origins=EmptyI, remove_origins=EmptyI, ssl_cert=None, ssl_key=None,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4229
    search_before=None, search_after=None, search_first=False,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4230
    reset_uuid=None, refresh_allowed=False,
2100
6a366b063036 17144 Unix socket support is defunct
johansen <johansen@opensolaris.org>
parents: 2097
diff changeset
  4231
    set_props=EmptyI, add_prop_values=EmptyI,
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4232
    remove_prop_values=EmptyI, unset_props=EmptyI, approved_cas=EmptyI,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4233
    revoked_cas=EmptyI, unset_cas=EmptyI):
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4234
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4235
        repo = None
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4236
        new_pub = False
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4237
        if not pub:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4238
                try:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4239
                        pub = api_inst.get_publisher(prefix=prefix,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4240
                            alias=prefix, duplicate=True)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4241
                        if reset_uuid:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4242
                                pub.reset_client_uuid()
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4243
                        repo = pub.repository
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4244
                except api_errors.UnknownPublisher, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4245
                        if not origin_uri and not add_origins and \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4246
                            (remove_origins or remove_mirrors or
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4247
                            remove_prop_values or add_mirrors):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4248
                                return EXIT_OOPS, str(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4249
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4250
                        # No pre-existing, so create a new one.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4251
                        repo = publisher.Repository()
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4252
                        pub = publisher.Publisher(prefix, repository=repo)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4253
                        new_pub = True
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4254
        elif not api_inst.has_publisher(prefix=pub.prefix):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4255
                new_pub = True
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  4256
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4257
        if not repo:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4258
                repo = pub.repository
1795
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4259
                if not repo:
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4260
                        # Could be a new publisher from auto-configuration
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4261
                        # case where no origin was provided in repository
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4262
                        # configuration.
1b3bed835773 14856 image-create / set-publisher shouldn't require repository configuration to have origins
Shawn Walker <srw@sun.com>
parents: 1779
diff changeset
  4263
                        repo = publisher.Repository()
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4264
                        pub.repository = repo
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4265
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4266
        if disable is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4267
                # Set disabled property only if provided.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4268
                pub.disabled = disable
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4269
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4270
        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
  4271
                # 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
  4272
                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
  4273
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4274
        if origin_uri:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  4275
                # 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
  4276
                # of existing origins and add the new one.
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4277
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4278
                # Only use existing cert information if the new URI uses
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4279
                # https for transport.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4280
                if repo.origins and not (ssl_cert or ssl_key) and \
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4281
                    any(origin_uri.startswith(scheme + ":")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4282
                        for scheme in publisher.SSL_SCHEMES):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4283
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4284
                        for uri in repo.origins:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4285
                                if ssl_cert is None:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4286
                                        ssl_cert = uri.ssl_cert
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4287
                                if ssl_key is None:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4288
                                        ssl_key = uri.ssl_key
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4289
                                break
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4290
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4291
                repo.reset_origins()
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4292
                repo.add_origin(origin_uri)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4293
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4294
                # XXX once image configuration supports storing this
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4295
                # information at the uri level, ssl info should be set
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4296
                # here.
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4297
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  4298
        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
  4299
            add_origins, remove_origins)):
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  4300
                etype, add, remove = entry
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  4301
                # XXX once image configuration supports storing this
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  4302
                # 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
  4303
                # here.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4304
                if "*" in remove:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4305
                        getattr(repo, "reset_%ss" % etype)()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4306
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4307
                        for u in remove:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4308
                                getattr(repo, "remove_%s" % etype)(u)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4309
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4310
                for u in add:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4311
                        getattr(repo, "add_%s" % etype)(u)
786
a400f8c4d1c0 2340 support authority enable and disable
Tom Mueller <Tom.Mueller@sun.com>
parents: 770
diff changeset
  4312
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4313
        # 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
  4314
        # ssl_key by using -k "" or -c "".
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4315
        if ssl_cert is not None or ssl_key is not None:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4316
                # 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
  4317
                # information for *all* of the currently selected
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4318
                # repository's origins and mirrors that use SSL schemes.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4319
                found_ssl = False
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4320
                for uri in repo.origins:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4321
                        if uri.scheme not in publisher.SSL_SCHEMES:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4322
                                continue
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4323
                        found_ssl = True
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4324
                        if ssl_cert is not None:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4325
                                uri.ssl_cert = ssl_cert
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4326
                        if ssl_key is not None:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4327
                                uri.ssl_key = ssl_key
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4328
                for uri in repo.mirrors:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4329
                        if uri.scheme not in publisher.SSL_SCHEMES:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4330
                                continue
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4331
                        found_ssl = True
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4332
                        if ssl_cert is not None:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4333
                                uri.ssl_cert = ssl_cert
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4334
                        if ssl_key is not None:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4335
                                uri.ssl_key = ssl_key
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4336
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4337
                if (ssl_cert or ssl_key) and not found_ssl:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4338
                        # None of the origins or mirrors for the publisher
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4339
                        # use SSL schemes so the cert and key information
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4340
                        # won't be retained.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4341
                        usage(_("Publisher '%s' does not have any SSL-based "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4342
                            "origins or mirrors.") % prefix)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4343
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4344
        if set_props or add_prop_values or remove_prop_values or unset_props:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4345
                pub.update_props(set_props=set_props,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4346
                    add_prop_values=add_prop_values,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4347
                    remove_prop_values=remove_prop_values,
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4348
                    unset_props=unset_props)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4349
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4350
        if new_pub:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4351
                api_inst.add_publisher(pub,
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4352
                    refresh_allowed=refresh_allowed, approved_cas=approved_cas,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4353
                    revoked_cas=revoked_cas, unset_cas=unset_cas,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4354
                    search_after=search_after, search_before=search_before,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4355
                    search_first=search_first)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4356
        else:
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4357
                for ca in approved_cas:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4358
                        try:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4359
                                ca = os.path.normpath(
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4360
                                    os.path.join(orig_cwd, ca))
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4361
                                with open(ca, "rb") as fh:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4362
                                        s = fh.read()
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4363
                        except EnvironmentError, e:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4364
                                if e.errno == errno.ENOENT:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4365
                                        raise api_errors.MissingFileArgumentException(
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4366
                                            ca)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4367
                                elif e.errno == errno.EACCES:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4368
                                        raise api_errors.PermissionsException(
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4369
                                            ca)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4370
                                raise
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4371
                        pub.approve_ca_cert(s)
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4372
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4373
                for hsh in revoked_cas:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4374
                        pub.revoke_ca_cert(hsh)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4375
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4376
                for hsh in unset_cas:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4377
                        pub.unset_ca_cert(hsh)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4378
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4379
                api_inst.update_publisher(pub,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4380
                    refresh_allowed=refresh_allowed, search_after=search_after,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4381
                    search_before=search_before, search_first=search_first)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4382
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4383
        return EXIT_OK, None
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4384
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4385
def publisher_unset(api_inst, args):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4386
        """pkg unset-publisher publisher ..."""
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4387
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4388
        if len(args) == 0:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  4389
                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
  4390
                    cmd="unset-publisher")
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4391
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  4392
        errors = []
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4393
        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
  4394
                try:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4395
                        api_inst.remove_publisher(prefix=name, alias=name)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4396
                except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4397
                        format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4398
                        return EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4399
                except (api_errors.PermissionsException,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4400
                    api_errors.PublisherError,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4401
                    api_errors.ModifyingSyspubException), e:
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  4402
                        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
  4403
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4404
        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
  4405
        if errors:
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  4406
                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
  4407
                        # 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
  4408
                        # 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
  4409
                        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
  4410
                else:
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  4411
                        # 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
  4412
                        # 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
  4413
                        # 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
  4414
                        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
  4415
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  4416
                txt = ""
936
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  4417
                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
  4418
                        txt += "\n"
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  4419
                        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
  4420
                            "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
  4421
                        txt += "\n"
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  4422
                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
  4423
649787977ed3 2283 pkg unset-authority fails unless all specified authorities are valid
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 934
diff changeset
  4424
        return retcode
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4425
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4426
def publisher_list(api_inst, args):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4427
        """pkg publishers"""
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4428
        omit_headers = False
410
403886a7592b 1259 Need CLI option to retrieve preferred authority
Shawn Walker <swalker@opensolaris.org>
parents: 409
diff changeset
  4429
        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
  4430
        inc_disabled = True
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4431
        valid_formats = ( "tsv", )
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4432
        output_format = "default"
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4433
        field_data = {
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4434
            "publisher" : [("default", "tsv"), _("PUBLISHER"), ""],
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4435
            "attrs" : [("default"), "", ""],
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4436
            "type" : [("default", "tsv"), _("TYPE"), ""],
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4437
            "status" : [("default", "tsv"), _("STATUS"), ""],
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4438
            "uri" : [("default", "tsv"), _("URI"), ""],
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4439
            "sticky" : [("tsv"), _("STICKY"), ""],
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4440
            "preferred" : [("tsv"), _("PREFERRED"), ""],
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4441
            "enabled" : [("tsv"), _("ENABLED"), ""],
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4442
        }
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4443
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4444
        desired_field_order = (_("PUBLISHER"), "", _("STICKY"), _("PREFERRED"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4445
            _("ENABLED"), _("TYPE"), _("STATUS"), _("URI"))
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4446
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4447
        # Custom sort function for preserving field ordering
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4448
        def sort_fields(one, two):
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4449
                return desired_field_order.index(get_header(one)) - \
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4450
                    desired_field_order.index(get_header(two))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4451
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4452
        # Functions for manipulating field_data records
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4453
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4454
        def filter_default(record):
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4455
                return "default" in record[0]
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4456
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4457
        def filter_tsv(record):
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4458
                return "tsv" in record[0]
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4459
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4460
        def get_header(record):
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4461
                return record[1]
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4462
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4463
        def get_value(record):
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4464
                return record[2]
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4465
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4466
        def set_value(record, value):
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4467
                record[2] = 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
  4468
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4469
        # 'a' is left over
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4470
        opts, pargs = getopt.getopt(args, "F:HPan")
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4471
        for opt, arg in opts:
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4472
                if opt == "-H":
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4473
                        omit_headers = True
410
403886a7592b 1259 Need CLI option to retrieve preferred authority
Shawn Walker <swalker@opensolaris.org>
parents: 409
diff changeset
  4474
                if opt == "-P":
403886a7592b 1259 Need CLI option to retrieve preferred authority
Shawn Walker <swalker@opensolaris.org>
parents: 409
diff changeset
  4475
                        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
  4476
                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
  4477
                        inc_disabled = False
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4478
                if opt == "-F":
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4479
                        output_format = arg
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4480
                        if output_format not in valid_formats:
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4481
                                usage(_("Unrecognized format %(format)s."
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4482
                                    " Supported formats: %(valid)s") % \
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4483
                                    { "format": output_format,
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4484
                                    "valid": valid_formats }, cmd="publisher")
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4485
                                return EXIT_OOPS
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4486
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4487
        api_inst.progresstracker = get_tracker(quiet=True)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4488
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4489
        cert_cache = {}
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4490
        def get_cert_info(ssl_cert):
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4491
                if not ssl_cert:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4492
                        return None
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4493
                if ssl_cert not in cert_cache:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4494
                        c = cert_cache[ssl_cert] = {}
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4495
                        errors = c["errors"] = []
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4496
                        times = c["info"] = {
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4497
                            "effective": "",
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4498
                            "expiration": "",
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4499
                        }
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4500
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4501
                        try:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4502
                                cert = misc.validate_ssl_cert(ssl_cert)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4503
                        except (EnvironmentError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4504
                            api_errors.CertificateError,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4505
                            api_errors.PermissionsException), e:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4506
                                # If the cert information can't be retrieved,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4507
                                # add the errors to a list and continue on.
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4508
                                errors.append(e)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4509
                                c["valid"] = False
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4510
                        else:
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  4511
                                nb = cert.get_notBefore()
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  4512
                                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
  4513
                                nb = datetime.datetime.utcfromtimestamp(
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  4514
                                    calendar.timegm(t))
1150
2b8aaf0b0b4e 4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents: 1141
diff changeset
  4515
                                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
  4516
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  4517
                                na = cert.get_notAfter()
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  4518
                                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
  4519
                                na = datetime.datetime.utcfromtimestamp(
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  4520
                                    calendar.timegm(t))
1150
2b8aaf0b0b4e 4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents: 1141
diff changeset
  4521
                                times["expiration"] = na.strftime("%c")
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4522
                                c["valid"] = True
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4523
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4524
                return cert_cache[ssl_cert]
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4525
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4526
        retcode = EXIT_OK
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4527
        if len(pargs) == 0:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4528
                pref_pub = api_inst.get_highest_ranked_publisher()
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4529
                if preferred_only:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4530
                        pubs = [pref_pub]
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4531
                else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4532
                        pubs = [
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4533
                            p for p in api_inst.get_publishers()
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4534
                            if inc_disabled or not p.disabled
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4535
                        ]
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4536
                # Create a formatting string for the default output
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4537
                # format
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4538
                if output_format == "default":
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4539
                        fmt = "%-24s %-12s %-8s %-8s %s"
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4540
                        filter_func = filter_default
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4541
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4542
                # Create a formatting string for the tsv output
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4543
                # format
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4544
                if output_format == "tsv":
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4545
                        fmt = "%s\t%s\t%s\t%s\t%s\t%s\t%s"
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4546
                        filter_func = filter_tsv
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4547
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4548
                # Extract our list of headers from the field_data
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4549
                # dictionary Make sure they are extracted in the
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4550
                # desired order by using our custom sort function
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4551
                hdrs = map(get_header, sorted(filter(filter_func,
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4552
                           field_data.values()), sort_fields))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4553
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4554
                # Output an header if desired
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4555
                if not omit_headers:
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4556
                        msg(fmt % tuple(hdrs))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4557
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4558
                for p in pubs:
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4559
                        # Store all our publisher related data in
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4560
                        # field_data ready for output
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4561
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4562
                        set_value(field_data["publisher"], p.prefix)
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4563
                        # Setup the synthetic attrs field if the
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4564
                        # format is default.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4565
                        if output_format == "default":
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4566
                                pstatus = ""
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4567
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4568
                                if not p.sticky:
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4569
                                        pstatus_list = [_("non-sticky")]
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4570
                                else:
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4571
                                        pstatus_list = []
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4572
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4573
                                if p.disabled:
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4574
                                        pstatus_list.append(_("disabled"))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4575
                                if pstatus_list:
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4576
                                        pstatus = "(%s)" % \
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4577
                                            ", ".join(pstatus_list)
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4578
                                set_value(field_data["attrs"], pstatus)
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4579
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4580
                        if p.sticky:
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4581
                                set_value(field_data["sticky"], _("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
  4582
                        else:
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4583
                                set_value(field_data["sticky"], _("false"))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4584
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4585
                        if p == pref_pub:
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4586
                                set_value(field_data["preferred"], _("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
  4587
                        else:
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4588
                                set_value(field_data["preferred"], _("false"))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4589
                        if not p.disabled:
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4590
                                set_value(field_data["enabled"], _("true"))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4591
                        else:
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4592
                                set_value(field_data["enabled"], _("false"))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4593
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4594
                        # Only show the selected repository's information in
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4595
                        # summary view.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4596
                        r = p.repository
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4597
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4598
                        # Update field_data for each origin and output
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4599
                        # a publisher record in our desired format.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4600
                        for uri in sorted(r.origins):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4601
                                # XXX get the real origin status
2100
6a366b063036 17144 Unix socket support is defunct
johansen <johansen@opensolaris.org>
parents: 2097
diff changeset
  4602
                                set_value(field_data["type"], _("origin"))
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4603
                                set_value(field_data["status"], _("online"))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4604
                                set_value(field_data["uri"], str(uri))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4605
                                values = map(get_value,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4606
                                    sorted(filter(filter_func,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4607
                                    field_data.values()), sort_fields)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4608
                                )
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4609
                                msg(fmt % tuple(values))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4610
                        # Update field_data for each mirror and output
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4611
                        # a publisher record in our desired format.
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4612
                        for uri in r.mirrors:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4613
                                # XXX get the real mirror status
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4614
                                set_value(field_data["type"], _("mirror"))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4615
                                set_value(field_data["status"], _("online"))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4616
                                set_value(field_data["uri"], str(uri))
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4617
                                values = map(get_value,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4618
                                    sorted(filter(filter_func,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4619
                                    field_data.values()), sort_fields)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4620
                                )
1709
28592bd37c9d 12738 zone install/attach incorporation logic needs enhancement
Gary Pennington <gary.pennington@sun.com>
parents: 1687
diff changeset
  4621
                                msg(fmt % tuple(values))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4622
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4623
                        if not r.origins and not r.mirrors:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4624
                                set_value(field_data["type"], "")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4625
                                set_value(field_data["status"], "")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4626
                                set_value(field_data["uri"], "")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4627
                                values = map(get_value,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4628
                                    sorted(filter(filter_func,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4629
                                    field_data.values()), sort_fields)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4630
                                )
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4631
                                msg(fmt % tuple(values))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4632
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4633
        else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4634
                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
  4635
                        retcode = EXIT_OK
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4636
                        c = get_cert_info(uri.ssl_cert)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4637
                        msg(_("              SSL Key:"), uri.ssl_key)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4638
                        msg(_("             SSL Cert:"), uri.ssl_cert)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4639
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4640
                        if not c:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4641
                                return retcode
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4642
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4643
                        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
  4644
                                retcode = EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4645
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4646
                        for e in c["errors"]:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  4647
                                logger.error("\n" + str(e) + "\n")
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4648
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4649
                        if c["valid"]:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4650
                                msg(_(" Cert. Effective Date:"),
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4651
                                    c["info"]["effective"])
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4652
                                msg(_("Cert. Expiration Date:"),
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4653
                                    c["info"]["expiration"])
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4654
                        return retcode
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4655
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4656
                def display_repository(r):
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4657
                        retcode = 0
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4658
                        for uri in r.origins:
2100
6a366b063036 17144 Unix socket support is defunct
johansen <johansen@opensolaris.org>
parents: 2097
diff changeset
  4659
                                msg(_("           Origin URI:"), uri)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4660
                                rval = display_ssl_info(uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4661
                                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
  4662
                                        retcode = EXIT_PARTIAL
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4663
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4664
                        for uri in r.mirrors:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4665
                                msg(_("           Mirror URI:"), uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4666
                                rval = display_ssl_info(uri)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4667
                                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
  4668
                                        retcode = EXIT_PARTIAL
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4669
                        return retcode
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4670
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4671
                def display_signing_certs(p):
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4672
                        if p.approved_ca_certs:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4673
                                msg(_("         Approved CAs:"),
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4674
                                    p.approved_ca_certs[0])
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4675
                                for h in p.approved_ca_certs[1:]:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4676
                                        msg(_("                     :"), h)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4677
                        if p.revoked_ca_certs:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4678
                                msg(_("          Revoked CAs:"),
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4679
                                    p.revoked_ca_certs[0])
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4680
                                for h in p.revoked_ca_certs[1:]:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4681
                                        msg(_("                     :"), h)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4682
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4683
                for name in pargs:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4684
                        # detailed print
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4685
                        pub = api_inst.get_publisher(prefix=name, alias=name)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4686
                        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
  4687
                        if dt:
1150
2b8aaf0b0b4e 4346 use of ctime() creates non-localized time strings
Rich Burridge <rich.burridge@sun.com>
parents: 1141
diff changeset
  4688
                                dt = dt.strftime("%c")
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 461
diff changeset
  4689
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  4690
                        msg("")
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4691
                        msg(_("            Publisher:"), pub.prefix)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4692
                        msg(_("                Alias:"), pub.alias)
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4693
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4694
                        rval = display_repository(pub.repository)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4695
                        if rval != 0:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4696
                                # There was an error in displaying some
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4697
                                # of the information about a repository.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4698
                                # However, continue on.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4699
                                retcode = rval
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4700
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4701
                        msg(_("          Client UUID:"), pub.client_uuid)
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4702
                        msg(_("      Catalog Updated:"), dt)
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4703
                        display_signing_certs(pub)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4704
                        if pub.disabled:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4705
                                msg(_("              Enabled:"), _("No"))
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4706
                        else:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4707
                                msg(_("              Enabled:"), _("Yes"))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4708
                        msg(_("     Signature Policy:"), pub.signature_policy.name)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4709
                        if "signature-required-names" in pub.properties:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4710
                                names = pub.properties["signature-required-names"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4711
                                if names:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4712
                                        msg(_("  Sig. Required Names:"), names[0])
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4713
                                        for n in names[1:]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4714
                                                msg(_("                     :"), n)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  4715
        return retcode
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  4716
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4717
def property_add_value(api_inst, args):
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4718
        """pkg add-property-value propname propvalue"""
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4719
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4720
        # ensure no options are passed in
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4721
        subcommand = "add-property-value"
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4722
        opts, pargs = getopt.getopt(args, "")
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4723
        try:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4724
                propname, propvalue = pargs
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4725
        except ValueError:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4726
                usage(_("requires a property name and value"), cmd=subcommand)
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4727
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4728
        # XXX image property management should be in pkg.client.api
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4729
        try:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4730
                img.add_property_value(propname, propvalue)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4731
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4732
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4733
                return EXIT_OOPS
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4734
        except api_errors.ApiException, e:
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4735
                error(str(e), cmd=subcommand)
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4736
                return EXIT_OOPS
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4737
        return EXIT_OK
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4738
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4739
def property_remove_value(api_inst, args):
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4740
        """pkg remove-property-value propname propvalue"""
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4741
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4742
        # ensure no options are passed in
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4743
        subcommand = "remove-property-value"
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4744
        opts, pargs = getopt.getopt(args, "")
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4745
        try:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4746
                propname, propvalue = pargs
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4747
        except ValueError:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4748
                usage(_("requires a property name and value"), cmd=subcommand)
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4749
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4750
        # XXX image property management should be in pkg.client.api
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4751
        try:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4752
                img.remove_property_value(propname, propvalue)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4753
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4754
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4755
                return EXIT_OOPS
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4756
        except api_errors.ApiException, e:
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4757
                error(str(e), cmd=subcommand)
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4758
                return EXIT_OOPS
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4759
        return EXIT_OK
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4760
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4761
def property_set(api_inst, args):
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4762
        """pkg set-property propname propvalue [propvalue ...]"""
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4763
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4764
        # ensure no options are passed in
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4765
        subcommand = "set-property"
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4766
        opts, pargs = getopt.getopt(args, "")
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4767
        try:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4768
                propname = pargs[0]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4769
                propvalues = pargs[1:]
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4770
        except IndexError:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4771
                propvalues = []
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4772
        if len(propvalues) == 0:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  4773
                usage(_("requires a property name and at least one value"),
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4774
                    cmd=subcommand)
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4775
        elif propname not in ("publisher-search-order",
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4776
            "signature-policy", "signature-required-names") and \
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4777
            len(propvalues) == 1:
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4778
                # All other properties are single value, so if only one (or no)
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4779
                # value was specified, transform it.  If multiple values were
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4780
                # specified, allow the value to be passed on so that the
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4781
                # configuration classes can re-raise the appropriate error.
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4782
                propvalues = propvalues[0]
792
060a802056a4 4372 property set commands should display error for preferred-authority property
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 791
diff changeset
  4783
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4784
        props = { propname: propvalues }
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4785
        if propname == "signature-policy":
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4786
                policy = propvalues[0]
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4787
                props[propname] = policy
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4788
                params = propvalues[1:]
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4789
                if policy != "require-names" and len(params):
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4790
                        usage(_("Signature-policy %s doesn't allow additional "
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4791
                            "parameters.") % policy, cmd=subcommand)
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4792
                elif policy == "require-names":
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4793
                        props["signature-required-names"] = params
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4794
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4795
        # XXX image property management should be in pkg.client.api
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4796
        try:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4797
                img.set_properties(props)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4798
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4799
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4800
                return EXIT_OOPS
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4801
        except api_errors.ApiException, e:
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4802
                error(str(e), cmd=subcommand)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4803
                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
  4804
        return EXIT_OK
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4805
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4806
def property_unset(api_inst, args):
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4807
        """pkg unset-property propname ..."""
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4808
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4809
        # is this an existing property in our image?
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4810
        # if so, delete it
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4811
        # if not, error
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4812
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4813
        # ensure no options are passed in
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4814
        subcommand = "unset-property"
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4815
        opts, pargs = getopt.getopt(args, "")
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4816
        if not pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  4817
                usage(_("requires at least one property name"),
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4818
                    cmd=subcommand)
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4819
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4820
        # XXX image property management should be in pkg.client.api
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4821
        for p in pargs:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4822
                try:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4823
                        img.delete_property(p)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4824
                except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4825
                        format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4826
                        return EXIT_OOPS
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4827
                except api_errors.ApiException, e:
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4828
                        error(str(e), cmd=subcommand)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4829
                        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
  4830
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4831
        return EXIT_OK
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4832
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4833
def property_list(api_inst, args):
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4834
        """pkg property [-H] [propname ...]"""
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4835
        omit_headers = False
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4836
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4837
        subcommand = "property"
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4838
        opts, pargs = getopt.getopt(args, "H")
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4839
        for opt, arg in opts:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4840
                if opt == "-H":
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4841
                        omit_headers = True
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4842
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4843
        # XXX image property management should be in pkg.client.api
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4844
        for p in pargs:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4845
                if not img.has_property(p):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4846
                        error(_("no such property: %s") % p, cmd=subcommand)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4847
                        return EXIT_OOPS
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4848
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4849
        if not pargs:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4850
                # If specific properties were named, list them in the order
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4851
                # requested; otherwise, list them sorted.
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  4852
                pargs = sorted(list(img.properties()))
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4853
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4854
        width = max(max([len(p) for p in pargs]), 8)
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4855
        fmt = "%%-%ss %%s" % width
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4856
        if not omit_headers:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4857
                msg(fmt % ("PROPERTY", "VALUE"))
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4858
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4859
        for p in pargs:
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4860
                msg(fmt % (p, img.get_property(p)))
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 542
diff changeset
  4861
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4862
        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
  4863
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4864
def variant_list(api_inst, args):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4865
        """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
  4866
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4867
        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
  4868
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4869
        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
  4870
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4871
        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
  4872
                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
  4873
                        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
  4874
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4875
        # XXX image variants should be accessible through pkg.client.api
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4876
        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
  4877
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4878
        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
  4879
                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
  4880
                        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
  4881
                        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
  4882
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4883
        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
  4884
                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
  4885
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4886
        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
  4887
        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
  4888
        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
  4889
                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
  4890
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4891
        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
  4892
                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
  4893
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4894
        return EXIT_OK
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4895
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4896
def facet_list(api_inst, args):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4897
        """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
  4898
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4899
        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
  4900
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4901
        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
  4902
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4903
        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
  4904
                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
  4905
                        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
  4906
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4907
        # XXX image facets should be accessible through pkg.client.api
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4908
        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
  4909
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4910
        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
  4911
                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
  4912
                        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
  4913
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4914
        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
  4915
                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
  4916
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4917
        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
  4918
                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
  4919
        else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4920
                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
  4921
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4922
        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
  4923
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4924
        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
  4925
                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
  4926
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4927
        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
  4928
                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
  4929
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  4930
        return EXIT_OK
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  4931
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4932
def list_linked(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4933
    li_ignore, omit_headers):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4934
        """pkg list-linked [-H]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4935
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4936
        List all the linked images known to the current image."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4937
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4938
        api_inst.progresstracker = get_tracker(quiet=omit_headers)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4939
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4940
        if li_ignore and type(li_ignore) == list:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4941
                li_ignore = api_inst.parse_linked_name_list(li_ignore)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4942
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4943
        li_list = api_inst.list_linked(li_ignore)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4944
        if len(li_list) == 0:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4945
                return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4946
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4947
        fmt = ""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4948
        li_header = [_("NAME"), _("RELATIONSHIP"), _("PATH")]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4949
        for col in range(0, len(li_header)):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4950
                width = max([len(row[col]) for row in li_list])
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4951
                width = max(width, len(li_header[col]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4952
                if (fmt != ''):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4953
                        fmt += "\t"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4954
                fmt += "%%-%ss" % width
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4955
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4956
        if not omit_headers:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4957
                msg(fmt % tuple(li_header))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4958
        for row in li_list:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4959
                msg(fmt % tuple(row))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4960
        return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4961
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4962
def __parse_linked_props(args, op):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4963
        """"Parse linked image property options that were specified on the
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4964
        command line into a dictionary.  Make sure duplicate properties were
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4965
        not specified."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4966
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4967
        linked_props = dict()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4968
        for pv in args:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4969
                try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4970
                        p, v = pv.split("=", 1)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4971
                except ValueError:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4972
                        usage(_("linked image property arguments must be of "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4973
                            "the form '<name>=<value>'."), cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4974
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4975
                if p not in li.prop_values:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4976
                        usage(_("invalid linked image property: '%s'.") % p,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4977
                            cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4978
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4979
                if p in linked_props:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4980
                        usage(_("linked image property specified multiple "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4981
                            "times: '%s'.") % p, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4982
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4983
                linked_props[p] = v
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4984
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4985
        return linked_props
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4986
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4987
def list_property_linked(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4988
    li_name, omit_headers):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4989
        """pkg property-linked [-H] [-l <li-name>] [propname ...]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4990
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4991
        List the linked image properties associated with a child or parent
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4992
        image."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4993
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4994
        api_inst.progresstracker = get_tracker(quiet=omit_headers)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4995
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4996
        lin = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4997
        if li_name:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4998
                lin = api_inst.parse_linked_name(li_name)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  4999
        props = api_inst.get_linked_props(lin=lin)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5000
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5001
        for p in pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5002
                if p not in props.keys():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5003
                        error(_("%(op)s: no such property: %(p)s") %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5004
                            {"op": op, "p": p})
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5005
                        return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5006
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5007
        if len(props) == 0:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5008
                return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5009
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5010
        if not pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5011
                pargs = props.keys()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5012
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5013
        width = max(max([len(p) for p in pargs if props[p]]), 8)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5014
        fmt = "%%-%ss\t%%s" % width
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5015
        if not omit_headers:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5016
                msg(fmt % ("PROPERTY", "VALUE"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5017
        for p in sorted(pargs):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5018
                if not props[p]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5019
                        continue
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5020
                msg(fmt % (p, props[p]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5021
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5022
        return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5023
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5024
def set_property_linked(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5025
    accept, backup_be, backup_be_name, be_activate, be_name, li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5026
    li_md_only, li_name, li_parent_sync, li_pkg_updates, new_be, noexecute,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5027
    origins, parsable_version, quiet, refresh_catalogs, reject_pats,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5028
    show_licenses, update_index, verbose):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5029
        """pkg set-property-linked
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5030
            [-nvq] [--accept] [--licenses] [--no-index] [--no-refresh]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5031
            [--no-parent-sync] [--no-pkg-updates]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5032
            [--linked-md-only] <propname>=<propvalue> ...
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5033
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5034
        Change the specified linked image properties.  This may result in
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5035
        updating the package contents of a child image."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5036
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5037
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5038
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5039
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5040
        # make sure we're a child image
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5041
        if li_name:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5042
                lin = api_inst.parse_linked_name(li_name)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5043
        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5044
                lin = api_inst.get_linked_name()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5045
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5046
        xrval, xres = get_fmri_args(api_inst, reject_pats, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5047
        if not xrval:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5048
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5049
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5050
        return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5051
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5052
def audit_linked(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5053
    li_parent_sync, li_target_all, li_target_list, omit_headers, quiet):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5054
        """pkg audit-linked [-a|-l <li-name>]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5055
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5056
        Audit one or more child images to see if they are in sync
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5057
        with their parent image."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5058
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5059
        api_inst.progresstracker = get_tracker(quiet=omit_headers)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5060
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5061
        li_target_list = api_inst.parse_linked_name_list(li_target_list)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5062
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5063
        # audit the requested child image(s)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5064
        if not li_target_all and not li_target_list:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5065
                # audit the current image
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5066
                rvdict = api_inst.audit_linked(li_parent_sync=li_parent_sync)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5067
        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5068
                # audit the requested child image(s)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5069
                rvdict = api_inst.audit_linked_children(li_target_list)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5070
                if not rvdict:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5071
                        # may not have had any children
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5072
                        return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5073
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5074
        # display audit return values
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5075
        width = max(max([len(k) for k in rvdict.keys()]), 8)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5076
        fmt = "%%-%ss\t%%s" % width
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5077
        if not omit_headers:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5078
                msg(fmt % ("NAME", "STATUS"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5079
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5080
        if not quiet:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5081
                for k, (rv, err, p_dict) in rvdict.items():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5082
                        if rv == EXIT_OK:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5083
                                msg(fmt % (k, _("synced")))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5084
                        elif rv == EXIT_DIVERGED:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5085
                                msg(fmt % (k, _("diverged")))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5086
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5087
        rv, err, p_dicts = api_inst.audit_linked_rvdict2rv(rvdict)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5088
        if err:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5089
                error(err, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5090
        return rv
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5091
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5092
def sync_linked(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5093
    accept, backup_be, backup_be_name, be_activate, be_name, li_ignore,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5094
    li_parent_sync, new_be, noexecute, origins, parsable_version, quiet,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5095
    refresh_catalogs, reject_pats, show_licenses, update_index, verbose,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5096
    li_md_only, li_pkg_updates, li_target_all, li_target_list, stage):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5097
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5098
        """pkg audit-linked [-a|-l <li-name>]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5099
            [-nvq] [--accept] [--licenses] [--no-index] [--no-refresh]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5100
            [--no-parent-sync] [--no-pkg-updates]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5101
            [--linked-md-only] [-a|-l <name>]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5102
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5103
        Sync one or more child images with their parent image."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5104
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5105
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5106
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5107
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5108
        xrval, xres = get_fmri_args(api_inst, reject_pats, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5109
        if not xrval:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5110
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5111
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5112
        api_inst.set_stage(stage)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5113
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5114
        li_target_list = api_inst.parse_linked_name_list(li_target_list)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5115
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5116
        if not li_target_all and not li_target_list:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5117
                # sync the current image
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5118
                return __api_op(op, api_inst, _accept=accept,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5119
                    _li_ignore=li_ignore, _noexecute=noexecute,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5120
                    _origins=origins, _parsable_version=parsable_version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5121
                    _quiet=quiet, _show_licenses=show_licenses, _stage=stage,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5122
                    _verbose=verbose, backup_be=backup_be,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5123
                    backup_be_name=backup_be_name, be_activate=be_activate,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5124
                    be_name=be_name, li_md_only=li_md_only,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5125
                    li_parent_sync=li_parent_sync,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5126
                    li_pkg_updates=li_pkg_updates, new_be=new_be,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5127
                    refresh_catalogs=refresh_catalogs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5128
                    reject_list=reject_pats,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5129
                    update_index=update_index)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5130
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5131
        # sync the requested child image(s)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5132
        rvdict = api_inst.sync_linked_children(li_target_list,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5133
            noexecute=noexecute, accept=accept, show_licenses=show_licenses,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5134
            refresh_catalogs=refresh_catalogs, update_index=update_index,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5135
            li_pkg_updates=li_pkg_updates, li_md_only=li_md_only)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5136
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5137
        rv, err, p_dicts = api_inst.sync_linked_rvdict2rv(rvdict)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5138
        if err:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5139
                error(err, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5140
        if parsable_version is not None and rv == EXIT_OK:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5141
                try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5142
                        __display_parsable_plan(api_inst, parsable_version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5143
                            p_dicts)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5144
                except api_errors.ApiException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5145
                        error(e, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5146
                        return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5147
        return rv
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5148
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5149
def attach_linked(op, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5150
    accept, allow_relink, attach_child, attach_parent, be_activate,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5151
    backup_be, backup_be_name, be_name, force, li_ignore, li_md_only,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5152
    li_parent_sync, li_pkg_updates, li_props, new_be, noexecute, origins,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5153
    parsable_version, quiet, refresh_catalogs, reject_pats, show_licenses,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5154
    update_index, verbose):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5155
        """pkg attach-linked
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5156
            [-fnvq] [--accept] [--licenses] [--no-index] [--no-refresh]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5157
            [--no-pkg-updates] [--linked-md-only]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5158
            [--allow-relink]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5159
            [--parsable-version=<version>]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5160
            [--prop-linked <propname>=<propvalue> ...]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5161
            (-c|-p) <li-name> <dir>
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5162
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5163
        Attach a child linked image.  The child could be this image attaching
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5164
        itself to a parent, or another image being attach as a child with
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5165
        this image being the parent."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5166
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5167
        api_inst.progresstracker = get_tracker(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5168
            parsable_version=parsable_version, quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5169
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5170
        for k, v in li_props:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5171
                if k in [li.PROP_PATH, li.PROP_NAME, li.PROP_MODEL]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5172
                        usage(_("cannot specify linked image property: '%s'") %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5173
                            k, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5174
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5175
        if len(pargs) < 2:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5176
                usage(_("a linked image name and path must be specified"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5177
                    cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5178
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5179
        li_name = pargs[0]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5180
        li_path = pargs[1]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5181
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5182
        # parse the specified name
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5183
        lin = api_inst.parse_linked_name(li_name, allow_unknown=True)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5184
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5185
        xrval, xres = get_fmri_args(api_inst, reject_pats, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5186
        if not xrval:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5187
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5188
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5189
        if attach_parent:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5190
                # attach the current image to a parent
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5191
                return __api_op(op, api_inst, _accept=accept,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5192
                    _li_ignore=li_ignore, _noexecute=noexecute,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5193
                    _origins=origins, _parsable_version=parsable_version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5194
                    _quiet=quiet, _show_licenses=show_licenses,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5195
                    _verbose=verbose, allow_relink=allow_relink,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5196
                    backup_be=backup_be, backup_be_name=backup_be_name,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5197
                    be_activate=be_activate, be_name=be_name, force=force,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5198
                    li_md_only=li_md_only, li_path=li_path,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5199
                    li_pkg_updates=li_pkg_updates, li_props=li_props,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5200
                    lin=lin, new_be=new_be, refresh_catalogs=refresh_catalogs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5201
                    reject_list=reject_pats, update_index=update_index)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5202
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5203
        # attach the requested child image
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5204
        (rv, err, p_dict) = api_inst.attach_linked_child(lin, li_path, li_props,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5205
            accept=accept, allow_relink=allow_relink, force=force,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5206
            li_md_only=li_md_only, li_pkg_updates=li_pkg_updates,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5207
            noexecute=noexecute, refresh_catalogs=refresh_catalogs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5208
            reject_list=reject_pats, show_licenses=show_licenses,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5209
            update_index=update_index)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5210
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5211
        if err:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5212
                error(err, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5213
        if parsable_version is not None and rv == EXIT_OK:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5214
                assert p_dict is not None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5215
                try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5216
                        __display_parsable_plan(api_inst, parsable_version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5217
                            [p_dict])
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5218
                except api_errors.ApiException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5219
                        error(e, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5220
                        return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5221
        return rv
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5222
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5223
def detach_linked(op, api_inst, pargs, force, li_target_all, li_target_list,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5224
    noexecute, quiet, verbose):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5225
        """pkg detach-linked
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5226
            [-fnvq] [-a|-l <li-name>] [--linked-md-only]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5227
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5228
        Detach one or more child linked images."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5229
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5230
        api_inst.progresstracker = get_tracker(quiet=quiet, verbose=verbose)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5231
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5232
        li_target_list = api_inst.parse_linked_name_list(li_target_list)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5233
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5234
        if not li_target_all and not li_target_list:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5235
                # detach the current image
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5236
                return __api_op(op, api_inst, _noexecute=noexecute,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5237
                    _quiet=quiet, _verbose=verbose, force=force)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5238
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5239
        # detach the requested child image(s)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5240
        rvdict = api_inst.detach_linked_children(li_target_list, force=force,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5241
            noexecute=noexecute)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5242
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5243
        rv, err, p_dicts = api_inst.detach_linked_rvdict2rv(rvdict)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5244
        if err:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5245
                error(err, cmd=op)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5246
        return rv
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5247
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  5248
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
  5249
        """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
  5250
        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
  5251
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
  5252
        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
  5253
        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
  5254
        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
  5255
        kernel statistics or device information."""
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  5256
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5257
        cmd_name = "image-create"
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5258
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5259
        force = False
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5260
        imgtype = IMG_TYPE_USER
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 103
diff changeset
  5261
        is_zone = False
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5262
        add_mirrors = set()
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5263
        add_origins = set()
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5264
        pub_name = None
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5265
        pub_url = None
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5266
        refresh_allowed = True
310
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  5267
        ssl_key = None
8fa744df663a 975 Catalogs need to know their origins
johansen <johansen@sun.com>
parents: 309
diff changeset
  5268
        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
  5269
        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
  5270
        facets = pkg.facet.Facets()
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5271
        set_props = {}
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5272
        version = None
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  5273
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5274
        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
  5275
            ["force", "full", "partial", "user", "zone", "authority=", "facet=",
1937
be8995c7bb8f 10924 Want ability to communicate over unix sockets
johansen <johansen@opensolaris.org>
parents: 1895
diff changeset
  5276
                "mirror=", "origin=", "publisher=", "no-refresh", "variant=",
2100
6a366b063036 17144 Unix socket support is defunct
johansen <johansen@opensolaris.org>
parents: 2097
diff changeset
  5277
                "set-property="])
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  5278
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
  5279
        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
  5280
                # -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
  5281
                if opt in ("-a", "-p", "--publisher"):
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5282
                        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
  5283
                        try:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  5284
                                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
  5285
                        except ValueError:
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5286
                                pub_name = None
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5287
                                pub_url = arg
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5288
                        if pub_url:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5289
                                pub_url = misc.parse_uri(pub_url, cwd=orig_cwd)
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5290
                elif opt == "-c":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5291
                        ssl_cert = arg
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5292
                elif opt == "-f" or opt == "--force":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5293
                        force = True
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5294
                elif opt in ("-g", "--origin"):
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5295
                        add_origins.add(misc.parse_uri(arg, cwd=orig_cwd))
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5296
                elif opt == "-k":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5297
                        ssl_key = arg
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5298
                elif opt in ("-m", "--mirror"):
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5299
                        add_mirrors.add(misc.parse_uri(arg, cwd=orig_cwd))
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5300
                elif opt == "-z" or opt == "--zone":
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5301
                        is_zone = True
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5302
                        imgtype = IMG_TYPE_ENTIRE
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5303
                elif opt == "-F" or opt == "--full":
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5304
                        imgtype = IMG_TYPE_ENTIRE
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5305
                elif opt == "-P" or opt == "--partial":
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5306
                        imgtype = IMG_TYPE_PARTIAL
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5307
                elif opt == "-U" or opt == "--user":
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5308
                        imgtype = IMG_TYPE_USER
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5309
                elif opt == "--facet":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5310
                        allow = { "TRUE": True, "FALSE": False }
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5311
                        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5312
                                f_name, f_value = arg.split("=", 1)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5313
                        except ValueError:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5314
                                f_name = arg
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5315
                                f_value = ""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5316
                        if not f_name.startswith("facet."):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5317
                                f_name = "facet.%s" % f_name
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5318
                        if not f_name or f_value.upper() not in allow:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5319
                                usage(_("Facet arguments must be of the "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5320
                                    "form '<name>=(True|False)'"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5321
                                    cmd=cmd_name)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5322
                        facets[f_name] = allow[f_value.upper()]
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  5323
                elif opt == "--no-refresh":
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5324
                        refresh_allowed = False
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5325
                elif opt == "--set-property":
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5326
                        t = arg.split("=", 1)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5327
                        if len(t) < 2:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5328
                                usage(_("properties to be set must be of the "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5329
                                    "form '<name>=<value>'. This is what was "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5330
                                    "given: %s") % arg, cmd=cmd_name)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5331
                        if t[0] in set_props:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5332
                                usage(_("a property may only be set once in a "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5333
                                    "command. %s was set twice") % t[0],
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5334
                                    cmd=cmd_name)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5335
                        set_props[t[0]] = t[1]
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5336
                elif opt == "--variant":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5337
                        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5338
                                v_name, v_value = arg.split("=", 1)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5339
                                if not v_name.startswith("variant."):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5340
                                        v_name = "variant.%s" % v_name
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5341
                        except ValueError:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5342
                                usage(_("variant arguments must be of the "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5343
                                    "form '<name>=<value>'."),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5344
                                    cmd=cmd_name)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5345
                        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
  5346
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5347
        if not pargs:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5348
                usage(_("an image directory path must be specified"),
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5349
                    cmd=cmd_name)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5350
        elif len(pargs) > 1:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  5351
                usage(_("only one image directory path may be specified"),
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5352
                    cmd=cmd_name)
1111
26c3e2407c53 8570 zone installer needs support for ssl certs & keys
Dan Price <dp@eng.sun.com>
parents: 1102
diff changeset
  5353
        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
  5354
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5355
        if not pub_name and not refresh_allowed:
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5356
                usage(_("--no-refresh cannot be used with -p unless a "
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5357
                    "publisher prefix is provided."), cmd=cmd_name)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5358
2100
6a366b063036 17144 Unix socket support is defunct
johansen <johansen@opensolaris.org>
parents: 2097
diff changeset
  5359
        if not refresh_allowed and pub_url:
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5360
                # Auto-config can't be done if refresh isn't allowed, so treat
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5361
                # this as a manual configuration case.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5362
                add_origins.add(pub_url)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5363
                repo_uri = None
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5364
        else:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5365
                repo_uri = pub_url
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5366
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5367
        # Get sanitized SSL Cert/Key input values.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5368
        ssl_cert, ssl_key = _get_ssl_cert_key(image_dir, is_zone, ssl_cert,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5369
            ssl_key)
327
6c6bd07efe8d 1031 authority prefix needs validation
johansen <johansen@sun.com>
parents: 326
diff changeset
  5370
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5371
        global _api_inst
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5372
        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
  5373
        try:
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1352
diff changeset
  5374
                progtrack = get_tracker()
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5375
                _api_inst = api.image_create(PKG_CLIENT_NAME, CLIENT_API_VERSION,
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5376
                    image_dir, imgtype, is_zone, facets=facets, force=force,
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5377
                    mirrors=list(add_mirrors), origins=list(add_origins),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5378
                    prefix=pub_name, progtrack=progtrack,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5379
                    refresh_allowed=refresh_allowed, ssl_cert=ssl_cert,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5380
                    ssl_key=ssl_key, repo_uri=repo_uri, variants=variants,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5381
                    props=set_props)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5382
                img = _api_inst.img
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
  5383
        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
  5384
                # Ensure messages are displayed after the spinner.
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  5385
                logger.error("\n")
1063
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  5386
                error(_("The URI '%(pub_url)s' does not appear to point to a "
1895
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  5387
                    "valid pkg repository.\nPlease check the repository's "
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  5388
                    "location and the client's network configuration."
1063
80e49e35ce17 4461 l10n changes to allow string inputs reordering
Rich Burridge <rich.burridge@sun.com>
parents: 1053
diff changeset
  5389
                    "\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
  5390
                    { "pub_url": pub_url, "error": e },
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5391
                    cmd=cmd_name)
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  5392
                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
  5393
                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
  5394
        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
  5395
                # Ensure messages are displayed after the spinner.
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5396
                error("", cmd=cmd_name)
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
  5397
                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
  5398
                        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
  5399
                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
  5400
                        return EXIT_PARTIAL
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5401
        except api_errors.ApiException, e:
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 1970
diff changeset
  5402
                error(str(e), cmd=cmd_name)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  5403
                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
  5404
        return EXIT_OK
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  5405
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5406
def rebuild_index(api_inst, pargs):
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  5407
        """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
  5408
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  5409
        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
  5410
        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
  5411
442
01fb28d438b3 2418 'pkg version', 'pkg image-update' should error on additional arguments
Dan Price <dp@eng.sun.com>
parents: 432
diff changeset
  5412
        if pargs:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  5413
                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
  5414
                    " ".join(pargs), cmd="rebuild-index")
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  5415
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  5416
        try:
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  5417
                api_inst.rebuild_search_index()
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5418
        except api_errors.ImageFormatUpdateNeeded, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5419
                format_update_error(e)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5420
                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
  5421
        except api_errors.CorruptedIndexException:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5422
                error("The search index appears corrupted.  Please rebuild the "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5423
                    "index with 'pkg rebuild-index'.", 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
  5424
                return EXIT_OOPS
941
e7bff46da54e 6175 search needs to be moved to version 1
Brock Pytlik <bpytlik@sun.com>
parents: 938
diff changeset
  5425
        except api_errors.ProblematicPermissionsIndexException, e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5426
                error(str(e))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5427
                error(_("\n(Failure to consistently execute pkg commands as a "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5428
                    "privileged user is often a source of this problem.)"))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  5429
                return EXIT_OOPS
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5430
        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
  5431
                return EXIT_OK
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5432
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5433
def history_list(api_inst, args):
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5434
        """Display history about the current image.
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5435
        """
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5436
        # define column name, header, field width and <History> attribute name
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5437
        # we compute 'reason' and 'time' columns ourselves
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5438
        history_cols = {
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5439
            "be": (_("BE"), "%-20s", "operation_be"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5440
            "be_uuid": (_("BE UUID"), "%-41s", "operation_be_uuid"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5441
            "client": (_("CLIENT"), "%-19s", "client_name"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5442
            "client_ver": (_("VERSION"), "%-15s", "client_version"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5443
            "command": (_("COMMAND"), "%s", "client_args"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5444
            "finish": (_("FINISH"), "%-25s", "operation_end_time"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5445
            "id": (_("ID"), "%-10s", "operation_userid"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5446
            "new_be": (_("NEW BE"), "%-20s", "operation_new_be"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5447
            "new_be_uuid": (_("NEW BE UUID"), "%-41s", "operation_new_be_uuid"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5448
            "operation": (_("OPERATION"), "%-25s", "operation_name"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5449
            "outcome": (_("OUTCOME"), "%-12s", "operation_result"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5450
            "reason": (_("REASON"), "%-10s", None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5451
            "snapshot": (_("SNAPSHOT"), "%-20s", "operation_snapshot"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5452
            "start": (_("START"), "%-25s", "operation_start_time"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5453
            "time": (_("TIME"), "%-10s", None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5454
            "user": (_("USER"), "%-10s", "operation_username"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5455
            # omitting start state, end state, errors for now
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5456
            # as these don't nicely fit into columns
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5457
        }
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5458
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5459
        omit_headers = False
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5460
        long_format = False
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5461
        column_format = False
1889
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5462
        display_limit = None    # Infinite
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5463
        time_vals = [] # list of timestamps for which we want history events
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5464
        columns = ["start", "operation", "client", "outcome"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5465
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5466
        opts, pargs = getopt.getopt(args, "Hln:o:t:")
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5467
        for opt, arg in opts:
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5468
                if opt == "-H":
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5469
                        omit_headers = True
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5470
                elif opt == "-l":
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5471
                        long_format = True
1889
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5472
                elif opt == "-n":
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5473
                        try:
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5474
                                display_limit = int(arg)
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5475
                        except ValueError:
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5476
                                logger.error(
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5477
                                    _("Argument to -n must be numeric"))
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5478
                                return EXIT_BADOPT
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5479
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5480
                        if display_limit <= 0:
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5481
                                logger.error(
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5482
                                    _("Argument to -n must be positive"))
e670eae1a5f4 15365 pkg history could use a way to show the most recent N entries
Richard Lowe <richlowe@richlowe.net>
parents: 1859
diff changeset
  5483
                                return EXIT_BADOPT
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5484
                elif opt == "-o":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5485
                        column_format = True
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5486
                        columns = arg.split(",")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5487
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5488
                        # 'command' and 'reason' are multi-field columns, we
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5489
                        # insist they be the last item in the -o output,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5490
                        # otherwise scripts could be broken by different numbers
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5491
                        # of output fields
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5492
                        if "command" in columns and "reason" in columns:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5493
                                # Translators: 'command' and 'reason' are
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5494
                                # keywords and should not be translated
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5495
                                logger.error(_("'command' and 'reason' columns "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5496
                                    "cannot be used together."))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5497
                                return EXIT_BADOPT
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5498
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5499
                        for col in ["command", "reason"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5500
                                if col in columns and \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5501
                                    columns.index(col) != len(columns) - 1:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5502
                                        logger.error(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5503
                                            _("The '%s' column must be the "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5504
                                            "last item in the -o list") % col)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5505
                                        return EXIT_BADOPT
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5506
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5507
                        for col in columns:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5508
                                if col not in history_cols:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5509
                                        logger.error(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5510
                                            _("Unknown output column '%s'") %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5511
                                            col)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5512
                                        return EXIT_BADOPT
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5513
                        if not __unique_columns(columns):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5514
                                return EXIT_BADOPT
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5515
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5516
                elif opt == "-t":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5517
                        time_vals.extend(arg.split(","))
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5518
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5519
        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
  5520
                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
  5521
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5522
        if column_format and long_format:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5523
                usage(_("-o and -l may not be combined"), cmd="history")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5524
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5525
        if time_vals and display_limit:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5526
                usage(_("-n and -t may not be combined"), cmd="history")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5527
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5528
        history_fmt = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5529
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5530
        if not long_format:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5531
                headers = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5532
                # build our format string
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5533
                for col in columns:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5534
                        # no need for trailing space for our last column
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5535
                        if columns.index(col) == len(columns) - 1:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5536
                                fmt = "%s"
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5537
                        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5538
                                fmt = history_cols[col][1]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5539
                        if history_fmt:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5540
                                history_fmt = "%s%s" % (history_fmt, fmt)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5541
                        else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5542
                                history_fmt = "%s" % fmt
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5543
                        headers.append(history_cols[col][0])
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5544
                if not omit_headers:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5545
                        msg(history_fmt % tuple(headers))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5547
        def gen_entries():
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5548
                """Error handler for history generation; avoids need to indent
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5549
                and clobber formatting of logic below."""
732
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  5550
                try:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5551
                        for he in api_inst.gen_history(limit=display_limit,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5552
                            times=time_vals):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5553
                                yield he
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5554
                except api_errors.HistoryException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5555
                        error(str(e), cmd="history")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5556
                        sys.exit(EXIT_OOPS)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5557
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5558
        for he in gen_entries(): 
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5559
                # populate a dictionary containing our output
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5560
                output = {}
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5561
                for col in history_cols:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5562
                        if not history_cols[col][2]:
732
9ea802fef2fb 3540 client should be resilient against corrupt history
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 727
diff changeset
  5563
                                continue
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5564
                        output[col] = getattr(he, history_cols[col][2], None)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5565
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5566
                # format some of the History object attributes ourselves
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5567
                output["start"] = misc.timestamp_to_time(
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5568
                    he.operation_start_time)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5569
                output["start"] = datetime.datetime.fromtimestamp(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5570
                    output["start"]).isoformat()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5571
                output["finish"] = misc.timestamp_to_time(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5572
                    he.operation_end_time)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5573
                output["finish"] = datetime.datetime.fromtimestamp(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5574
                    output["finish"]).isoformat()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5575
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5576
                dt_start = misc.timestamp_to_datetime(he.operation_start_time)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5577
                dt_end = misc.timestamp_to_datetime(he.operation_end_time)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5578
                if dt_start > dt_end:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5579
                        error(_("History operation appeared to end before it "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5580
                            "started.  Start time: %(start_time)s, "
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5581
                            "End time: %(end_time)s") %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5582
                            (output["start"], output["finish"]), cmd="history")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5583
                        return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5584
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5585
                output["time"] = dt_end - dt_start
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5586
                # This should never happen.  We can't use timedelta's str()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5587
                # method, since it prints eg. "4 days, 3:12:54" breaking our
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5588
                # field separation, so we need to do this by hand.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5589
                if output["time"].days > 0:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5590
                        total_time = output["time"]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5591
                        secs = total_time.seconds
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5592
                        add_hrs = total_time.days * 24
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5593
                        mins, secs = divmod(secs, 60)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5594
                        hrs, mins = divmod(mins, 60)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5595
                        output["time"] = "%s:%s:%s" % \
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5596
                            (add_hrs + hrs, mins, secs)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5597
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5598
                output["command"] = " ".join(he.client_args)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5599
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5600
                # Where we weren't able to lookup the current name, add a '*' to
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5601
                # the entry, indicating the boot environment is no longer
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5602
                # present.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5603
                if he.operation_be and he.operation_current_be:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5604
                        output["be"] = he.operation_current_be
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5605
                elif he.operation_be_uuid:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5606
                        output["be"] = "%s*" % he.operation_be
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5607
                else:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5608
                        output["be"] = he.operation_be
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5609
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5610
                if he.operation_new_be and he.operation_current_new_be:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5611
                        output["new_be"] = he.operation_current_new_be
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5612
                elif he.operation_new_be_uuid:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5613
                        output["new_be"] = "%s*" % he.operation_new_be
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5614
                else:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5615
                        output["new_be"] = "%s" % he.operation_new_be
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5616
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5617
                outcome, reason = he.operation_result_text
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5618
                output["outcome"] = outcome
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5619
                output["reason"] = reason
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5620
                output["snapshot"] = he.operation_snapshot
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5621
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5622
                # be, snapshot and new_be use values in parenthesis
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5623
                # since these cannot appear in valid BE or snapshot names
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5624
                if not output["be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5625
                        output["be"] = _("(Unknown)")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5626
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5627
                if not output["be_uuid"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5628
                        output["be_uuid"] = _("(Unknown)")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5629
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5630
                if not output["snapshot"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5631
                        output["snapshot"] = _("(None)")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5632
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5633
                if not output["new_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5634
                        output["new_be"] = _("(None)")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5635
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5636
                if not output["new_be_uuid"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5637
                        output["new_be_uuid"] = _("(None)")
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5638
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5639
                if long_format:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5640
                        data = __get_long_history_data(he, output)
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5641
                        for field, value in data:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5642
                                msg("%18s: %s" % (field, value))
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5643
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5644
                        # Separate log entries with a blank line.
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5645
                        msg("")
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5646
                else:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5647
                        items = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5648
                        for col in columns:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5649
                                items.append(output[col])
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5650
                        msg(history_fmt % tuple(items))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  5651
        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
  5652
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5653
def __unique_columns(columns):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5654
        """Return true if each entry in the provided list of columns only
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5655
        appears once."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5656
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5657
        seen_cols = set()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5658
        dup_cols = set()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5659
        for col in columns:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5660
                if col in seen_cols:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5661
                        dup_cols.add(col)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5662
                seen_cols.add(col)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5663
        for col in dup_cols:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5664
                logger.error(_("Duplicate column specified: %s") % col)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5665
        return not dup_cols
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5666
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5667
def __get_long_history_data(he, hist_info):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5668
        """Return an array of tuples containing long_format history info"""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5669
        data = []
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5670
        data.append((_("Operation"), hist_info["operation"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5671
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5672
        data.append((_("Outcome"), hist_info["outcome"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5673
        data.append((_("Reason"), hist_info["reason"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5674
        data.append((_("Client"), hist_info["client"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5675
        data.append((_("Version"), hist_info["client_ver"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5676
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5677
        data.append((_("User"), "%s (%s)" % (hist_info["user"],
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5678
            hist_info["id"])))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5679
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5680
        if hist_info["be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5681
                data.append((_("Boot Env."), hist_info["be"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5682
        if hist_info["be_uuid"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5683
                data.append((_("Boot Env. UUID"), hist_info["be_uuid"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5684
        if hist_info["new_be"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5685
                data.append((_("New Boot Env."), hist_info["new_be"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5686
        if hist_info["new_be_uuid"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5687
                data.append((_("New Boot Env. UUID"),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5688
                    hist_info["new_be_uuid"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5689
        if hist_info["snapshot"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5690
                data.append((_("Snapshot"), hist_info["snapshot"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5691
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5692
        data.append((_("Start Time"), hist_info["start"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5693
        data.append((_("End Time"), hist_info["finish"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5694
        data.append((_("Total Time"), hist_info["time"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5695
        data.append((_("Command"), hist_info["command"]))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5696
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5697
        state = he.operation_start_state
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5698
        if state:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5699
                data.append((_("Start State"), "\n" + state))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5700
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5701
        state = he.operation_end_state
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5702
        if state:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5703
                data.append((_("End State"), "\n" + state))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5704
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5705
        errors = "\n".join(he.operation_errors)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5706
        if errors:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5707
                data.append((_("Errors"), "\n" + errors))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5708
        return data
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5709
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5710
def history_purge(api_inst, 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
  5711
        """Purge image history"""
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5712
        api_inst.purge_history()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5713
        msg(_("History purged."))
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5714
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  5715
def print_proxy_config():
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  5716
        """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
  5717
        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
  5718
        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
  5719
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  5720
        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
  5721
        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
  5722
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  5723
        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
  5724
                return
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  5725
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  5726
        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
  5727
            " environment:\n"))
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  5728
        if http_proxy:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  5729
                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
  5730
        if https_proxy:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  5731
                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
  5732
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5733
def update_format(api_inst, pargs):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5734
        """Update image to newest format."""
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5735
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5736
        try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5737
                res = api_inst.update_format()
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5738
        except api_errors.ApiException, e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5739
                error(str(e), cmd="update-format")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5740
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5741
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5742
        if res:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5743
                logger.info(_("Image format updated."))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5744
                return EXIT_OK
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5745
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5746
        logger.info(_("Image format already current."))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5747
        return EXIT_NOP
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5748
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5749
def print_version(pargs):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5750
        if pargs:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5751
                usage(_("version: command does not take operands ('%s')") %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5752
                    " ".join(pargs), cmd="version")
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5753
        msg(pkg.VERSION)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5754
        return EXIT_OK
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  5755
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5756
# To allow exception handler access to the image.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5757
_api_inst = None
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5758
img = None
1752
b62d86fb62c8 14515 client can traceback during search
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
  5759
orig_cwd = None
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 427
diff changeset
  5760
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
  5761
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
  5762
        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
  5763
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5764
        global _api_inst
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5765
        global img
1687
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  5766
        global orig_cwd
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  5767
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  5768
        try:
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  5769
                orig_cwd = os.getcwd()
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  5770
        except OSError, e:
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  5771
                try:
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  5772
                        orig_cwd = os.environ["PWD"]
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  5773
                        if not orig_cwd or orig_cwd[0] != "/":
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  5774
                                orig_cwd = None
dd4aca6ac390 11554 pkg set-publisher should accept relative paths to keys and certs
Tim Foster <tim.foster@sun.com>
parents: 1685
diff changeset
  5775
                except KeyError:
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1729
diff changeset
  5776
                        orig_cwd = None
0
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  5777
f08899079fb4 implemented open, add (file case), close for transactions
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
  5778
        try:
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  5779
                opts, pargs = getopt.getopt(sys.argv[1:], "R:D:?",
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5780
                    ["debug=", "help", "runid="])
52
d7c452ef7ae1 Sanitize getopt exception handling
Danek Duvall <danek.duvall@sun.com>
parents: 50
diff changeset
  5781
        except getopt.GetoptError, e:
301
35f03c7a3adc Rework status,list,info subcommands -> list,contents,info
Dan Price <dp@eng.sun.com>
parents: 296
diff changeset
  5782
                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
  5783
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5784
        runid = os.getpid()
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  5785
        show_usage = False
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  5786
        for opt, arg in opts:
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  5787
                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
  5788
                        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
  5789
                                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
  5790
                                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
  5791
                        else:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  5792
                                try:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  5793
                                        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
  5794
                                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
  5795
                                        usage(_("%(opt)s takes argument of form "
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5796
                                            "name=value, not %(arg)s") % {
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5797
                                            "opt":  opt, "arg": arg })
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  5798
                        DebugValues.set_value(key, value)
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  5799
                elif opt == "-R":
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  5800
                        mydir = arg
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5801
                elif opt == "--runid":
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5802
                        runid = arg
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  5803
                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
  5804
                        show_usage = True
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  5805
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5806
        # placeholders in this lookup table for image-create, help and version
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5807
        # which don't have dedicated methods
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5808
        cmds = {
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5809
            "add-property-value"    : (property_add_value, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5810
            "attach-linked"         : (attach_linked, opts_attach_linked, 2),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5811
            "avoid"                 : (avoid, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5812
            "audit-linked"          : (audit_linked, opts_audit_linked),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5813
            "authority"             : (publisher_list, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5814
            "change-facet"          : (change_facet, opts_install, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5815
            "change-variant"        : (change_variant, opts_install, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5816
            "contents"              : (list_contents, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5817
            "detach-linked"         : (detach_linked, opts_detach_linked),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5818
            "facet"                 : (facet_list, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5819
            "fix"                   : (fix_image, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5820
            "freeze"                : (freeze, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5821
            "help"                  : (None, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5822
            "history"               : (history_list, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5823
            "image-create"          : (None, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5824
            "info"                  : (info, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5825
            "install"               : (install, opts_install, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5826
            "list"                  : (list_inventory, opts_list_inventory, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5827
            "list-linked"           : (list_linked, opts_list_linked),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5828
            "mediator"              : (list_mediators, opts_list_mediator, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5829
            "property"              : (property_list, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5830
            "property-linked"       : (list_property_linked,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5831
                                          opts_list_property_linked, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5832
            "publisher"             : (publisher_list, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5833
            "purge-history"         : (history_purge, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5834
            "rebuild-index"         : (rebuild_index, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5835
            "refresh"               : (publisher_refresh, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5836
            "remove-property-value" : (property_remove_value, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5837
            "revert"                : (revert, opts_revert, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5838
            "search"                : (search, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5839
            "set-authority"         : (publisher_set, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5840
            "set-mediator"          : (set_mediator, opts_set_mediator, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5841
            "set-property"          : (property_set, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5842
            "set-property-linked"   : (set_property_linked,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5843
                                          opts_set_property_linked, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5844
            "set-publisher"         : (publisher_set, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5845
            "sync-linked"           : (sync_linked, opts_sync_linked),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5846
            "unavoid"               : (unavoid, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5847
            "unfreeze"              : (unfreeze, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5848
            "uninstall"             : (uninstall, opts_uninstall, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5849
            "unset-authority"       : (publisher_unset, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5850
            "unset-property"        : (property_unset, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5851
            "update-format"         : (update_format, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5852
            "unset-mediator"        : (unset_mediator, opts_unset_mediator, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5853
            "unset-publisher"       : (publisher_unset, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5854
            "update"                : (update, opts_update, -1),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5855
            "update-format"         : (update_format, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5856
            "variant"               : (variant_list, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5857
            "verify"                : (verify_image, None),
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5858
            "version"               : (None, None),
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5859
        }
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5860
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  5861
        subcommand = None
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  5862
        if pargs:
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  5863
                subcommand = pargs.pop(0)
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5864
                # 'image-update' is an alias for 'update' for compatibility.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5865
                subcommand = subcommand.replace("image-update", "update")
934
f36f3c3d9666 7277 client should use --help and -? options to show usage information
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 930
diff changeset
  5866
                if subcommand == "help":
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5867
                        if pargs:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5868
                                sub = pargs.pop(0)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5869
                                if sub in cmds and \
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5870
                                    sub not in ["help", "-?", "--help"]:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5871
                                        usage(retcode=0, full=False, cmd=sub)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5872
                                elif sub not in ["help", "-?", "--help"]:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5873
                                        usage(_("unknown subcommand '%s'") %
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5874
                                            sub, full=True)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5875
                                else:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5876
                                        usage(retcode=0, full=True)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5877
                        else:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5878
                                usage(retcode=0, full=True)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5879
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5880
        # A gauntlet of tests to see if we need to print usage information
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5881
        if subcommand in cmds and show_usage:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5882
                usage(retcode=0, cmd=subcommand, full=False)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5883
        if subcommand and subcommand not in cmds:
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5884
                usage(_("unknown subcommand '%s'") % subcommand, full=True)
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1066
diff changeset
  5885
        if show_usage:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  5886
                usage(retcode=0, full=True)
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5887
        if not subcommand:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  5888
                usage(_("no subcommand specified"))
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5889
        if runid:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5890
                try:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5891
                        runid = int(runid)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5892
                except:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5893
                        usage(_("runid must be an integer"))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5894
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5895
        for opt in ["--help", "-?"]:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5896
                if opt in pargs:
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5897
                        usage(retcode=0, full=False, cmd=subcommand)
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5898
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  5899
        # 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
  5900
        # 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
  5901
        # 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
  5902
        # 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
  5903
        # code the value here, at least for now.
49cd5492effc 9996 Exception thrown after cancel of install
johansen <johansen@sun.com>
parents: 1191
diff changeset
  5904
        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
  5905
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5906
        cmds_no_image = {
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5907
                "version"        : print_version,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5908
                "image-create"   : image_create,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5909
        }
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5910
        func = cmds_no_image.get(subcommand, None)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5911
        if func:
584
22bc748edce6 577 need service action for smf(5) manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 583
diff changeset
  5912
                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
  5913
                        usage(_("-R not allowed for %s subcommand") %
2047
5e1340de1aba 12723 pkg per-subcommand usage/help
Tim Foster <tim.s.foster@oracle.com>
parents: 2034
diff changeset
  5914
                              subcommand, cmd=subcommand)
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  5915
                try:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5916
                        ret = func(pargs)
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  5917
                except getopt.GetoptError, e:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  5918
                        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
  5919
                return ret
50
bfcb1661f019 basic image and package plans
Stephen Hahn <sch@sun.com>
parents: 48
diff changeset
  5920
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  5921
        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
  5922
        pkg_image_used = False
242
7bd1830635c8 402 Start on some pylint cleanup, and fix missing imports
Dan Price <dp@eng.sun.com>
parents: 239
diff changeset
  5923
        if "mydir" not in locals():
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5924
                mydir, provided_image_dir = api.get_default_image_root(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5925
                    orig_cwd=orig_cwd)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5926
                if os.environ.get("PKG_IMAGE"):
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5927
                        # It's assumed that this has been checked by the above
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5928
                        # function call and hasn't been removed from the
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5929
                        # environment.
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 556
diff changeset
  5930
                        pkg_image_used = True
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5931
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5932
        if not mydir:
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
  5933
                error(_("Could not find image.  Use the -R option or set "
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5934
                    "$PKG_IMAGE to the\nlocation of an image."))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5935
                return EXIT_OOPS
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5936
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5937
        # Get ImageInterface and image object.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5938
        api_inst = __api_alloc(mydir, provided_image_dir, pkg_image_used, False,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5939
            runid=runid)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5940
        if api_inst is 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
  5941
                return EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5942
        _api_inst = api_inst
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5943
        img = api_inst.img
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5944
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5945
        # Find subcommand and execute operation.
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5946
        pargs_limit = 0
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5947
        func = cmds[subcommand][0]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5948
        opts_cmd = cmds[subcommand][1]
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5949
        if len(cmds[subcommand]) > 2:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5950
                pargs_limit = cmds[subcommand][2]
63
ba3a4af65479 add -R/$PKG_IMAGE to pkg, and -n and -v to install
Danek Duvall <danek.duvall@sun.com>
parents: 60
diff changeset
  5951
        try:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5952
                if opts_cmd == None:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5953
                        return func(api_inst, pargs)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5954
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5955
                opts, pargs = misc.opts_parse(subcommand, api_inst, pargs,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5956
                    opts_cmd, pargs_limit, usage)
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5957
                return func(op=subcommand, api_inst=api_inst,
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5958
                    pargs=pargs, **opts)
192
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  5959
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  5960
        except getopt.GetoptError, e:
1266
21bd4bf5295d 9690 cli usage errors cause unexpectedly verbose usage message
Shawn Walker <srw@sun.com>
parents: 1254
diff changeset
  5961
                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
  5962
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  5963
#
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 177
diff changeset
  5964
# 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
  5965
# 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
  5966
#
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
  5967
def handle_errors(func, non_wrap_print=True, *args, **kwargs):
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5968
        traceback_str = misc.get_traceback_message()
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  5969
        try:
1035
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  5970
                # 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
  5971
                # 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
  5972
                # 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
  5973
                # 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
  5974
                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
  5975
                        __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
  5976
                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
  5977
                        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
  5978
                            __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
  5979
                                raise
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5980
                        if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5981
                                _api_inst.abort(
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5982
                                    result=RESULT_FAILED_OUTOFMEMORY)
1035
0e243b7eb121 2297 top level error handler for out of memory conditions needed
Danek Duvall <danek.duvall@sun.com>
parents: 1023
diff changeset
  5983
                        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
  5984
                        __ret = EXIT_OOPS
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5985
        except SystemExit, __e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5986
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5987
                        _api_inst.abort(result=RESULT_FAILED_UNKNOWN)
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5988
                raise __e
384
9d4746e5dd3e 115 pkg needs to not have a cow on a SIGPIPE
Shawn Walker <swalker@opensolaris.org>
parents: 362
diff changeset
  5989
        except (PipeError, KeyboardInterrupt):
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5990
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5991
                        _api_inst.abort(result=RESULT_CANCELED)
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  5992
                # 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
  5993
                # 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
  5994
                __ret = EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5995
        except api_errors.LinkedImageException, __e:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5996
                error(_("Linked image exception(s):\n%s") %
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5997
                      str(__e))
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  5998
                __ret = __e.lix_exitrv
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  5999
        except api_errors.CertificateError, __e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6000
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6001
                        _api_inst.abort(result=RESULT_FAILED_CONFIGURATION)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  6002
                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
  6003
                __ret = EXIT_OOPS
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  6004
        except api_errors.PublisherError, __e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6005
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6006
                        _api_inst.abort(result=RESULT_FAILED_BAD_REQUEST)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 917
diff changeset
  6007
                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
  6008
                __ret = EXIT_OOPS
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  6009
        except api_errors.ImageLockedError, __e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6010
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6011
                        _api_inst.abort(result=RESULT_FAILED_LOCKED)
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  6012
                error(__e)
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1709
diff changeset
  6013
                __ret = EXIT_LOCKED
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1174
diff changeset
  6014
        except api_errors.TransportError, __e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6015
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6016
                        _api_inst.abort(result=RESULT_FAILED_TRANSPORT)
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  6017
                logger.error(_("\nErrors were encountered while attempting "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  6018
                    "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
  6019
                    "operation."))
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  6020
                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
  6021
                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
  6022
                __ret = EXIT_OOPS
1658
49b8cc06eecb 13360 client can traceback if corrupt catalogs exist
Shawn Walker <srw@sun.com>
parents: 1639
diff changeset
  6023
        except api_errors.InvalidCatalogFile, __e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6024
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6025
                        _api_inst.abort(result=RESULT_FAILED_STORAGE)
1658
49b8cc06eecb 13360 client can traceback if corrupt catalogs exist
Shawn Walker <srw@sun.com>
parents: 1639
diff changeset
  6026
                logger.error(_("""
49b8cc06eecb 13360 client can traceback if corrupt catalogs exist
Shawn Walker <srw@sun.com>
parents: 1639
diff changeset
  6027
An error was encountered while attempting to read image state information
49b8cc06eecb 13360 client can traceback if corrupt catalogs exist
Shawn Walker <srw@sun.com>
parents: 1639
diff changeset
  6028
to perform the requested operation.  Details follow:\n\n%s""") % __e)
49b8cc06eecb 13360 client can traceback if corrupt catalogs exist
Shawn Walker <srw@sun.com>
parents: 1639
diff changeset
  6029
                __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
  6030
        except api_errors.InvalidDepotResponseException, __e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6031
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6032
                        _api_inst.abort(result=RESULT_FAILED_TRANSPORT)
1895
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  6033
                logger.error(_("\nUnable to contact a valid package "
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  6034
                    "repository. This may be due to a problem with the "
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  6035
                    "repository, network misconfiguration, or an incorrect "
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  6036
                    "pkg client configuration.  Please verify the client's "
0a260cc2a689 15762 client support for filesystem-based repository access
Shawn Walker <shawn.walker@oracle.com>
parents: 1889
diff changeset
  6037
                    "network configuration and repository's location."))
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1389
diff changeset
  6038
                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
  6039
                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
  6040
                __ret = EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6041
        except api_errors.HistoryLoadException, __e:
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  6042
                # 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
  6043
                # information about the current operation(s) in progress.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6044
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6045
                        _api_inst.clear_history()
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  6046
                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
  6047
                    "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
  6048
                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
  6049
                __ret = EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6050
        except api_errors.HistoryStoreException, __e:
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  6051
                # 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
  6052
                # information about the current operation(s) in progress.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6053
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6054
                        _api_inst.clear_history()
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  6055
                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
  6056
                    "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
  6057
                    "history."))
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  6058
                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
  6059
                __ret = EXIT_OOPS
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6060
        except api_errors.HistoryPurgeException, __e:
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  6061
                # 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
  6062
                # information about the current operation(s) in progress.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6063
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6064
                        _api_inst.clear_history()
569
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  6065
                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
  6066
                    "client history."))
48f7e9d2b1ac 3715 permission or read-only filesystem errors cause history traceback
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 565
diff changeset
  6067
                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
  6068
                __ret = EXIT_OOPS
652
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  6069
        except api_errors.VersionException, __e:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6070
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6071
                        _api_inst.abort(result=RESULT_FAILED_UNKNOWN)
1829
e581a205ec02 14907 references to old-style package names must be purged
Danek Duvall <danek.duvall@sun.com>
parents: 1814
diff changeset
  6072
                error(_("The pkg command appears out of sync with the libraries"
e581a205ec02 14907 references to old-style package names must be purged
Danek Duvall <danek.duvall@sun.com>
parents: 1814
diff changeset
  6073
                    " provided\nby pkg:/package/pkg. The client version is "
e581a205ec02 14907 references to old-style package names must be purged
Danek Duvall <danek.duvall@sun.com>
parents: 1814
diff changeset
  6074
                    "%(client)s while the library\nAPI version is %(api)s.") %
652
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  6075
                    {'client': __e.received_version,
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  6076
                     'api': __e.expected_version
daa3a6212b76 4011 client.py would traceback on a api VersionException
Brock Pytlik <bpytlik@sun.com>
parents: 648
diff changeset
  6077
                    })
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  6078
                __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
  6079
        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
  6080
                __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
  6081
        except api_errors.WrapIndexingException, __e:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  6082
                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
  6083
                        raise __e.wrapped
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  6084
                __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
  6085
                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
  6086
                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
  6087
                        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
  6088
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  6089
                s += _("\n\nDespite the error while indexing, the operation "
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2073
diff changeset
  6090
                    "has completed successfuly.")
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
  6091
                error(s)
1335
3dde2385d05c 516 Clean up traceback for installs to read-only filesystems
John Sonnenschein <John.Sonnenschein@Sun.COM>
parents: 1328
diff changeset
  6092
        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
  6093
                __ret = EXIT_OOPS
221
e1dbb27a23b5 52 catalog can leave inventory behind, making pkg(1) blind
Stephen Hahn <sch@Sun.COM>
parents: 219
diff changeset
  6094
        except:
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6095
                if _api_inst:
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6096
                        _api_inst.abort(result=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
  6097
                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
  6098
                        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
  6099
                        error(traceback_str)
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  6100
                __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
  6101
        return __ret
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  6102
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
  6103
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
  6104
        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
  6105
        gettext.install("pkg", "/usr/share/locale")
1715
8f305f0a6864 8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents: 1710
diff changeset
  6106
8f305f0a6864 8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents: 1710
diff changeset
  6107
        # Make all warnings be errors.
2546
2b1fa6a54b5e Apply Shawn Walker's backport - breaking some branding
Jon Tibble <meths@btinternet.com>
parents: 2543
diff changeset
  6108
        import warnings
1715
8f305f0a6864 8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents: 1710
diff changeset
  6109
        warnings.simplefilter('error')
8f305f0a6864 8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents: 1710
diff changeset
  6110
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  6111
        __retval = handle_errors(main_func)
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  6112
        try:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  6113
                logging.shutdown()
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  6114
        except IOError:
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  6115
                # Ignore python's spurious pipe problems.
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  6116
                pass
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1351
diff changeset
  6117
        sys.exit(__retval)