src/publish.py
author Padraig O'Briain <padraig.obriain@sun.com>
Thu, 25 Feb 2010 13:45:12 +0000
changeset 1791 b2a37ff09e8c
parent 1765 80bb11d0430b
child 1897 5613625da212
permissions -rwxr-xr-x
13994 References to package names may need to change
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: 1500
diff changeset
     1
#!/usr/bin/python2.6
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     2
#
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     3
# CDDL HEADER START
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     4
#
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     8
#
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    11
# See the License for the specific language governing permissions
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    12
# and limitations under the License.
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    13
#
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    19
#
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    20
# CDDL HEADER END
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    21
#
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    22
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    23
#
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
    24
# Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    25
# Use is subject to license terms.
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    26
#
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    27
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    28
# pkgsend - publish package transactions
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    29
#
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    30
# Typical usage is
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    31
#
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    32
#       pkgsend open
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    33
#       [pkgsend summary]
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    34
#       pkgsend close
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    35
#
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    36
# A failed transaction can be cleared using
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    37
#
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    38
#       pkgsend close -A
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    39
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    40
import fnmatch
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    41
import getopt
135
a1e20e9a9845 add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents: 131
diff changeset
    42
import gettext
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    43
import os
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    44
import sys
58
0343b66379db support for publication client threading, on a per-package basis
Danek Duvall <danek.duvall@sun.com>
parents: 57
diff changeset
    45
import traceback
1715
8f305f0a6864 8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents: 1708
diff changeset
    46
import warnings
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    47
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    48
import pkg.actions
38
52e6547130fa add support for bundle publishing
Danek Duvall <danek.duvall@sun.com>
parents: 29
diff changeset
    49
import pkg.bundle
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
    50
import pkg.fmri
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
    51
import pkg.manifest
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    52
import pkg.publish.transaction as trans
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    53
from pkg.misc import msg, emsg, PipeError
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    54
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
    55
nopub_actions = [ "unknown" ]
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
    56
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
    57
def error(text, cmd=None):
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    58
        """Emit an error message prefixed by the command name """
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    59
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
    60
        if cmd:
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
    61
                text = "%s: %s" % (cmd, text)
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
    62
        else:
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
    63
                # If we get passed something like an Exception, we can convert
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
    64
                # it down to a string.
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
    65
                text = str(text)
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
    66
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    67
        # If the message starts with whitespace, assume that it should come
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    68
        # *before* the command-name prefix.
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    69
        text_nows = text.lstrip()
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    70
        ws = text[:len(text) - len(text_nows)]
28
69ad5b247616 Move publication transaction processing into its own class.
Danek Duvall <danek.duvall@sun.com>
parents: 25
diff changeset
    71
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    72
        # This has to be a constant value as we can't reliably get our actual
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    73
        # program name on all platforms.
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    74
        emsg(ws + "pkgsend: " + text_nows)
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    75
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
    76
