tools/userland-incorporator
author Ivo Raisr <ivo.raisr@oracle.com>
Wed, 05 Oct 2016 05:48:14 -0700
branchs11u3-sru
changeset 7128 62fc6d60f3cf
parent 7036 9bdfcd8747ba
permissions -rwxr-xr-x
21124720 Move libgpg-error from Desktop to Userland consolidation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
     1
#!/usr/bin/python2.7
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
     2
#
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
     3
# CDDL HEADER START
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
     4
#
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
     8
#
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    12
# and limitations under the License.
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    13
#
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    19
#
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    20
# CDDL HEADER END
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    21
#
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    22
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    23
#
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    24
#
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    25
# incorporator - an utility to incorporate packages in a repo
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    26
#
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    27
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    28
import subprocess
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    29
import json
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    30
import sys
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    31
import getopt
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    32
import re
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    33
import os.path
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    34
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    35
Werror = False	# set to true to exit with any warning
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    36
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    37
def warning(msg):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    38
    if Werror == True:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    39
        print >>sys.stderr, "ERROR: %s" % msg
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    40
        sys.exit(1)
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    41
    else:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    42
        print >>sys.stderr, "WARNING: %s" % msg
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    43
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    44
class Incorporation(object):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    45
    name = None
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    46
    version = '5.12'
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    47
    packages = {}
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    48
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    49
    def __init__(self, name, version):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    50
        self.name = name
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    51
        self.version = version
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    52
        self.packages = {}
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    53
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    54
    def __package_to_str(self, name, version):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    55
        # strip the :timestamp from the version string
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    56
        version = version.split(':', 1)[0]
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    57
        # strip the ,{build-release} from the version string
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    58
        version = re.sub(",[\d\.]+", "", version) 
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    59
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    60
        return "depend fmri=%s@%s facet.version-lock.%s=true type=incorporate" % (name, version, name)
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    61
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    62
    def add_package(self, name, version):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    63
        self.packages[name] = version
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    64
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    65
    def __str__(self):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    66
        result = """
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    67
set name=pkg.fmri value=pkg:/%s@%s
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    68
set name=info.classification value="org.opensolaris.category.2008:Meta Packages/Incorporations"
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    69
set name=org.opensolaris.consolidation value=userland
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    70
set name=pkg.depend.install-hold value=core-os.userland
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    71
set name=pkg.summary value="userland consolidation incorporation (%s)"
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    72
set name=pkg.description value="This incorporation constrains packages from the userland consolidation"
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    73
""" % (self.name, self.version, self.name)
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    74
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    75
        names = self.packages.keys()
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    76
        names.sort()
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    77
        for name in names:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    78
            result += (self.__package_to_str(name, self.packages[name]) + '\n')
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    79
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    80
        return result
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    81
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    82
#
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    83
# This should probably use the pkg APIs at some point, but this appears to be
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    84
# a stable and less complicated interface to gathering information from the
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    85
# manifests in the package repo.
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
    86
