src/util/distro-import/importer.py
author Bart Smaalders <Bart.Smaalders@Sun.COM>
Fri, 05 Feb 2010 13:07:38 -0800
changeset 1731 a76f8a1fc049
parent 1697 4409e56754c5
child 1810 523a6a6aa094
permissions -rwxr-xr-x
13241 pkg install triggers system incorporation update 13968 WOS_PKGS path in distro-import/Makefile doesn't exist after build 130
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: 1471
diff changeset
     1
#!/usr/bin/python2.6
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     2
#
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     3
# CDDL HEADER START
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     4
#
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     8
#
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    12
# and limitations under the License.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    13
#
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    19
#
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    20
# CDDL HEADER END
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    21
#
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    22
# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    23
# Use is subject to license terms.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    24
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    25
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    26
import fnmatch
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    27
import getopt
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    28
import gettext
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    29
import os
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    30
import pkg.fmri
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
    31
import pkg.manifest            as manifest
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
    32
import pkg.pkgsubprocess       as subprocess
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    33
import pkg.publish.transaction as trans
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
    34
import pkg.server.catalog      as catalog
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
    35
import pkg.variant             as variant
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
    36
import pkg.version             as version
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
    37
import platform
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    38
import re
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    39
import shlex
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
    40
import shutil
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    41
import sys
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
    42
import tempfile
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
    43
import time
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    44
import urllib
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    45
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    46
from datetime import datetime
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
    47
from pkg      import actions, elf
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    48
from pkg.bundle.SolarisPackageDirBundle import SolarisPackageDirBundle
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
    49
from pkg.misc import versioned_urlopen, emsg
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    50
from tempfile import mkstemp
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    51
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    52
gettext.install("import", "/usr/lib/locale")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    53
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    54
# rewrite of solaris.py to convert to actions as soon as possible;
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    55
# all chatters, etc. are performed before adding package contents
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    56
# to global name table. Actions are annotated to include svr4 source
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    57
# pkg & path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    58
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    59
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    60
basename_dict = {}   # basenames to action lists
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    61
branch_dict = {}     # 
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
    62
cons_dict = {}       # consolidation incorporation dictionaries
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
    63