def usage(usage_error=None, cmd=None, retcode=2):
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    77
        """Emit a usage message and optionally prefix it with a more specific
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    78
        error message.  Causes program to exit."""
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    79
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    80
        if usage_error:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
    81
                error(usage_error, cmd=cmd)
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    82
135
a1e20e9a9845 add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents: 131
diff changeset
    83
        print _("""\
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    84
Usage:
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    85
        pkgsend [options] command [cmd_options] [operands]
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    86
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    87
Packager subcommands:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
    88
        pkgsend create-repository --set-property <section.property>=<value>
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
    89
        pkgsend open [-en] pkg_fmri
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
    90
        pkgsend add action arguments
443
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 409
diff changeset
    91
        pkgsend import [-T file_pattern] bundlefile ...
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
    92
        pkgsend include [-d basedir] .. [manifest] ...
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
    93
        pkgsend close [-A | [--no-index] [--no-catalog]]
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
    94
        pkgsend publish [ -d basedir] ... [--no-index] 
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
    95
          [--fmri-in-manifest | pkg_fmri] [--no-catalog] [manifest] ...
1198
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
    96
        pkgsend generate [-T file_pattern] bundlefile ....
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
    97
        pkgsend refresh-index
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    98
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    99
Options:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   100
        -s repo_uri     target repository URI
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   101
        --help or -?    display usage message
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   102
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   103
Environment:
135
a1e20e9a9845 add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents: 131
diff changeset
   104
        PKG_REPO""")
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   105
        sys.exit(retcode)
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   106
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   107
def trans_create_repository(repo_uri, args):
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   108
        """Creates a new repository at the location indicated by repo_uri."""
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   109
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   110
        repo_props = {}
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   111
        opts, pargs = getopt.getopt(args, "", ["set-property="])
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   112
        for opt, arg in opts:
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   113
                if opt == "--set-property":
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   114
                        try:
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   115
                                prop, p_value = arg.split("=", 1)
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   116
                                p_sec, p_name = prop.split(".", 1)
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   117
                        except ValueError:
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   118
                                usage(_("property arguments must be of "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   119
                                    "the form '<section.property>="
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   120
                                    "<value>'."), cmd="create-repository")
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   121
                        repo_props.setdefault(p_sec, {})
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   122
                        repo_props[p_sec][p_name] = p_value
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   123
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   124
        try:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   125
                trans.Transaction(repo_uri, create_repo=True,
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   126
                    repo_props=repo_props)
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   127
        except trans.TransactionRepositoryConfigError, e:
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   128
                error(e, cmd="create-repository")
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   129
                emsg(_("Invalid repository configuration values were "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   130
                    "specified using --set-property or required values are "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   131
                    "missing.  Please provide the correct and/or required "
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1355
diff changeset
   132
                    "values using the --set-property option."))
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   133
        except trans.TransactionError, e:
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   134
                error(e, cmd="create-repository")
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   135
                return 1
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   136
        return 0
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   137
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   138
def trans_open(repo_uri, args):
192
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 165
diff changeset
   139
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   140
        opts, pargs = getopt.getopt(args, "en")
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   141
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   142
        parsed = []
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   143
        eval_form = True
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   144
        for opt, arg in opts:
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   145
                parsed.append(opt)
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   146
                if opt == "-e":
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   147
                        eval_form = True
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   148
                if opt == "-n":
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   149
                        eval_form = False
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   150
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   151
        if "-e" in parsed and "-n" in parsed:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   152
                usage(_("only -e or -n may be specified"), cmd="open")
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   153
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   154
        if len(pargs) != 1:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   155
                usage(_("open requires one package name"), cmd="open")
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   156
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   157
        t = trans.Transaction(repo_uri, pkg_name=pargs[0])
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   158
        if eval_form:
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   159
                msg("export PKG_TRANS_ID=%s" % t.open())
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   160
        else:
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   161
                msg(t.open())
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   162
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   163
        return 0
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   164
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   165
def trans_close(repo_uri, args):
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   166
        abandon = False
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   167
        trans_id = None
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   168
        refresh_index = True
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   169
        add_to_catalog = True
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   170
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   171
        opts, pargs = getopt.getopt(args, "At:", ["no-index", "no-catalog"])
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   172
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   173
        for opt, arg in opts:
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   174
                if opt == "-A":
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   175
                        abandon = True
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   176
                elif opt == "-t":
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   177
                        trans_id = arg
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   178
                elif opt == "--no-index":
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   179
                        refresh_index = False
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   180
                elif opt == "--no-catalog":
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   181
                        add_to_catalog = False
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   182
        if trans_id is None:
28
69ad5b247616 Move publication transaction processing into its own class.
Danek Duvall <danek.duvall@sun.com>
parents: 25
diff changeset
   183
                try:
69ad5b247616 Move publication transaction processing into its own class.
Danek Duvall <danek.duvall@sun.com>
parents: 25
diff changeset
   184
                        trans_id = os.environ["PKG_TRANS_ID"]