#
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    87
def get_incorporations(repository, publisher, inc_version='5.12',
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    88
		       static_file=None):
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    89
    packages = {}
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
    90
    incorporations = {}
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    91
    versions = {}
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    92
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    93
    #
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    94
    # if a static file was provided, prime the cache with the contents of
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    95
    # that file.
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    96
    #
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    97
    if static_file:
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    98
        with open(static_file, 'r') as fp:
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
    99
          for line in fp:
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   100
            line = line.partition('#')[0]
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   101
            line = line.rstrip()
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   102
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   103
            try:
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   104
                (incorporation, package, version) = re.split(':|@', line)
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   105
            except ValueError:
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   106
                pass
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   107
            else:
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   108
		if "=i386" in version:
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   109
			if repository.rsplit('/',2)[1] == "i386":
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   110
				version = version.split('=',1)[0]
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   111
			else:
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   112
				continue
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   113
                if incorporation not in incorporations:
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   114
                    incorporations[incorporation] = Incorporation(incorporation, inc_version)
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   115
                # find the incorporation and add the package
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   116
                tmp = incorporations[incorporation]
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   117
                tmp.add_package(package, version)
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   118
                versions[package] = version
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   119
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   120
    #
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   121
    # Load the repository for packages to incorporate.
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   122
    #
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   123
    if repository:
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   124
        tmp = subprocess.Popen(["/usr/bin/pkgrepo", "list", "-F", "json",
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   125
                                                            "-s", repository,
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   126
                                                            "-p", publisher],
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   127
                               stdout=subprocess.PIPE)
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   128
        packages = json.load(tmp.stdout)
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   129
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   130
    #
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   131
    # Check for multiple versions of packages in the repo, but keep track of
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   132
    # the latest one.
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   133
    #
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   134
    for package in packages:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   135
        pkg_name = package['name']
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   136
        pkg_version = package['version']
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   137
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   138
        if pkg_name in versions:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   139
            warning("%s is in the repo at multiple versions (%s, %s)" % (pkg_name, pkg_version, versions[pkg_name]))
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   140
            pkg_version = max(pkg_version, versions[pkg_name])
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   141
        versions[pkg_name] = pkg_version
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   142
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   143
    #
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   144
    # Add published packages to the incorporation lists
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   145
    #
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   146
    for package in packages:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   147
        pkg_name = package['name']
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   148
        pkg_version = package['version']
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   149
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   150
        # skip older packages and those that don't want to be incorporated
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   151
        if 'pkg.tmp.incorporate' not in package or pkg_version != versions[pkg_name]:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   152
            continue
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   153
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   154
        # a dict inside a list inside a dict
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   155
        incorporate = package['pkg.tmp.incorporate'][0]['value']
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   156
        
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   157
        for inc_name in incorporate:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   158
            # if we haven't started to build this incorporation, create one.
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   159
            if inc_name not in incorporations:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   160
                incorporations[inc_name] = Incorporation(inc_name, inc_version)
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   161
            # find the incorporation and add the package
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   162
            tmp = incorporations[inc_name]
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   163
            tmp.add_package(pkg_name, pkg_version)
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   164
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   165
    return incorporations
500
3d451539794b 7064724 userland should deliver a consolidation incorporation
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents:
diff changeset
   166
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   167
def main_func():
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   168
    global Werror
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   169
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   170
    try: 
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   171
        opts, pargs = getopt.getopt(sys.argv[1:], "S:c:s:p:v:d:w",
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   172
                                    ["repository=", "publisher=", "version=",
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   173
                                     "consolidation=", "destdir=", "Werror",
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   174
				     "static-content-file="])
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   175
    except getopt.GetoptError, e:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   176
        usage(_("illegal option: %s") % e.opt)
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   177
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   178
    static_file = None
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   179
    repository = None
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   180
    publisher = None
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   181
    version = None
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   182
    destdir = None
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   183
    consolidation = None
2855
576d5a7857b7 16404201 serialize pkglinting of components
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 830
diff changeset
   184
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   185
    for opt, arg in opts:
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   186
        if opt in ("-S", "--static-content-file"):
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   187
            static_file = arg
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   188
        elif opt in ("-s", "--repository"):
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   189
            repository = arg
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   190
        elif opt in ("-p", "--publisher"):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   191
            publisher = arg
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   192
        elif opt in ("-v", "--version"):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   193
            version = arg
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   194
        elif opt in ("-d", "--destdir"):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   195
            destdir = arg
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   196
        elif opt in ("-c", "--consolidation"):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   197
            consolidation = arg
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   198
        elif opt in ("-w", "--Werror"):
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   199
            Werror = True
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   200
7036
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   201
    incorporations = get_incorporations(repository, publisher, version,
9bdfcd8747ba 22839226 Migrate Desktop meta-packages to Userland gate
Petr Sumbera <petr.sumbera@oracle.com>
parents: 3476
diff changeset
   202
                                        static_file)
3476
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   203
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   204
    for incorporation_name in incorporations.keys():
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   205
        filename = ''
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   206
        if destdir != None:
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   207
            filename = destdir + '/'
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   208
        filename += os.path.basename(incorporation_name) + '.p5m'
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   209
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   210
        print("Writing %s manifest to %s" % (incorporation_name, filename))
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   211
        fd = open(filename, "w+")
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   212
        fd.write(str(incorporations[incorporation_name]))
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   213
        fd.close()
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   214
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   215
if __name__ == "__main__":
c35c8f1a6df1 18139749 userland-incorporator should allow generation of multiple incorporations
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 2855
diff changeset
   216
    main_func()