file_repo = False    #
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    64
curpkg = None        # which IPS package we're currently importing
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    65
def_branch = ""      # default branch
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    66
def_repo = "http://localhost:10000"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    67
def_vers = "0.5.11"  # default package version
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    68
# default search path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    69
def_wos_path =  ["/net/netinstall.eng/export/nv/x/latest/Solaris_11/Product"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    70
elided_files = {}    # always delete these files; not checked on specific import
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
    71
extra_entire_contents = [] # additional entries to be added to "entire"
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    72
fmridict = {}        # all ips FMRIS known, indexed by name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    73
global_includes = [] # include these for every package
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    74
include_path = []    # where to find inport files - searched in order
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    75
just_these_pkgs = [] # publish only thesee pkgs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    76
macro_definitions = {} # list of macro substitutions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    77
nopublish = False    # fake publication?
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    78
path_dict = {}       # map of paths to action lists
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    79
pkgdict = {}         # pkgdict contains Package objects we're importing by name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    80
pkgpaths = {}        # where we found svr4 pkgs by name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    81
pkgpath_dict = {}    # mapping of paths to ips pkg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    82
print_pkg_names = False # jusr print package names seen
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
    83
publish_all = False  # always publish all obsoleted and renamed packages?
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    84
reference_uris = []  # list of url@pkg specs to compute dependencies against
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    85
show_debug = False   # print voluminous debug output
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
    86
summary_detritus = [", (usr)", ", (root)", " (usr)", " (root)", " (/usr)", \
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    87
    " - / filesystem", ",root(/)"] # remove from summaries
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    88
svr4pkgsseen = {}    #svr4 pkgs seen - pkgs indexed by name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    89
timestamp_files = [] # patterns of files that retain timestamps from svr4 pkgs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    90
wos_path = []        # list of search pathes for svr4 packages
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    91
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    92
class Package(object):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    93
        def __init__(self, name):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    94
                self.name = name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    95
                self.depend = []        # require dependencies
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    96
                self.file_depend = []   # file dependencies
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    97
                self.undepend = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    98
                self.extra = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    99
                self.dropped_licenses = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   100
                self.nonhollow_dirs = {}
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   101
                self.srcpkgs = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   102
                self.classification = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   103
                self.desc = ""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   104
                self.summary = ""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   105
                self.version = ""
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
   106
                self.consolidation = ""
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
   107
                self.obsolete_branch = None
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
   108
                self.rename_branch = None
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   109
                self.imppkg = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   110
                self.actions = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   111
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   112
                pkgdict[name] = self
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   113
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   114
        def fmristr(self):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   115
                return "%s@%s" % (self.name, self.version)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   116
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   117
        def import_pkg(self, imppkg_filename, line):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   118
                exclude_files = line.split() + elided_files.keys()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   119
                p = self.import_files_from_pkg(imppkg_filename,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   120
                    [], exclude_files)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   121
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   122
                if not self.version:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   123
                        self.version = "%s-%s" % (def_vers,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   124
                            get_branch(self.name))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   125
                if not self.desc:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   126
                        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   127
                                self.desc = zap_strings(p.pkginfo["DESC"],
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   128
                                    summary_detritus)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   129
                        except KeyError:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   130
                                self.desc = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   131
                if not self.summary:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   132
                        self.summary = zap_strings(p.pkginfo["NAME"],
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   133
                            summary_detritus)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   134
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   135
        def add_svr4_src(self, imppkg):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   136
                self.srcpkgs.append(imppkg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   137
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   138
        def import_files_from_pkg(self, imppkg_filename, includes, excludes):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   139
                try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   140
                        ppath = pkg_path(imppkg_filename)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   141
                except:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   142
                        raise RuntimeError("No such package: '%s'" % imppkg_filename)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   143
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   144
                bundle = SolarisPackageDirBundle(ppath, data=False)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   145
                p = bundle.pkg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   146
                imppkg_name = p.pkginfo["PKG.PLAT"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   147
                self.imppkg = bundle.pkg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   148
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   149
                includes_seen = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   150
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   151
                # filename NOT always same as pkgname
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   152
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   153
                svr4pkgsseen[imppkg_name] = p
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   154
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   155
                if "SUNW_PKG_HOLLOW" in p.pkginfo and \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   156
                    p.pkginfo["SUNW_PKG_HOLLOW"].lower() == "true":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   157
                        hollow = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   158
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   159
                        hollow = False
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   160
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   161
                for action in bundle:
1329
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   162
                        if includes:
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   163
                                if action.name == "license":
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   164
                                        pass # always include license.
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   165
                                elif "path" not in action.attrs or \
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   166
                                    action.attrs["path"] not in includes:
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   167
                                        continue
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   168
                                else:
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   169
                                        includes_seen.append(
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   170
                                            action.attrs["path"])
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   171
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   172
                        elif not includes and "path" in action.attrs and \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   173
                            action.attrs["path"] in excludes:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   174
                                if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   175
                                        print "excluding %s from %s" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   176
                                            (action.attrs["path"], imppkg_name)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   177
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   178
 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   179
                        if action.name == "unknown":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   180
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   181
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   182
                        action.attrs["importer.source"] = "svr4pkg"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   183
                        action.attrs["importer.svr4pkg"] = imppkg_name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   184
                        action.attrs["importer.svr4path"] = action.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   185
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   186
                        if action.name == "license":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   187
                                # The "path" attribute is confusing and
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   188
                                # unnecessary for licenses.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   189
                                del action.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   190
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   191
                        # is this a file for which we need a timestamp?
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   192
                        if action.name == "file":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   193
                                basename = os.path.basename(action.attrs["path"])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   194
                                for file_pattern in timestamp_files:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   195
                                        if fnmatch.fnmatch(basename, file_pattern):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   196
                                                break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   197
                                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   198
                                        del action.attrs["timestamp"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   199
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   200
                        if hollow:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   201
                                action.attrs["opensolaris.zone"] = "global"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   202
                                action.attrs["variant.opensolaris.zone"] = "global"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   203
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   204
                        self.check_perms(action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   205
                        self.actions.append(action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   206
                includes_missed = set(includes) - set(includes_seen)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   207
                if includes_missed:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   208
                        raise RuntimeError("pkg %s: Files specified in multi-line import from %s not seen: %s" %
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   209
                            (self.name, imppkg_name, " ".join(includes_missed)))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   210
                self.add_svr4_src(imppkg_name)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   211
                return p
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   212
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   213
        def import_files(self, imppkg_filename, filenames):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   214
                self.import_files_from_pkg(imppkg_filename, filenames, [])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   215
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   216
        def check_perms(self, action):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   217
                if action.name not in ["file", "dir"]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   218
                        return
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   219
                orig = action.attrs.copy()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   220
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   221
                if action.attrs["owner"] == "?":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   222
                        action.attrs["owner"] = "root"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   223
                if action.attrs["group"] == "?":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   224
                        action.attrs["group"] = "bin"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   225
                if action.attrs["mode"] == "?":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   226
                        if action.name == "dir":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   227
                                action.attrs["mode"] = "0755"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   228
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   229
                                action.attrs["mode"] = "0444"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   230
                if orig != action.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   231
                        for k in action.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   232
                                if orig[k] != action.attrs[k]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   233
                                        print "File %s in pkg %s has %s == \"?\": mapped to %s" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   234
                                            (
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   235
                                            action.attrs["path"],
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   236
                                            action.attrs["importer.svr4pkgname"],
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   237
                                            k,
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   238
                                            action.attrs[k]
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   239
                                            )
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   240
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   241
        def chattr(self, fname, line):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   242
                matches = [
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   243
                    a 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   244
                    for a in self.actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   245
                    if "path" in a.attrs and a.attrs["path"] == fname
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   246
                ]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   247
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   248
                if not matches:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   249
                        raise RuntimeError("No file '%s' in package '%s'" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   250
                            (fname, curpkg.name))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   251
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   252
                line = line.rstrip()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   253
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   254
                # is this a deletion?
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   255
                if line.startswith("drop"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   256
                        for f in matches:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   257
                                # deletion of existing attribute
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   258
                                for d in line.split()[1:]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   259
                                        if d in f.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   260
                                                del f.attrs[d]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   261
                                                if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   262
                                                        print "removing attribute \"%s\" on %s" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   263
                                                            (d, fname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   264
                        return
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   265
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   266
                # handle insertion/modification case
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   267
                for f in matches:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   268
                        # create attribute dictionary from line
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   269
                        new_attrs = actions.attrsfromstr(line.rstrip())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   270
                        f.attrs.update(new_attrs)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   271
                        if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   272
                                print "Updating attributes on " + \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   273
                                    "'%s' in '%s' with '%s'" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   274
                                    (f.attrs["path"], curpkg.name, new_attrs)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   275
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   276
        # apply a chattr to wildcarded files/dirs in current package
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   277
        # also allows regexp edit of existing attrs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   278
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   279
        def chattr_glob(self, glob, line):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   280
                args = line.split()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   281
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   282
                if args[0] == "type": # we care about type
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   283
                        args.pop(0)
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   284
                        type = args.pop(0)
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   285
                        line = " ".join(args)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   286
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   287
                        type = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   288
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   289
                if args[0] == "edit": # we're doing regexp edit of attr
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   290
                        edit = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   291
                        args.pop(0)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   292
                        target = args.pop(0)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   293
                        regexp = re.compile(args.pop(0))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   294
                        replace = args.pop(0)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   295
                        line = " ".join(args)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   296
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   297
                        edit = False
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   298
                        new_attrs = actions.attrsfromstr(line.rstrip())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   299
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   300
                o = [
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   301
                        f
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   302
                        for f in self.actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   303
                        if "path" in f.attrs and 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   304
                            fnmatch.fnmatchcase(f.attrs["path"], glob) and
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   305
                            (not type or type == f.name)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   306
                     ]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   307
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   308
                for f in o:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   309
                        fname = f.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   310
                        if edit:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   311
                                if target in f.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   312
                                        old_value = f.attrs[target]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   313
                                        new_value = regexp.sub(replace, \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   314
                                            old_value)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   315
                                        if old_value == new_value:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   316
                                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   317
                                        f.attrs[target] = new_value
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   318
                                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   319
                                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   320
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   321
                                f.attrs.update(new_attrs)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   322
                                if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   323
                                        print "Updating attributes on " + \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   324
                                            "'%s' in '%s' with '%s'" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   325
                                            (fname, curpkg.name, new_attrs)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   326
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   327
def pkg_path(pkgname):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   328
        name = os.path.basename(pkgname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   329
        if pkgname in pkgpaths:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   330
                return pkgpaths[name]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   331
        if "/" in pkgname:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   332
                pkgpaths[name] = os.path.realpath(pkgname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   333
                return pkgname
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   334
        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   335
                for each_path in wos_path:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   336
                        if os.path.exists(each_path + "/" + pkgname):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   337
                                pkgpaths[name] = each_path + "/" + pkgname
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   338
                                return pkgpaths[name]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   339
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   340
                raise RuntimeError("package %s not found" % pkgname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   341
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   342
def check_pkg_actions(pkg):
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   343
        local_path_dict = {}
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   344
        # build dictionary of actions in pk by path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   345
        for a in pkg.actions:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   346
                if "path" in a.attrs:
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   347
                        local_path_dict.setdefault(a.attrs["path"], []).append(a)
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   348
        errors = check_pathdict_actions(local_path_dict, remove_dups=True)
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   349
        if errors:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   350
                for e in errors:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   351
                        print e
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   352
                raise RuntimeError("Package %s: errors occurred" % pkg.name)
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   353
        return local_path_dict
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   354
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   355
def check_pathdict_actions(my_path_dict, remove_dups=False):
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   356
        # investigate all paths w/ multiple actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   357
        errorlist = []
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   358
        for p in my_path_dict:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   359
                # check to make sure all higher parts of path are indeed directories -
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   360
                # avoid publishing through symlinks
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   361
                tmp = p
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   362
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   363
                while True:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   364
                        tmp = os.path.dirname(tmp)
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   365
                        if tmp:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   366
                                if tmp in my_path_dict: # don't worry about implicit dirs for now
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   367
                                        a = my_path_dict[tmp][0]# just check the first one
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   368
                                        if a.name != "dir":
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   369
                                                errorlist.append("action %s path component %s is not directory: %s" %
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   370
                                                    (my_path_dict[p], tmp, a))
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   371
                        else:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   372
                                break
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   373
                if len(my_path_dict[p]) == 1:
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   374
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   375
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   376
                dups = my_path_dict[p]
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   377
                # make sure all are the same type
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   378
                if len(set((d.name for d in dups))) > 1:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   379
                        errorlist.append("Multiple actions on different types with the same path:\n\t%s\n" %
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   380
                            ("\n\t".join(str(d) for d in dups)))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   381
                        # disallow any duplicates that aren't directories
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   382
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   383
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   384
                elif dups[0].name == "license": #XXX double check this
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   385
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   386
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   387
                elif dups[0].name == "link":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   388
                        targets = set((d.attrs["target"] for d in dups))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   389
                        if len(targets) > 1:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   390
                                errorlist.append("Multiple link actions with same path and different targets:\n\t%s\n" %
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   391
                                    ("\n\t".join(str(d) for d in dups)))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   392
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   393
                        
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   394
                elif dups[0].name != "dir":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   395
                        errorlist.append("Multiple actions with the same path that aren't directories:\n\t%s\n" %
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   396
                            ("\n\t".join(str(d) for d in dups)))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   397
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   398
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   399
                # construct glommed attrs dict; this check could be more thorough
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   400
                dkeys = set([
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   401
                    k
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   402
                    for d in dups
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   403
                    for k in d.attrs.keys()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   404
                ])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   405
                ga = dict(zip(dkeys, [set([d.attrs.get(k, None) for d in dups]) for k in dkeys]))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   406
                for g in ga:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   407
                        if len(ga[g]) == 1:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   408
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   409
                        if g in ["owner", "group", "mode"]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   410
                                errorlist.append("Multiple directory actions with the same path(%s) and different %s:\n\t%s\n" %
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   411
                                    (p, g, "\n\t".join(str(d) for d in dups)))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   412
                        elif remove_dups and g.startswith("variant.") and None in ga[g]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   413
                                # remove any dirs that are zone variants if same dir w/o variant exists
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   414
                                for d in dups:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   415
                                        if d.attrs.get(g) != None:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   416
                                                d.attrs["importer.deleteme"] = "True"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   417
                                                if 1 or show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   418
                                                        print "removing %s as hollow dup" % d
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
   419
        return errorlist
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   420
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   421
def start_package(pkgname):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   422
        set_macro("PKGNAME", urllib.quote(pkgname, ""))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   423
        return Package(pkgname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   424
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   425
def end_package(pkg):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   426
        pkg_branch = get_branch(pkg.name)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   427
        if not pkg.version:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   428
                pkg.version = "%s-%s" % (def_vers, pkg_branch)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   429
        elif "-" not in pkg.version:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   430
                pkg.version += "-%s" % pkg_branch
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   431
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   432
       # add description actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   433
        if pkg.desc:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   434
                pkg.actions.append( actions.attribute.AttributeAction(None,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   435
                    name="pkg.description", value=pkg.desc))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   436
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   437
        if pkg.summary:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   438
                pkg.actions.extend([
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   439
                    actions.attribute.AttributeAction(None,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   440
                        name="pkg.summary", value=pkg.summary),
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   441
                    actions.attribute.AttributeAction(None,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   442
                        name="description", value=pkg.summary)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   443
                ])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   444
        if pkg.classification:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   445
                pkg.actions.append(actions.attribute.AttributeAction(None,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   446
                    name="info.classification", value=pkg.classification))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   447
1607
577ef39bc05a 1374 cannot import build 130
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1602
diff changeset
   448
        # add dependency on consolidation incorporation if not obsolete
577ef39bc05a 1374 cannot import build 130
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1602
diff changeset
   449
        if pkg.consolidation and not pkg.obsolete_branch:
577ef39bc05a 1374 cannot import build 130
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1602
diff changeset
   450
                action = actions.fromstr(
577ef39bc05a 1374 cannot import build 130
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1602
diff changeset
   451
                    "depend fmri=consolidation/%s/%s-incorporation "
577ef39bc05a 1374 cannot import build 130
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1602
diff changeset
   452
                    "type=require importer.no-version=true" % 
577ef39bc05a 1374 cannot import build 130
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1602
diff changeset
   453
                    (pkg.consolidation, pkg.consolidation))
577ef39bc05a 1374 cannot import build 130
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1602
diff changeset
   454
                pkg.actions.append(action)
577ef39bc05a 1374 cannot import build 130
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1602
diff changeset
   455
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   456
        # add legacy actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   457
        if pkg.name != "SUNWipkg":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   458
                for p in pkg.srcpkgs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   459
                        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   460
                                sp = svr4pkgsseen[p]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   461
                        except KeyError:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   462
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   463
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   464
                        wanted_attrs = (
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   465
                                "PKG", "NAME", "ARCH", "VERSION", "CATEGORY",
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   466
                                "VENDOR", "DESC", "HOTLINE"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   467
                                )
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   468
                        attrs = dict(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   469
                                (k.lower(), v)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   470
                                for k, v in sp.pkginfo.iteritems()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   471
                                if k in wanted_attrs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   472
                                )
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   473
                        attrs["pkg"] = sp.pkginfo["PKG.PLAT"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   474
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   475
                        pkg.actions.append(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   476
                            actions.legacy.LegacyAction(None, **attrs))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   477
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   478
        for action in pkg.actions[:]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   479
                action.attrs["importer.ipspkg"] = pkg.fmristr()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   480
                if action.name == "license" and \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   481
                    action.attrs["license"] in pkg.dropped_licenses:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   482
                        del pkg.actions[pkg.actions.index(action)]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   483
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   484
        # need to check for duplicate actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   485
        check_pkg_actions(pkg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   486
        # add to dictionary of known fmris
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   487
        fmridict[pkg.name] = pkg.fmristr()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   488
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   489
        clear_macro("PKGNAME")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   490
        print "Package '%s'" % pkg.name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   491
        if not show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   492
                return
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   493
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   494
        print "  Version:", pkg.version
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   495
        print "  Description:", pkg.desc
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   496
        print "  Summary:", pkg.summary
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   497
        print "  Classification: ", ",".join(pkg.classification)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   498
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   499
def publish_action(t, pkg, a):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   500
        # remove any temp attributes
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   501
        if show_debug:
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   502
                print "%s: %s" % (pkg.name, a)
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   503
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   504
        for k in a.attrs.keys():
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   505
                if k.startswith("importer."):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   506
                        del a.attrs[k]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   507
        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   508
                t.add(a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   509
        except TypeError, e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   510
                print a.attrs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   511
                print a.name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   512
                
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   513
                raise
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   514
        
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   515
def publish_pkg(pkg):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   516
        """ send this package to the repo """
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   517
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   518
        svr4_pkg_list = sorted(list(set([
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   519
            a.attrs["importer.svr4pkg"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   520
            for a in pkg.actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   521
            if "importer.svr4pkg" in a.attrs and
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   522
            a.name in ["license", "file"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   523
            ])))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   524
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   525
        svr4_traversal_list = [
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   526
            ("%s:%s" % (a.attrs["importer.svr4pkg"], a.attrs["importer.svr4path"]), a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   527
            for a in pkg.actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   528
            if "importer.svr4pkg" in a.attrs and
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   529
            a.name in ["license", "file"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   530
        ]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   531
        svr4_traversal_dict = dict(svr4_traversal_list)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   532
        # won't happen unless same pkg imported more than once into same ips pkg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   533
        assert len(svr4_traversal_dict) == len(svr4_traversal_list)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   534
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
   535
        t = trans.Transaction(def_repo, create_repo=file_repo, refresh_index=False,
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   536
            pkg_name=pkg.fmristr(), noexecute=nopublish)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   537
        transaction_id = t.open()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   538
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   539
        # publish easy actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   540
        for a in sorted(pkg.actions):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   541
                if a.name in ["license", "file", "depend"]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   542
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   543
                if a.name == "hardlink":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   544
                        # add depend file= actions for hardlinks
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   545
                        pkg.actions.extend(gen_hardlink_depend_actions(a))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   546
                elif a.name == "license":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   547
                        # hack until license action is fixed
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   548
                        a.attrs["transaction_id"] = transaction_id
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   549
                publish_action(t, pkg, a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   550
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   551
        # publish actions w/ data from imported svr4 pkgs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   552
        # do so by looping through svr4 packages; use traversal_dict
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   553
        # to get the right action corresponding to its source.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   554
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   555
        for p in svr4_pkg_list:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   556
                bundle = SolarisPackageDirBundle(pkg_path(p))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   557
                for a in bundle:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   558
                        if a.name not in ["license", "file"]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   559
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   560
                        index = "%s:%s" % (p, a.attrs["path"])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   561
                        actual_action = svr4_traversal_dict.get(index)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   562
                        if not actual_action:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   563
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   564
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   565
                        # make a copy of the data in a temp file, and
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   566
                        # put the opener on the proper action
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   567
                        ao = a.data()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   568
                        bufsz = 256 * 1024
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   569
                        sz = int(a.attrs["pkg.size"])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   570
                        fd, tmp = mkstemp(prefix="pkg.")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   571
                        while sz > 0:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   572
                                d = ao.read(min(bufsz, sz))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   573
                                os.write(fd, d)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   574
                                sz -= len(d)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   575
                        d = None # free data
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   576
                        os.close(fd)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   577
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   578
                        actual_action.data = lambda: open(tmp, "rb")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   579
                        actual_action.attrs["pkg.size"] = a.attrs["pkg.size"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   580
                        publish_action(t, pkg, actual_action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   581
                        if "path" in actual_action.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   582
                                pkg.actions.extend(gen_file_depend_actions(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   583
                                    actual_action, tmp))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   584
                        os.unlink(tmp)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   585
        # publish any actions w/ data defined in import file
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   586
        for a in pkg.actions:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   587
                if a.name not in ["license", "file"] or \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   588
                    a.attrs.get("importer.source") != "add":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   589
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   590
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   591
                if hasattr(a, "hash"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   592
                        fname, fd = sourcehook(a.hash)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   593
                        fd.close()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   594
                        a.data = lambda: file(fname, "rb")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   595
                        a.attrs["pkg.size"] = str(os.stat(fname).st_size)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   596
                        if a.name == "license":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   597
                                a.attrs["transaction_id"] = transaction_id
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   598
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   599
                publish_action(t, pkg, a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   600
                if "path" in a.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   601
                        pkg.actions.extend(gen_file_depend_actions(a, fname))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   602
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   603
        # resolve & combine dependencies
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   604
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   605
        # pass one; find pkgs & fix up any unspecified fmris;
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   606
        # build depend list excluding and dependencies on ourself
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   607
        depend_actions = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   608
        for a in pkg.actions:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   609
                if a.name != "depend":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   610
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   611
                if "importer.file" not in a.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   612
                        # set any unanchored deps to current version
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
   613
                        if "@" not in a.attrs["fmri"] and a.attrs["fmri"] in fmridict and \
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
   614
                            "importer.no-version" not in a.attrs:
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   615
                                a.attrs["fmri"] = fmridict[a.attrs["fmri"]]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   616
                        depend_actions.append(a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   617
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   618
                if "importer.path" in a.attrs: # we have a search path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   619
                        fname = a.attrs["importer.file"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   620
                        pathlist = [os.path.join(p, fname) for p in a.attrs["importer.path"]]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   621
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   622
                        pathlist = [a.attrs["importer.file"].lstrip("/")]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   623
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   624
                for path in pathlist:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   625
                        fmris = search_dicts(path)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   626
                        if fmris:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   627
                                repl_string = "fmri=%s" % a.attrs["fmri"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   628
                                orig_action = str(a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   629
                                for f in fmris:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   630
                                        if f != pkg.fmristr():
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   631
                                                b = actions.fromstr(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   632
                                                    orig_action.replace(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   633
                                                    repl_string, "fmri=%s" % f))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   634
                                                depend_actions.append(b)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   635
                                break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   636
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   637
                        possibles = basename_dict.get(pathlist[0].split("/")[-1])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   638
                        if not possibles:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   639
                                suggestions = "None"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   640
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   641
                                # get pkg names that might work
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   642
                                suggestions = " ".join("%s" % a for a in set(pkgpath_dict[p.attrs["path"]][0] for p in possibles))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   643
                        print "%s: unresolved dependency %s: suggest %s" % (
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   644
                            pkg.name, a, suggestions)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   645
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   646
        #  pass two; combine dependencies and look for errors
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   647
        depend_dict = {}
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   648
        delete_count = 0
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   649
        for i, a in enumerate(depend_actions[:]):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   650
                fmri = str(a.attrs["fmri"])
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
   651
                dtype = a.attrs["type"]
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
   652
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
   653
                if (fmri, dtype) in depend_dict:
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   654
                        del depend_actions[i - delete_count]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   655
                        delete_count += 1
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   656
                else:
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
   657
                        depend_dict[(fmri, dtype)] = True
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   658
        # pass three - publish
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   659
        for a in depend_actions:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   660
                publish_action(t, pkg, a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   661
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
   662
        pkg_fmri, pkg_state = t.close(refresh_index=False, add_to_catalog=not file_repo)
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   663
        print "%s: %s\n" % (pkg_fmri, pkg_state)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   664
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   665
def search_dicts(path):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   666
        """ search dictionaries looking for path; translate symlinks.  Returns
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   667
        list of fmris that resolve dependency"""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   668
        if path in pkgpath_dict:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   669
                if len(path_dict[path]) > 1:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   670
                        print "Caution: more than one pkg supplies %s (%s)" % (
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   671
                            path, path_dict[path])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   672
                ret = [pkgpath_dict[path][0]]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   673
                return ret
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   674
        # hmmm - check if any components of path are symlinks
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   675
        comp = path.split("/")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   676
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   677
        for p in ["/".join(comp[:i]) for i in range(1, len(comp))]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   678
                if p not in path_dict:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   679
                        break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   680
                elif path_dict[p][0].name == "dir": #expected
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   681
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   682
                elif path_dict[p][0].name == "link":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   683
                        link = path_dict[p][0]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   684
                        np = link.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   685
                        nt = link.attrs["target"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   686
                        newpath = os.path.normpath(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   687
                                    os.path.join(os.path.split(np)[0], nt))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   688
                        assert path.startswith(np)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   689
                        ret = [pkgpath_dict[p][0]] 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   690
                        next = search_dicts(path.replace(np, newpath))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   691
                        if next:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   692
                                ret += next
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   693
                                return ret
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   694
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   695
                        print "unexpected action %s in path %s" % (path_dict[p][0], path)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   696
        return []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   697
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   698
def gen_hardlink_depend_actions(action):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   699
        """ generate dependency action for hardlinks; action is the
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   700
        hardlink action we're analyzing"""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   701
        target = action.attrs["target"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   702
        path = action.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   703
        if not target.startswith("/"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   704
                target = os.path.normpath( os.path.join(os.path.split(path)[0],
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   705
                    target))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   706
        return [actions.fromstr(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   707
            "depend importer.file=%s fmri=none type=require importer.source=hardlink" %
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   708
            target)]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   709
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   710
def gen_file_depend_actions(action, fname):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   711
        """ generate dependency action for each file; action is the action
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   712
        being analyzed for dependencies, fname is the path to the local
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   713
        version of the file"""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   714
        return_actions = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   715
        path = action.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   716
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   717
        if not elf.is_elf_object(fname):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   718
                f = file(fname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   719
                l = f.readline()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   720
                f.close()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   721
                # add #!/ dependency
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   722
                if l.startswith("#!/"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   723
                        p = (l[2:].split()[0]) # first part of string is path (removes options)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   724
                        # we don't handle dependencies through links, so fix up the common one
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   725
                        if p.startswith("/bin"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   726
                                p = "/usr" + p
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   727
                        return_actions.append(actions.fromstr("depend fmri=none importer.file=%s type=require importer.depsource=%s" %
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   728
                            (p.lstrip("/"), path)))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   729
                if "python" in l or path.endswith(".py"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   730
                        pass # do something here....
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   731
                elif "perl" in l or path.endswith(".pl"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   732
                        pass # and here
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   733
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   734
                return return_actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   735
        # handle elf files
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   736
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   737
        ei = elf.get_info(fname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   738
        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   739
                ed = elf.get_dynamic(fname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   740
        except elf.ElfError:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   741
                deps = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   742
                rp = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   743
        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   744
                deps = [
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   745
                    a 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   746
                    for d in ed.get("deps", [])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   747
                    for a in d[0].split()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   748
                    ]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   749
                rp = ed.get("runpath", "").split(":")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   750
                if len(rp) == 1 and rp[0] == "":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   751
                        rp = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   752
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   753
        rp = [
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   754
            os.path.normpath(p.replace("$ORIGIN", "/" + os.path.dirname(path)))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   755
            for p in rp
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   756
        ]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   757
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   758
        kernel64 = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   759
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   760
        # For kernel modules, default path resolution is /platform/<platform>,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   761
        # /kernel, /usr/kernel.  But how do we know what <platform> would be for
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   762
        # a given module?  Does it do fallbacks to, say, sun4u?
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   763
        if path.startswith("kernel") or path.startswith("usr/kernel") or \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   764
            (path.startswith("platform") and path.split("/")[2] == "kernel"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   765
                if rp:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   766
                        print "RUNPATH set for kernel module (%s): %s" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   767
                            (path, rp)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   768
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   769
                if path.startswith("platform"): # add this platform to search path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   770
                        rp.append("/platform/%s/kernel" % path.split("/")[1])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   771
                # Default kernel search path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   772
                rp.extend(("/kernel", "/usr/kernel"))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   773
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   774
                # What subdirectory should we look in for 64-bit kernel modules?
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   775
                if ei["bits"] == 64:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   776
                        if ei["arch"] == "i386":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   777
                                kernel64 = "amd64"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   778
                        elif ei["arch"] == "sparc":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   779
                                kernel64 = "sparcv9"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   780
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   781
                                print ei["arch"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   782
        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   783
                if "/lib" not in rp:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   784
                        rp.append("/lib")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   785
                if "/usr/lib" not in rp:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   786
                        rp.append("/usr/lib")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   787
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   788
        # XXX Do we need to handle anything other than $ORIGIN?  x86 images have
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   789
        # a couple of $PLATFORM and $ISALIST instances.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   790
        for p in rp:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   791
                if "$" in p:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   792
                        tok = p[p.find("$"):]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   793
                        if "/" in tok:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   794
                                tok = tok[:tok.find("/")]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   795
                        print "%s has dynamic token %s in rpath" % (path, tok)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   796
        for d in deps:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   797
                pathlist = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   798
                for p in rp:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   799
                        if kernel64:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   800
                                # Find 64-bit modules the way krtld does.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   801
                                # XXX We don't resolve dependencies found in
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   802
                                # /platform, since we don't know where under
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   803
                                # /platform to look.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   804
                                head, tail = os.path.split(d)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   805
                                deppath = os.path.join(p,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   806
                                                       head,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   807
                                                       kernel64,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   808
                                                       tail)[1:]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   809
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   810
                                # This is a hack for when a runpath uses the 64
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   811
                                # symlink to the actual 64-bit directory.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   812
                                # Better would be to see if the runpath was a
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   813
                                # link, and if so, use its resolution, but
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   814
                                # extracting that information from used list is
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   815
                                # a pain, especially because you potentially
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   816
                                # have to resolve symlinks at all levels of the
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   817
                                # path.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   818
                                if p.endswith("/64"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   819
                                        if ei["arch"] == "i386":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   820
                                                p = p[:-2] + "amd64"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   821
                                        elif ei["arch"] == "sparc":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   822
                                                p = p[:-2] + "sparcv9"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   823
                                deppath = os.path.join(p, d)[1:]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   824
                        # deppath includes filename; remove that.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   825
                        head, tail = os.path.split(deppath)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   826
                        if head:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   827
                                pathlist.append(head)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   828
                pn, fn = os.path.split(d)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   829
                return_actions.append(actions.fromstr("depend fmri=none type=require importer.file=%s importer.depsource=%s %s" %
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   830
                    (fn, path, " ".join("importer.path=%s" % p for p in pathlist))))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   831
        return return_actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   832
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   833
manifest_cache = {}
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   834
null_manifest = manifest.Manifest()
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   835
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   836
def error(text, cmd=None):
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   837
        """Emit an error message prefixed by the command name."""
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   838
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   839
        if cmd:
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   840
                text = "%s: %s" % (cmd, text)
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   841
                pkg_cmd = "importer "
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   842
        else:
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   843
                pkg_cmd = "importer: "
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   844
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   845
                # If we get passed something like an Exception, we can convert
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   846
                # it down to a string.
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   847
                text = str(text)
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   848
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   849
        # If the message starts with whitespace, assume that it should come
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   850
        # *before* the command-name prefix.
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   851
        text_nows = text.lstrip()
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   852
        ws = text[:len(text) - len(text_nows)]
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   853
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   854
        # This has to be a constant value as we can't reliably get our actual
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   855
        # program name on all platforms.
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   856
        emsg(ws + pkg_cmd + text_nows)
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   857
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   858
def get_manifest(server_url, fmri):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   859
        if not fmri: # no matching fmri
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   860
                return null_manifest
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   861
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   862
        return manifest_cache.setdefault((server_url, fmri), 
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   863
            fetch_manifest(server_url, fmri))
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   864
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   865
def fetch_manifest(server_url, fmri):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   866
        """Fetch the manifest for package-fmri 'fmri' from the server
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   867
        in 'server_url'... return as Manifest object.... needs
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   868
        exact fmri"""
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   869
        # Request manifest from server
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   870
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   871
        try:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   872
                m, v = versioned_urlopen(server_url, "manifest", [0],
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   873
                    fmri.get_url_path())
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   874
        except:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   875
                error(_("Unable to download manifest %s from %s") %
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   876
                    (fmri.get_url_path(), server_url))
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   877
                sys.exit(1)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   878
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   879
        # Read from server, write to file
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   880
        try:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   881
                mfst_str = m.read()
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   882
        except:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   883
                error(_("Error occurred while reading from: %s") % server_url)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   884
                sys.exit(1)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   885
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   886
        m = manifest.Manifest()
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   887
        m.set_content(mfst_str)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   888
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   889
        return m
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   890
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   891
catalog_cache = {}
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   892
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   893
def get_catalog(server_url):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   894
        return catalog_cache.get(server_url, fetch_catalog(server_url))[0] 
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   895
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   896
def cleanup_catalogs():
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   897
        for c, d in catalog_cache.values():
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   898
                shutil.rmtree(d)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   899
        catalog_cache.clear()
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   900
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   901
def fetch_catalog(server_url):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   902
        """Fetch the catalog from the server_url."""
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   903
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   904
        # open connection for catalog
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   905
        try:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   906
                c, v = versioned_urlopen(server_url, "catalog", [0])
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   907
        except:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   908
                error(_("Unable to download catalog from: %s") % server_url)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   909
                sys.exit(1)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   910
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   911
        # make a tempdir for catalog
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   912
        dl_dir = tempfile.mkdtemp()
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   913
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   914
        # call catalog.recv to pull down catalog
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   915
        try:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   916
                catalog.ServerCatalog.recv(c, dl_dir)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   917
        except: 
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   918
                error(_("Error while reading from: %s") % server_url)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   919
                sys.exit(1)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   920
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   921
        # close connection to server
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   922
        c.close()
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   923
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   924
        # instantiate catalog object
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   925
        cat = catalog.ServerCatalog(dl_dir, read_only=True)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   926
        
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   927
        # return (catalog, tmpdir path)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   928
        return cat, dl_dir
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   929
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   930
catalog_dict = {}
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   931
def load_catalog(server_url):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   932
        c = get_catalog(server_url)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   933
        d = {}
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   934
        for f in c.fmris():
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   935
                d.setdefault(f.pkg_name, []).append(f)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   936
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   937
        for k in d:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   938
                d[k].sort(reverse=True)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   939
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   940
        catalog_dict[server_url] = d        
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   941
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   942
def expand_fmri(server_url, fmri_string, constraint=version.CONSTRAINT_AUTO):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   943
        """ from specified server, find matching fmri using CONSTRAINT_AUTO
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   944
        cache for performance.  Returns None if no matching fmri is found """
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   945
        if server_url not in catalog_dict:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   946
                load_catalog(server_url)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   947
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   948
        fmri = pkg.fmri.PkgFmri(fmri_string, "5.11")        
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   949
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   950
        for f in catalog_dict[server_url].get(fmri.pkg_name, []):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   951
                if not fmri.version or f.version.is_successor(fmri.version, constraint):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   952
                        return f
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   953
        return None
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   954
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   955
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   956
def get_dependencies(server_url, fmri_list):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   957
        s = set()
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   958
        for f in fmri_list:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   959
                fmri = expand_fmri(server_url, f)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   960
                _get_dependencies(s, server_url, fmri)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   961
        return s
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   962
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   963
def _get_dependencies(s, server_url, fmri):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   964
        """ recursive incorp expansion"""
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   965
        s.add(fmri)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   966
        for a in get_manifest(server_url, fmri).gen_actions_by_type("depend"):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   967
                if a.attrs["type"] == "incorporate":
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   968
                        new_fmri = expand_fmri(server_url, a.attrs["fmri"]) 
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   969
                        if new_fmri and new_fmri not in s: # ignore missing, already planned
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   970
                                _get_dependencies(s, server_url, new_fmri)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   971
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   972
def zap_strings(instr, strings):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   973
        """takes an input string and a list of strings to be removed, ignoring
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   974
        case"""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   975
        for s in strings:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   976
                ls = s.lower()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   977
                while True:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   978
                        li = instr.lower()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   979
                        i = li.find(ls)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   980
                        if i < 0:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   981
                                break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   982
                        instr = instr[0:i] + instr[i + len(ls):]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   983
        return instr 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   984
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   985
def get_branch(name):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   986
        return branch_dict.get(name, def_branch)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   987
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   988
def set_macro(key, value):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   989
        macro_definitions.update([("$(%s)" % key, value)])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   990
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   991
def clear_macro(key):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   992
        del macro_definitions["$(%s)" % key]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   993
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   994
def get_arch(): # use value of arch macro or platform 
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   995
        return macro_definitions.get("$ARCH", platform.processor())
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   996
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   997
def read_full_line(lexer, continuation='\\'):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   998
        """Read a complete line, allowing for the possibility of it being
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   999
        continued over multiple lines.  Returns a single joined line, with
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1000
        continuation characters and leading and trailing spaces removed.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1001
        """
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1002
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1003
        lines = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1004
        while True:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1005
                line = lexer.instream.readline().strip()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1006
                lexer.lineno = lexer.lineno + 1
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1007
                if line[-1] in continuation:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1008
                        lines.append(line[:-1])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1009
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1010
                        lines.append(line)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1011
                        break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1012
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1013
        return apply_macros(' '.join(lines))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1014
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1015
def apply_macros(s):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1016
        """Apply macro subs defined on command line... keep applying
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1017
        macros until no translations are found.  If macro translates
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1018
        to a comment, replace entire token text."""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1019
        while s and "$(" in s:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1020
                for key in macro_definitions.keys():
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1021
                        if key in s:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1022
                                value = macro_definitions[key]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1023
                                if value == "#": # comment character
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1024
                                        s = "#"  # affects whole token
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1025
                                        break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1026
                                s = s.replace(key, value)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1027
                                break # look for more substitutions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1028
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1029
                        break # no more substitutable tokens
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1030
        return s
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1031
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1032
def sourcehook(filename):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1033
        """ implement include hierarchy """
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1034
        for i in include_path:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1035
                f = os.path.join(i, filename)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1036
                if os.path.exists(f):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1037
                        return (f, open(f))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1038
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1039
        return filename, open(filename)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1040
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1041
class tokenlexer(shlex.shlex):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1042
        def read_token(self):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1043
                """ simple replacement of $(ARCH) with a non-special
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1044
                value defined on the command line is trivial.  Since
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1045
                shlex's read_token routine also strips comments and
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1046
                white space, this read_token cannot return either 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1047
                one so any macros that translate to either spaces or
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1048
                # (comment) need to be removed from the token stream."""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1049
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1050
                while True:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1051
                        s = apply_macros(shlex.shlex.read_token(self))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1052
                        if s == "#": # discard line if comment; try again
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1053
                                self.instream.readline()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1054
                                self.lineno = self.lineno + 1
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1055
                        # bail on EOF or not space; loop on space
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1056
                        elif s == None or (s != "" and not s.isspace()):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1057
                                break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1058
                return s
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1059
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1060
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1061
def SolarisParse(mf):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1062
        global curpkg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1063
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1064
        lexer = tokenlexer(file(mf), mf, True)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1065
        lexer.whitespace_split = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1066
        lexer.source = "include"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1067
        lexer.sourcehook = sourcehook
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1068
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1069
        while True:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1070
                token = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1071
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1072
                if not token:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1073
                        break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1074
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1075
                if token == "package":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1076
                        curpkg = start_package(lexer.get_token())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1077
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1078
                        if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1079
                                print "-j %s" % curpkg.name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1080
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1081
                elif token == "end":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1082
                        endarg = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1083
                        if endarg == "package":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1084
                                if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1085
                                        curpkg = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1086
                                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1087
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1088
                                for filename in global_includes:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1089
                                        for i in include_path:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1090
                                                f = os.path.join(i, filename)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1091
                                                if os.path.exists(f):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1092
                                                        SolarisParse(f)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1093
                                                        break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1094
                                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1095
                                                raise RuntimeError("File not "
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1096
                                                    "found: %s" % filename)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1097
                                end_package(curpkg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1098
                                curpkg = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1099
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1100
                elif token == "version":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1101
                        curpkg.version = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1102
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1103
                elif token == "import":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1104
                        package_name = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1105
                        next = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1106
                        if next != "exclude":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1107
                                line = ""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1108
                                lexer.push_token(next)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1109
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1110
                                line = read_full_line(lexer)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1111
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1112
                        if not print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1113
                                try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1114
                                        curpkg.import_pkg(package_name, line)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1115
                                except Exception, e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1116
                                        print "Error(import): %s: in file %s, line %d" % (
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1117
                                                e, mf, lexer.lineno)
1436
ae4ec6b290a2 12258 importer prints error but fails to stop when it cannot find an input file
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1432
diff changeset
  1118
                                        raise
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1119
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1120
                elif token == "from":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1121
                        # slurp up all import lines
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1122
                        pkgspec = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1123
                        filenames = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1124
                        junk = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1125
                        assert junk == "import"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1126
                        next = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1127
                        while next != "end":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1128
                                filenames.append(next)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1129
                                next = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1130
                        junk = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1131
                        assert junk == "import"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1132
                        if not print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1133
                                try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1134
                                        curpkg.import_files(pkgspec, filenames)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1135
                                except Exception, e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1136
                                        print "ERROR(from ... import): %s: in file %s, line %d" % (
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1137
                                            e, mf, lexer.lineno)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1138
                                        raise
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1139
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1140
                elif token == "classification":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1141
                        cat_subcat = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1142
                        curpkg.classification.append(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1143
                            "org.opensolaris.category.2008:%s" % cat_subcat)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1144
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1145
                elif token == "description":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1146
                        curpkg.desc = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1147
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1148
                elif token == "obsoleted":
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1149
                        curpkg.obsolete_branch = lexer.get_token()
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1150
                        action = \
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1151
                            actions.fromstr("set name=pkg.obsolete value=true")
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1152
                        action.attrs["importer.source"] = "add"
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1153
                        curpkg.actions.append(action)
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1154
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1155
                elif token == "renamed":
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1156
                        curpkg.rename_branch = lexer.get_token()
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1157
                        action = \
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1158
                            actions.fromstr("set name=pkg.renamed value=true")
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1159
                        action.attrs["importer.source"] = "add"
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1160
                        curpkg.actions.append(action)
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1161
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1162
                elif token == "consolidation":
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1163
			# Add to consolidation incorporation and
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1164
			# include the org.opensolaris.consolidation
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1165
			# package property.
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1166
                        curpkg.consolidation = lexer.get_token()
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1167
                        cons_dict.setdefault(curpkg.consolidation, []).append(curpkg.name)
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1168
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1169
                        action = actions.fromstr("set " \
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1170
                            "name=org.opensolaris.consolidation value=%s" %
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1171
                            curpkg.consolidation)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1172
                        action.attrs["importer.source"] = token
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1173
                        curpkg.actions.append(action)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1174
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1175
                elif token == "summary":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1176
                        curpkg.summary = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1177
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1178
                elif token == "depend":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1179
                        action = actions.fromstr("depend fmri=%s type=require" %
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1180
                            lexer.get_token())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1181
                        action.attrs["importer.source"] = token
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1182
                        curpkg.actions.append(action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1183
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1184
                elif token == "depend_path":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1185
                        action = actions.fromstr("depend importer.file=%s fmri=none type=require" %
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1186
                            lexer.get_token())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1187
                        action.attrs["importer.source"] = token
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1188
                        curpkg.actions.append(action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1189
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1190
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1191
                elif token == "cluster":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1192
                        curpkg.add_svr4_src(lexer.get_token())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1193
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1194
                elif token == "add":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1195
                        action = actions.fromstr(read_full_line(lexer))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1196
                        action.attrs["importer.source"] = token
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1197
                        curpkg.actions.append(action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1198
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1199
                elif token == "drop":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1200
                        f = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1201
                        if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1202
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1203
                        m = [a for a in curpkg.actions if a.attrs.get("path") == f]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1204
                        if not m:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1205
                                print "Cannot drop '%s' from '%s': not " \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1206
                                    "found" % (f, curpkg.name)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1207
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1208
                                # delete all actions w/ matching path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1209
                                for a in m:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1210
                                        if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1211
                                                print "drop %s from %s" % (a, curpkg.name)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1212
                                        del curpkg.actions[curpkg.actions.index(a)]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1213
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1214
                elif token == "drop_license":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1215
                        curpkg.dropped_licenses.append(lexer.get_token())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1216
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1217
                elif token == "chattr":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1218
                        fname = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1219
                        line = read_full_line(lexer)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1220
                        if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1221
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1222
                        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1223
                                curpkg.chattr(fname, line)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1224
                        except Exception, e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1225
                                print "Can't change attributes on " + \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1226
                                    "'%s': not in the package" % fname, e
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1227
                                raise
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1228
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1229
                elif token == "chattr_glob":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1230
                        glob = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1231
                        line = read_full_line(lexer)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1232
                        if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1233
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1234
                        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1235
                                curpkg.chattr_glob(glob, line)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1236
                        except Exception, e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1237
                                print "Can't change attributes on " + \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1238
                                    "'%s': no matches in the package" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1239
                                    glob, e
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1240
                                raise
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1241
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1242
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1243
                        raise RuntimeError("Error: unknown token '%s' "
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1244
                            "(%s:%s)" % (token, lexer.infile, lexer.lineno))
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1245
def repo_add_content(path_to_repo, path_to_proto):
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1246
        """Fire up depo to add content and rebuild search index"""
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1247
        pythonpath = os.environ.get("PYTHONPATH", "")
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1248
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1249
        args = (os.path.join(path_to_proto, "usr/lib/pkg.depotd"), 
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1250
                "--add-content",
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1251
                "--exit-ready", 
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1252
                "-d", path_to_repo
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1253
                )
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1254
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1255
        print "Adding content & rebuilding search indicies synchronously...."
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1256
        print "%s" % str(args)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1257
        try:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1258
                proc = subprocess.Popen(args, env=os.environ)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1259
                ret = proc.wait()
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1260
        except OSError, e:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1261
                print "cannot execute %s: %s" % (args, e)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1262
                return 1
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1263
        if ret:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1264
                print "exited w/ status %d" % ret
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1265
                return 1
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1266
        print "done"
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1267
        return 0
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1268
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1269
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1270
def main_func():
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1271
        global file_repo
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1272
        global def_branch
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1273
        global def_repo
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1274
        global def_vers
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1275
        global extra_entire_contents
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1276
        global just_these_pkgs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1277
        global nopublish
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1278
        global publish_all
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1279
        global print_pkg_names
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1280
        global reference_uris
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1281
        global show_debug
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1282
        global wos_path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1283
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1284
        
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1285
        try:
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1286
                _opts, _args = getopt.getopt(sys.argv[1:], "AB:D:E:I:G:NR:T:b:dj:m:ns:v:w:p:")
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1287
        except getopt.GetoptError, _e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1288
                print "unknown option", _e.opt
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1289
                sys.exit(1)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1290
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1291
        g_proto_area = os.environ.get("ROOT", "")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1293
        for opt, arg in _opts:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1294
                if opt == "-b":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1295
                        def_branch = arg.rstrip("abcdefghijklmnopqrstuvwxyz")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1296
                elif opt == "-d":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1297
                        show_debug = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1298
                elif opt == "-j": # means we're using the new argument form...
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1299
                        just_these_pkgs.append(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1300
                elif opt == "-m":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1301
                        _a = arg.split("=", 1)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1302
                        set_macro(_a[0], _a[1])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1303
                elif opt == "-n":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1304
                        nopublish = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1305
                elif opt == "-p":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1306
                        if not os.path.exists(arg):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1307
                                raise RuntimeError("Invalid prototype area specified.")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1308
                        # Clean up relative ../../, etc. out of path to proto
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1309
                        g_proto_area = os.path.realpath(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1310
                elif  opt == "-s":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1311
                        def_repo = arg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1312
                        if def_repo.startswith("file://"):
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1313
                                file_repo = True
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1314
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1315
                elif opt == "-v":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1316
                        def_vers = arg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1317
                elif opt == "-w":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1318
                        wos_path.append(arg)
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1319
                elif opt == "-A":
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1320
                        # Always publish obsoleted and renamed packages.
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1321
                        publish_all = True
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1322
                elif opt == "-B":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1323
                        branch_file = file(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1324
                        for _line in branch_file:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1325
                                if not _line.startswith("#"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1326
                                        bfargs = _line.split()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1327
                                        if len(bfargs) == 2:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1328
                                                branch_dict[bfargs[0]] = bfargs[1]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1329
                        branch_file.close()
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1330
                elif opt == "-D":
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1331
                        elided_files[arg] = True
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1332
                elif opt == "-E":
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1333
                        if "@" not in arg:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1334
                                print "-E fmris require a version: %s" % arg
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1335
                                sys.exit(2)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1336
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1337
                        extra_entire_contents.append(arg)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1338
                elif opt == "-I":
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1339
                        include_path.extend(arg.split(":"))
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1340
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1341
                elif opt == "-G": #another file of global includes
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1342
                        global_includes.append(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1343
                elif opt == "-N":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1344
                        print_pkg_names = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1345
                elif opt == "-R":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1346
                        reference_uris.append(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1347
                elif opt == "-T":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1348
                        timestamp_files.append(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1349
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1350
        if not def_branch:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1351
                print "need a branch id (build number)"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1352
                sys.exit(2)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1353
        elif "." not in def_branch:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1354
                print "branch id needs to be of the form 'x.y'"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1355
                sys.exit(2)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1356
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1357
        if not _args:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1358
                print "need argument!"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1359
                sys.exit(2)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1360
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1361
        if not wos_path:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1362
                wos_path = def_wos_path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1363
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1364
        if just_these_pkgs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1365
                filelist = _args
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1366
        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1367
                filelist = _args[0:1]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1368
                just_these_pkgs = _args[1:]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1369
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1370
        if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1371
                for _mf in filelist:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1372
                        SolarisParse(_mf)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1373
                sys.exit(0)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1374
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1375
        start_time = time.clock()
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1376
        print "First pass: initial import", datetime.now()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1377
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1378
        for _mf in filelist:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1379
                SolarisParse(_mf)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1380
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1381
        # Unless we are publishing all obsolete and renamed packages 
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1382
        # (-A command line option), remove obsolete and renamed packages
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1383
        # that weren't obsoleted or renamed at this branch and create 
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1384
        # a dictionary (called or_pkgs_per_con) of obsoleted and renamed
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1385
        # packages per consolidation.  The version portion of the fmri 
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1386
        # will contain the branch that the package was obsoleted or renamed at.
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1387
        or_pkgs_per_con = {}
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1388
        obs_or_renamed_pkgs = {}
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1389
1619
ca0b555f1776 13504 RuntimeError: dictionary changed size during iteration
Rich Burridge <rich.burridge@sun.com>
parents: 1607
diff changeset
  1390
        for pkg in pkgdict.keys():
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1391
                obs_branch = pkgdict[pkg].obsolete_branch
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1392
                rename_branch = pkgdict[pkg].rename_branch
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1393
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1394
                ver_tokens = pkgdict[pkg].version.split(".")
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1395
                cons = pkgdict[pkg].consolidation
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1396
                if obs_branch:
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1397
                        ver_tokens[-1] = obs_branch
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1398
                        ver_string = ".".join(ver_tokens)
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1399
                        or_pkgs_per_con.setdefault(cons, {})[pkg] = ver_string
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1400
                        obs_or_renamed_pkgs[pkg] = (pkgdict[pkg].fmristr(), "obsolete")
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1401
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1402
                        if publish_all:
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1403
                                pkgdict[pkg].version = ver_string
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1404
                        else:
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1405
                                if obs_branch != def_branch.split(".")[1]:
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1406
                                        # Not publishing this obsolete package.
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1407
                                        del pkgdict[pkg]
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1408
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1409
                if rename_branch:
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1410
                        ver_tokens[-1] = rename_branch
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1411
                        ver_string = ".".join(ver_tokens)
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1412
                        or_pkgs_per_con.setdefault(cons, {})[pkg] = ver_string
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1413
                        obs_or_renamed_pkgs[pkg] = (pkgdict[pkg].fmristr(), "renamed")
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1414
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1415
                        if publish_all:
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1416
                                pkgdict[pkg].version = ver_string
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1417
                        else:
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1418
                                if rename_branch != def_branch.split(".")[1]:
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1419
                                        # Not publishing this renamed package.
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1420
                                        del pkgdict[pkg]
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1421
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1422
        print "Second pass: global crosschecks", datetime.now()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1423
        # perform global crosschecks
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1424
        #
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1425
        path_dict.clear()
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1426
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1427
        for pkg in pkgdict.values():
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1428
                for action in pkg.actions:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1429
                        if "path" not in action.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1430
                                continue
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1431
                        path = action.attrs["path"]
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1432
                        path_dict.setdefault(path, []).append(action)
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1433
                        if action.name in ["file", "link", "hardlink"]:
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1434
                                basename_dict.setdefault(os.path.basename(path), []).append(action)
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1435
                                pkgpath_dict.setdefault(path, []).append(action.attrs["importer.ipspkg"])
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1436
        errors = check_pathdict_actions(path_dict)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1437
        if errors:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1438
                for e in errors:
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1439
                        print "Fail: %s" % e
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1440
                sys.exit(1)
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1441
        # check for require dependencies on obsolete or renamed pkgs
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1442
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1443
        errors = []
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1444
        warns = []
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1445
        for pack in pkgdict.values():
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1446
                for action in pack.actions:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1447
                        if action.name != "depend":
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1448
                                continue
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1449
                        if action.attrs["type"] == "require" and "fmri" in action.attrs:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1450
                                fmri = action.attrs["fmri"].split("@")[0] # remove version
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1451
                                if fmri.startswith("pkg:/"): # remove pkg:/ if exists
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1452
                                        fmri = fmri[5:] 
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1453
                                if fmri in obs_or_renamed_pkgs:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1454
                                        tup = obs_or_renamed_pkgs[fmri]
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1455
                                        s = "Pkg %s has 'require' dependency on pkg %s, which is %s" % (
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1456
                                            (pack.fmristr(),) + tup)
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1457
                                        if tup[1] == "obsolete":
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1458
                                                errors.append(s)
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1459
                                        else:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1460
                                                warns.append(s)
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1461
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1462
        if warns:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1463
                for w in warns:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1464
                        print "Warn: %s" % w
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1465
        if errors:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1466
                for e in errors:
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1467
                        print "Fail: %s" % e
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1468
                sys.exit(1)
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1469
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1470
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1471
        print "packages being published are self consistent"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1472
        if reference_uris:
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1473
                print "downloading and checking external references"
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1474
                excludes = [variant.Variants({"variant.arch": get_arch()}).allow_action]
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1475
                for uri in reference_uris:
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1476
                        server, fmri_string = uri.split("@", 1)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1477
                        for pfmri in get_dependencies(server, [fmri_string]):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1478
                                if pfmri.get_name() in pkgdict:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1479
                                        continue # ignore pkgs already seen
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1480
                                pfmri_str = "%s@%s" % (pfmri.get_name(), pfmri.get_version())
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1481
                                fmridict[pfmri.get_name()] = pfmri_str
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1482
                                for action in get_manifest(server, pfmri).gen_actions(excludes):
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1483
                                        if "path" not in action.attrs:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1484
                                                continue
1697
4409e56754c5 10748 importer.py cannot build unbundled products against older releases.
Tim Foster <tim.foster@sun.com>
parents: 1644
diff changeset
  1485
                                        if action.name == "unknown":
4409e56754c5 10748 importer.py cannot build unbundled products against older releases.
Tim Foster <tim.foster@sun.com>
parents: 1644
diff changeset
  1486
                                                # we don't care about unknown actions -
4409e56754c5 10748 importer.py cannot build unbundled products against older releases.
Tim Foster <tim.foster@sun.com>
parents: 1644
diff changeset
  1487
                                                # mispublished packages with eg. SVR4
4409e56754c5 10748 importer.py cannot build unbundled products against older releases.
Tim Foster <tim.foster@sun.com>
parents: 1644
diff changeset
  1488
                                                # pkginfo files result in duplicate paths,
4409e56754c5 10748 importer.py cannot build unbundled products against older releases.
Tim Foster <tim.foster@sun.com>
parents: 1644
diff changeset
  1489
                                                # causing errors in check_pathdict_actions
4409e56754c5 10748 importer.py cannot build unbundled products against older releases.
Tim Foster <tim.foster@sun.com>
parents: 1644
diff changeset
  1490
                                                # "Multiple actions on different types
4409e56754c5 10748 importer.py cannot build unbundled products against older releases.
Tim Foster <tim.foster@sun.com>
parents: 1644
diff changeset
  1491
                                                # with the same path"
4409e56754c5 10748 importer.py cannot build unbundled products against older releases.
Tim Foster <tim.foster@sun.com>
parents: 1644
diff changeset
  1492
                                                print "INFO: ignoring action in %s: %s" \
4409e56754c5 10748 importer.py cannot build unbundled products against older releases.
Tim Foster <tim.foster@sun.com>
parents: 1644
diff changeset
  1493
                                                    % (pfmri_str, str(action))
4409e56754c5 10748 importer.py cannot build unbundled products against older releases.
Tim Foster <tim.foster@sun.com>
parents: 1644
diff changeset
  1494
                                                continue
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1495
                                        action.attrs["importer.ipspkg"] = pfmri_str
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
  1496
                                        path_dict.setdefault(action.attrs["path"], []).append(action)
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1497
                                        if action.name in ["file", "link", "hardlink"]:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1498
                                                basename_dict.setdefault(os.path.basename(
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1499
                                                    action.attrs["path"]), []).append(action)
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1500
                                                pkgpath_dict.setdefault(action.attrs["path"],
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1501
                                                    []).append(action.attrs["importer.ipspkg"])
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1502
                errors = check_pathdict_actions(path_dict)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1503
                if errors:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1504
                        for e in errors:
1626
a0bebdf18fc2 13476 Importer should check for require dependencies on obsolete pkgs
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1619
diff changeset
  1505
                                print "Fail: %s" % e
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1506
                        sys.exit(1)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1507
                print "external packages checked for conflicts"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1508
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1509
        print "Third pass: dependency id, resolution and publication", datetime.now()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1510
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1511
        consolidation_incorporations = []
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1512
        obsoleted_renamed_pkgs = []
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1513
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1514
        # Generate consolidation incorporations
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1515
        for cons in cons_dict.keys():
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1516
                consolidation_incorporation = "consolidation/%s/%s-incorporation" %  (
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1517
                    cons, cons)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1518
                consolidation_incorporations.append(consolidation_incorporation)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1519
                curpkg = start_package(consolidation_incorporation)
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1520
                curpkg.summary = "%s consolidation incorporation" % cons
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1521
                curpkg.desc = "This incorporation constrains packages " \
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1522
                        "from the %s consolidation." % cons
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1523
1644
852f7fdf1fc0 13832 merge publication could be faster
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1626
diff changeset
  1524
                # Add packages that aren't renamed or obsoleted
852f7fdf1fc0 13832 merge publication could be faster
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1626
diff changeset
  1525
                or_pkgs = or_pkgs_per_con.get(cons, {})
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1697
diff changeset
  1526
                curpkg.actions.append(actions.fromstr(
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1697
diff changeset
  1527
                    "set name=pkg.depend.install-hold value=core-os.%s" % cons))
1644
852f7fdf1fc0 13832 merge publication could be faster
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1626
diff changeset
  1528
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1529
                for depend in cons_dict[cons]:
1644
852f7fdf1fc0 13832 merge publication could be faster
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1626
diff changeset
  1530
                        if depend not in or_pkgs:
852f7fdf1fc0 13832 merge publication could be faster
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1626
diff changeset
  1531
                                action = actions.fromstr(
852f7fdf1fc0 13832 merge publication could be faster
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1626
diff changeset
  1532
                                    "depend fmri=%s type=incorporate" % depend)
852f7fdf1fc0 13832 merge publication could be faster
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1626
diff changeset
  1533
                                action.attrs["importer.source"] = "depend"
852f7fdf1fc0 13832 merge publication could be faster
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1626
diff changeset
  1534
                                curpkg.actions.append(action)
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1535
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1536
                # Add in the obsoleted and renamed packages for this
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1537
                # consolidation.
1644
852f7fdf1fc0 13832 merge publication could be faster
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1626
diff changeset
  1538
                for name, version in or_pkgs.iteritems():
1567
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1539
                        action = actions.fromstr(
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1540
                            "depend fmri=%s@%s type=incorporate" %
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1541
                                (name, version))
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1542
                        action.attrs["importer.source"] = "depend"
34f03f3832ae 5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
Rich Burridge <rich.burridge@sun.com>
parents: 1516
diff changeset
  1543
                        curpkg.actions.append(action)
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1544
                        obsoleted_renamed_pkgs.append("%s@%s" % (name, version))
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1545
                action = actions.fromstr("set " \
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1546
                    "name=org.opensolaris.consolidation value=%s" % cons)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1547
                action.attrs["importer.source"] = "add"
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1548
                curpkg.actions.append(action)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1549
                end_package(curpkg)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1550
                curpkg = None
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1551
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1552
        # Generate entire consolidation if we're generating any consolidation incorps
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1553
        if consolidation_incorporations:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1554
                curpkg = start_package("entire")
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1555
                curpkg.summary = "incorporation to lock all system packages to same build" 
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1556
                curpkg.desc = "This package constrains " \
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1557
                    "system package versions to the same build.  WARNING: Proper " \
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1558
                    "system update and correct package selection depend on the " \
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1559
                    "presence of this incorporation.  Removing this package will " \
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1560
                    "result in an unsupported system."
1731
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1697
diff changeset
  1561
                curpkg.actions.append(actions.fromstr(
a76f8a1fc049 13241 pkg install triggers system incorporation update
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1697
diff changeset
  1562
                    "set name=pkg.depend.install-hold value=core-os"))
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1563
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1564
                for incorp in consolidation_incorporations:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1565
                        action = actions.fromstr("depend fmri=%s type=incorporate" % incorp)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1566
                        action.attrs["importer.source"] = "auto-generated"
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1567
                        curpkg.actions.append(action)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1568
                        action = actions.fromstr("depend fmri=%s type=require" % incorp)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1569
                        action.attrs["importer.source"] = "auto-generated"
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1570
                        action.attrs["importer.no-version"] = "true"
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1571
                        curpkg.actions.append(action)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1572
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1573
                for extra in extra_entire_contents:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1574
                        action = actions.fromstr("depend fmri=%s type=incorporate" % extra)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1575
                        action.attrs["importer.source"] = "command-line"
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1576
                        curpkg.actions.append(action)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1577
                        action = actions.fromstr("depend fmri=%s type=require" % extra)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1578
                        action.attrs["importer.source"] = "command-line"
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1579
                        action.attrs["importer.no-version"] = "true"
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1580
                        curpkg.actions.append(action)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1581
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1582
                end_package(curpkg)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1583
                curpkg = None
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1584
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1585
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1586
                incorporated_pkgs = set([
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1587
                                f
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1588
                                for l in cons_dict.values()
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1589
                                for f in l
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1590
                                ]) 
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1591
                incorporated_pkgs |= set(consolidation_incorporations)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1592
                incorporated_pkgs |= set(["entire", "redistributable"])
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1593
                incorporated_pkgs |= set(obsoleted_renamed_pkgs)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1594
                                
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1595
                unincorps = set(pkgdict.keys()) - incorporated_pkgs
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1596
                if unincorps:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1597
                        # look through these; if they have only set actions they're
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1598
                        # ancient obsoleted pkgs - ignore them.
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1599
                        for f in unincorps.copy():
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1600
                                for a in pkgdict[f].actions:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1601
                                        if a.name != "set":
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1602
                                                break
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1603
                                else:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1604
                                        unincorps.remove(f)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1605
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1606
                        print "The following non-empty unincorporated pkgs are not part of any consolidation"
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1607
                        for f in unincorps:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1608
                                print f      
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1609
                     
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1610
        if just_these_pkgs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1611
                newpkgs = set(pkgdict[name]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1612
                              for name in pkgdict.keys()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1613
                              if name in just_these_pkgs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1614
                              )
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1615
        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1616
                newpkgs = set(pkgdict.values())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1617
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1618
        processed = 0
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1619
        total = len(newpkgs)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1620
        error_count = 0
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1621
        for _p in sorted(newpkgs):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1622
                if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1623
                        print "  Version:", _p.version
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1624
                        print "  Description:", _p.desc
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1625
                        print "  Summary:", _p.summary
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1626
                        print "  Classification:", ",".join(_p.classification)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1627
                try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1628
                        publish_pkg(_p)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1629
                except trans.TransactionError, _e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1630
                        print "%s: FAILED: %s\n" % (_p.name, _e)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1631
                        error_count += 1
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1329
diff changeset
  1632
                processed += 1
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1633
                if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1634
                        print "%d/%d packages processed; %.2f%% complete" % (processed, total,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1635
                            processed * 100.0 / total)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1636
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1637
        if error_count:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1638
                print "%d/%d packages has errors; %.2f%% FAILED" % (error_count, total,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1639
                    error_count * 100.0 / total)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1640
                sys.exit(1)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1641
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1642
        print "%d/%d packages processed; %.2f%% complete" % (processed, total,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1643
             processed * 100.0 / total)
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1644
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1645
        if file_repo:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1646
                code = repo_add_content(def_repo[7:], g_proto_area)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1647
                if code:
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1648
                        sys.exit(code)
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1649
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1650
        print "Done:", datetime.now()
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1651
        elapsed = time.clock() - start_time 
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1652
        print "publication took %d:%.2d" % (elapsed/60, elapsed % 60)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1653
        sys.exit(0)
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1654
        
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1655
if __name__ == "__main__":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1656
        main_func()
1602
78e23eef26fc 13242 packages published by importer should depend on their consolidation incorporation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1567
diff changeset
  1657