69ad5b247616 Move publication transaction processing into its own class.
Danek Duvall <danek.duvall@sun.com>
parents: 25
diff changeset
   185
                except KeyError:
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   186
                        usage(_("No transaction ID specified using -t or in "
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   187
                            "$PKG_TRANS_ID."), cmd="close")
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   188
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   189
        t = trans.Transaction(repo_uri, trans_id=trans_id, 
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   190
            add_to_catalog=add_to_catalog)
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   191
        pkg_state, pkg_fmri = t.close(abandon, refresh_index)
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   192
        for val in (pkg_state, pkg_fmri):
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   193
                if val is not None:
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   194
                        msg(val)
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   195
        return 0
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   196
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   197
def trans_add(repo_uri, args):
28
69ad5b247616 Move publication transaction processing into its own class.
Danek Duvall <danek.duvall@sun.com>
parents: 25
diff changeset
   198
        try:
69ad5b247616 Move publication transaction processing into its own class.
Danek Duvall <danek.duvall@sun.com>
parents: 25
diff changeset
   199
                trans_id = os.environ["PKG_TRANS_ID"]
69ad5b247616 Move publication transaction processing into its own class.
Danek Duvall <danek.duvall@sun.com>
parents: 25
diff changeset
   200
        except KeyError:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   201
                usage(_("No transaction ID specified in $PKG_TRANS_ID"),
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   202
                    cmd="add")
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   203
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   204
        if not args:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   205
                usage(_("No arguments specified for subcommand."), cmd="add")
1500
fb15a23b6915 11805 pkgdep generate doesn't respect the payload path for file actions
Brock Pytlik <bpytlik@sun.com>
parents: 1460
diff changeset
   206
                
fb15a23b6915 11805 pkgdep generate doesn't respect the payload path for file actions
Brock Pytlik <bpytlik@sun.com>
parents: 1460
diff changeset
   207
        action, lp = pkg.actions.internalizelist(args[0], args[1:])
111
647c91609117 Client-side filtering.
Danek Duvall <danek.duvall@sun.com>
parents: 106
diff changeset
   208
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   209
        if action.name in nopub_actions:
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   210
                error(_("invalid action for publication: %s") % action, cmd="add")
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   211
                return 1
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   212
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   213
        t = trans.Transaction(repo_uri, trans_id=trans_id)
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   214
        t.add(action)
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   215
        return 0
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   216
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   217
def trans_publish(repo_uri, fargs):
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   218
        opts, pargs = getopt.getopt(fargs, "d:", ["no-index", 
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   219
            "no-catalog", "fmri-in-manifest"])
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   220
        basedirs = []
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   221
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   222
        refresh_index = True
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   223
        add_to_catalog = True
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   224
        embedded_fmri = False
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   225
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   226
        for opt, arg in opts:
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   227
                if opt == "-d":
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   228
                        basedirs.append(arg)
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   229
                elif opt == "--no-index":
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   230
                        refresh_index = False
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   231
                elif opt == "--no-catalog":
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   232
                        add_to_catalog = False
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   233
                elif opt == "--fmri-in-manifest":
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   234
                        embedded_fmri = True
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   235
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   236
        if not pargs and not embedded_fmri:
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   237
                usage(_("No fmri argument specified for subcommand"),
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   238
                    cmd="publish")
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   239
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   240
        if not embedded_fmri:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   241
                pkg_name = pargs[0]
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   242
                del pargs[0]
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   243
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   244
        if not pargs:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   245
                filelist = [("<stdin>", sys.stdin)]
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   246
        else:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   247
                try:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   248
                        filelist = [(f, file(f)) for f in pargs]
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   249
                except IOError, e:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   250
                        error(e, cmd="publish")
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   251
                        return 1
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   252
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   253
        lines = ""      # giant string of all input files concatenated together
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   254
        linecnts = []   # tuples of starting line number, ending line number
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   255
        linecounter = 0 # running total
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   256
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   257
        for filename, f in filelist:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   258
                try:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   259
                        data = f.read()
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   260
                except IOError, e:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   261
                        error(e, cmd="publish")
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   262
                        return 1                
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   263
                lines += data
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   264
                linecnt = len(data.splitlines())
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   265
                linecnts.append((linecounter, linecounter + linecnt))
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   266
                linecounter += linecnt
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   267
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   268
        m = pkg.manifest.Manifest()
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   269
        try:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   270
                m.set_content(lines)
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   271
        except pkg.actions.ActionError, e:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   272
                lineno = e.lineno
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   273
                for i, tup in enumerate(linecnts):
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   274
                        if lineno > tup[0] and lineno <= tup[1]:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   275
                                filename = filelist[i][0]
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   276
                                lineno -= tup[0]
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   277
                                break;
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   278
                else:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   279
                        filename = "???"
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   280
                        lineno = "???"
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   281
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   282
                error(_("File %s line %s: %s") % (filename, lineno, e),
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   283
                    cmd="publish")
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   284
                return 1
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   285
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   286
        if embedded_fmri:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   287
                if "pkg.fmri" not in m:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   288
                        error(_("Manifest does not set fmri and " + 
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   289
                            "--fmri-in-manifest specified"))
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   290
                        return 1
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   291
                pkg_name = pkg.fmri.PkgFmri(m["pkg.fmri"]).get_short_fmri()
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   292
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   293
        t = trans.Transaction(repo_uri, pkg_name=pkg_name, refresh_index=refresh_index)
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   294
        t.open()
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   295
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   296
        for a in m.gen_actions():
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   297
                # don't publish this action
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   298
                if a.name == "set" and a.attrs["name"] in ["pkg.fmri", "fmri"]:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   299
                        continue
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   300
                elif a.name in ["file", "license"]:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   301
                        pkg.actions.set_action_data(a.hash, a, basedirs)
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   302
                elif a.name in nopub_actions:
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   303
                        error(_("invalid action for publication: %s") % action,
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   304
                            cmd="publish")
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   305
                        t.close(abandon=True)
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   306
                        return 1
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   307
                try:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   308
                        t.add(a)
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   309
                except:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   310
                        t.close(abandon=True)
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   311
                        raise
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   312
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   313
        pkg_state, pkg_fmri = t.close(abandon=False, 
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   314
            refresh_index=refresh_index, add_to_catalog=add_to_catalog)
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   315
        for val in (pkg_state, pkg_fmri):
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   316
                if val is not None:
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   317
                        msg(val)
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   318
        return 0
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   319
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   320
def trans_include(repo_uri, fargs, transaction=None):
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   321
        basedirs = []
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   322
        error_occurred = False
375
fa5286b09191 1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents: 314
diff changeset
   323
fa5286b09191 1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents: 314
diff changeset
   324
        opts, pargs = getopt.getopt(fargs, "d:")
fa5286b09191 1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents: 314
diff changeset
   325
        for opt, arg in opts:
fa5286b09191 1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents: 314
diff changeset
   326
                if opt == "-d":
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   327
                        basedirs.append(arg)
375
fa5286b09191 1773 Want tool to obtain contents of packages
johansen <johansen@sun.com>
parents: 314
diff changeset
   328
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   329
        if transaction == None:
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   330
                try:
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   331
                        trans_id = os.environ["PKG_TRANS_ID"]
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   332
                except KeyError:
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   333
                        usage(_("No transaction ID specified in $PKG_TRANS_ID"),
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   334
                            cmd="include")
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   335
                t = trans.Transaction(repo_uri, trans_id=trans_id)
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   336
        else:
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   337
                t = transaction
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   338
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   339
        if not pargs:
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   340
                filelist = [("<stdin>", sys.stdin)]
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   341
        else:
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   342
                try:
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   343
                        filelist = [(f, file(f)) for f in pargs]
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   344
                except IOError, e:
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   345
                        error(e, cmd="include")
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   346
                        return 1
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   347
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   348
        lines = []      # giant string of all input files concatenated together
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   349
        linecnts = []   # tuples of starting line number, ending line number
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   350
        linecounter = 0 # running total
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   351
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   352
        for filename, f in filelist:
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   353
                try:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   354
                        data = f.read()
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   355
                except IOError, e:
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   356
                        error(e, cmd="include")
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   357
                        return 1                
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   358
                lines.append(data)
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   359
                linecnt = len(data.splitlines())
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   360
                linecnts.append((linecounter, linecounter + linecnt))
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   361
                linecounter += linecnt
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   362
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   363
        m = pkg.manifest.Manifest()
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   364
        try:
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   365
                m.set_content("\n".join(lines))
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   366
        except pkg.actions.ActionError, e:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   367
                lineno = e.lineno
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   368
                for i, tup in enumerate(linecnts):
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   369
                        if lineno > tup[0] and lineno <= tup[1]:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   370
                                filename = filelist[i][0]
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   371
                                lineno -= tup[0]
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   372
                                break;
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   373
                else:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   374
                        filename = "???"
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   375
                        lineno = "???"
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   376
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   377
                error(_("File %s line %s: %s") % (filename, lineno, e),
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   378
                    cmd="include")
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   379
                return 1
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   380
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   381
        invalid_action = False
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   382
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   383
        for a in m.gen_actions():
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   384
                # don't publish this action
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   385
                if a.name == "set" and a.attrs["name"] in  ["pkg.fmri", "fmri"]:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   386
                        continue
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   387
                elif a.name in ["file", "license"]:
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   388
                        pkg.actions.set_action_data(a.hash, a, basedirs)
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   389
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   390
                if a.name in nopub_actions:
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   391
                        error(_("invalid action for publication: %s") % str(a),
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   392
                            cmd="include")
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   393
                        invalid_action = True
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   394
                else:
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   395
                        t.add(a)
1542
c97893ed7cd4 12891 pkgsend publish should support the --no-index flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1516
diff changeset
   396
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   397
        if invalid_action:
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   398
                return 3
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   399
        else:
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   400
                return 0
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   401
1198
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   402
def gen_actions(files, timestamp_files):
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   403
        for filename in files:
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   404
                bundle = pkg.bundle.make_bundle(filename)
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   405
                for action in bundle:
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   406
                        if action.name == "file":
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   407
                                basename = os.path.basename(action.attrs["path"])
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   408
                                for pattern in timestamp_files:
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   409
                                        if fnmatch.fnmatch(basename, pattern):
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   410
                                                break
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   411
                                else:
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   412
                                        try:
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   413
                                                del action.attrs["timestamp"]
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   414
                                        except KeyError:
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   415
                                                pass
1765
80bb11d0430b 14339 'pkgsend import' fails on System V packages
Tim Foster <tim.foster@sun.com>
parents: 1715
diff changeset
   416
                        yield (action, action.name in nopub_actions)
1198
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   417
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   418
def trans_import(repo_uri, args):
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   419
        try:
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   420
                trans_id = os.environ["PKG_TRANS_ID"]
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   421
        except KeyError:
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   422
                print >> sys.stderr, \
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   423
                    _("No transaction ID specified in $PKG_TRANS_ID")
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   424
                sys.exit(1)
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   425
443
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 409
diff changeset
   426
        opts, pargs = getopt.getopt(args, "T:")
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 409
diff changeset
   427
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 409
diff changeset
   428
        timestamp_files = []
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 409
diff changeset
   429
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 409
diff changeset
   430
        for opt, arg in opts:
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 409
diff changeset
   431
                if opt == "-T":
5ffa5b7dac9c 2589 pyc files generate lots of verify chaff
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 409
diff changeset
   432
                        timestamp_files.append(arg)
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   433
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   434
        if not args:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   435
                usage(_("No arguments specified for subcommand."),
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   436
                    cmd="import")
1198
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   437
        t = trans.Transaction(repo_uri, trans_id=trans_id)
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   438
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   439
        for action, err in gen_actions(pargs, timestamp_files):
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   440
                        if err:
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   441
                                error(_("invalid action for publication: %s") %
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   442
                                    action, cmd="import")
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   443
                                t.close(abandon=True)
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   444
                                return 1
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   445
                        else:
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   446
                                t.add(action)
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   447
        return 0
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 21
diff changeset
   448
1198
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   449
def trans_generate(args):
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   450
        opts, pargs = getopt.getopt(args, "T:")
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   451
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   452
        timestamp_files = []
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   453
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   454
        for opt, arg in opts:
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   455
                if opt == "-T":
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   456
                        timestamp_files.append(arg)
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   457
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   458
        if not args:
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   459
                usage(_("No arguments specified for subcommand."),
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   460
                    cmd="generate")
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   461
1708
f4b4fc22bb57 14038 pkgsend can publish 'unknown' actions for pkginfo files
Tim Foster <tim.foster@sun.com>
parents: 1542
diff changeset
   462
        for action, err in gen_actions(pargs, timestamp_files):
1198
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   463
                if "path" in action.attrs and hasattr(action, "hash") \
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   464
                    and action.hash == "NOHASH":
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   465
                        action.hash = action.attrs["path"]
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   466
                print action
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   467
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   468
        return 0
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   469
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   470
def trans_refresh_index(repo_uri, args):
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   471
        """Refreshes the indices at the location indicated by repo_uri."""
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   472
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   473
        if args:
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   474
                usage(_("command does not take operands"),
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   475
                    cmd="refresh-index")
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   476
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   477
        try:
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   478
                t = trans.Transaction(repo_uri).refresh_index()
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   479
        except trans.TransactionError, e:
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   480
                error(e, cmd="refresh-index")
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   481
                return 1
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   482
        return 0
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   483
192
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 165
diff changeset
   484
def main_func():
1198
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   485
135
a1e20e9a9845 add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents: 131
diff changeset
   486
        # XXX /usr/lib/locale is OpenSolaris-specific.
a1e20e9a9845 add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents: 131
diff changeset
   487
        gettext.install("pkgsend", "/usr/lib/locale")
a1e20e9a9845 add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents: 131
diff changeset
   488
211
f5848e130489 211 Using the PKG_REPO environment variable causes pkgsend to fail
venkytv <venkytv@opensolaris.org>
parents: 209
diff changeset
   489
        try:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   490
                repo_uri = os.environ["PKG_REPO"]
211
f5848e130489 211 Using the PKG_REPO environment variable causes pkgsend to fail
venkytv <venkytv@opensolaris.org>
parents: 209
diff changeset
   491
        except KeyError:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   492
                repo_uri = "http://localhost:10000"
192
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 165
diff changeset
   493
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   494
        show_usage = False
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   495
        try:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   496
                opts, pargs = getopt.getopt(sys.argv[1:], "s:?", ["help"])
135
a1e20e9a9845 add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents: 131
diff changeset
   497
                for opt, arg in opts:
a1e20e9a9845 add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents: 131
diff changeset
   498
                        if opt == "-s":
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   499
                                repo_uri = arg
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   500
                        elif opt in ("--help", "-?"):
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   501
                                show_usage = True
52
d7c452ef7ae1 Sanitize getopt exception handling
Danek Duvall <danek.duvall@sun.com>
parents: 49
diff changeset
   502
        except getopt.GetoptError, e:
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   503
                usage(_("pkgsend: illegal global option -- %s") % e.opt)
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   504
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   505
        subcommand = None
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   506
        if pargs:
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   507
                subcommand = pargs.pop(0)
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   508
                if subcommand == "help":
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   509
                        show_usage = True
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   510
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   511
        if show_usage:
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   512
                usage(retcode=0)
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   513
        elif not subcommand:
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   514
                usage()
12
30ebd8d6274f sequence version now a timestamp
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
   515
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   516
        ret = 0
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   517
        try:
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   518
                if subcommand == "create-repository":
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   519
                        ret = trans_create_repository(repo_uri, pargs)
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   520
                elif subcommand == "open":
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   521
                        ret = trans_open(repo_uri, pargs)
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   522
                elif subcommand == "close":
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   523
                        ret = trans_close(repo_uri, pargs)
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   524
                elif subcommand == "add":
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   525
                        ret = trans_add(repo_uri, pargs)
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   526
                elif subcommand == "import":
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   527
                        ret = trans_import(repo_uri, pargs)
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   528
                elif subcommand == "include":
948
231bb1355d2b 6574 repository creation ability desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 873
diff changeset
   529
                        ret = trans_include(repo_uri, pargs)
1178
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   530
                elif subcommand == "publish":
3e4c11dc0133 9509 pkgsend include should be able to look in multiple proto areas
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1038
diff changeset
   531
                        ret = trans_publish(repo_uri, pargs)
1198
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   532
                elif subcommand == "generate":
e0ac5c9363b5 9808 subcommand to output manifest useable by include/publish desired
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1178
diff changeset
   533
                        ret = trans_generate(pargs)
1355
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   534
                elif subcommand == "refresh-index":
8406eda12b13 6572 ability to trigger repository index refresh desired
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 1288
diff changeset
   535
                        ret = trans_refresh_index(repo_uri, pargs)
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   536
                else:
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   537
                        usage(_("unknown subcommand '%s'") % subcommand)
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   538
        except getopt.GetoptError, e:
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   539
                usage(_("illegal %s option -- %s") % (subcommand, e.opt))
38
52e6547130fa add support for bundle publishing
Danek Duvall <danek.duvall@sun.com>
parents: 29
diff changeset
   540
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   541
        return ret
192
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 165
diff changeset
   542
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 165
diff changeset
   543
#
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 165
diff changeset
   544
# Establish a specific exit status which means: "python barfed an exception"
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 165
diff changeset
   545
# 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: 165
diff changeset
   546
#
0c6f1066777b 58 getopt handling needs cleanup
Dan Price <dp@eng.sun.com>
parents: 165
diff changeset
   547
if __name__ == "__main__":
1715
8f305f0a6864 8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents: 1708
diff changeset
   548
        
8f305f0a6864 8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents: 1708
diff changeset
   549
        # Make all warnings be errors.
8f305f0a6864 8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents: 1708
diff changeset
   550
        warnings.simplefilter('error')
8f305f0a6864 8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents: 1708
diff changeset
   551
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   552
        try:
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   553
                __ret = main_func()
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   554
        except (pkg.actions.ActionError, trans.TransactionError,
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   555
            RuntimeError), _e:
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   556
                print >> sys.stderr, "pkgsend: %s" % _e
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   557
                __ret = 1
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   558
        except (PipeError, KeyboardInterrupt):
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   559
                # We don't want to display any messages here to prevent
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   560
                # possible further broken pipe (EPIPE) errors.
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   561
                __ret = 1
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   562
        except SystemExit, _e:
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   563
                raise _e
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   564
        except:
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 289
diff changeset
   565
                traceback.print_exc()
873
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   566
                error(
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   567
                    _("\n\nThis is an internal error.  Please let the "
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   568
                    "developers know about this\nproblem by filing a bug at "
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   569
                    "http://defect.opensolaris.org and including the\nabove "
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   570
                    "traceback and this message.  The version of pkg(5) is "
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   571
                    "'%s'.") % pkg.VERSION)
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   572
                __ret = 99
b95d76c53b5e 2691 ability to publish packages to local disk repository
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 535
diff changeset
   573
        sys.exit(__ret)