src/util/distro-import/importer.py
author Rich Burridge <rich.burridge@sun.com>
Fri, 11 Dec 2009 11:06:01 -0800
changeset 1567 34f03f3832ae
parent 1516 8c950a3b4171
child 1602 78e23eef26fc
permissions -rwxr-xr-x
5779 Need to add meta-data to IPS packages to indicate that they are obsolete/replaced
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
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    32
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
    33
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
    34
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
    35
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
    36
import platform
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    37
import re
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    38
import shlex
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
    39
import shutil
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    40
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
    41
import tempfile
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    42
import urllib
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    43
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    44
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
    45
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
    46
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
    47
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
    48
from tempfile import mkstemp
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    49
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    50
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
    51
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    52
# 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
    53
# 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
    54
# 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
    55
# pkg & path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    56
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    57
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    58
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
    59
branch_dict = {}     # 
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
    60
cons_dict = {}       # consolidation incorporation dictionaries
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    61
create_repo = False  #
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    62
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
    63
def_branch = ""      # default branch
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    64
def_repo = "http://localhost:10000"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    65
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
    66
# default search path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    67
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
    68
elided_files = {}    # always delete these files; not checked on specific import
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    69
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
    70
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
    71
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
    72
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
    73
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
    74
nopublish = False    # fake publication?
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    75
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
    76
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
    77
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
    78
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
    79
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
    80
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
    81
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
    82
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
    83
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
    84
    " - / filesystem", ",root(/)"] # remove from summaries
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    85
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
    86
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
    87
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
    88
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    89
class Package(object):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    90
        def __init__(self, name):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    91
                self.name = name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    92
                self.depend = []        # require dependencies
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    93
                self.file_depend = []   # file dependencies
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    94
                self.undepend = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    95
                self.extra = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    96
                self.dropped_licenses = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    97
                self.nonhollow_dirs = {}
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    98
                self.srcpkgs = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    99
                self.classification = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   100
                self.desc = ""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   101
                self.summary = ""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   102
                self.version = ""
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
   103
                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
   104
                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
   105
                self.rename_branch = None
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   106
                self.imppkg = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   107
                self.actions = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   108
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   109
                pkgdict[name] = self
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   110
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   111
        def fmristr(self):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   112
                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
   113
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   114
        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
   115
                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
   116
                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
   117
                    [], exclude_files)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   118
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   119
                if not self.version:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   120
                        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
   121
                            get_branch(self.name))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   122
                if not self.desc:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   123
                        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   124
                                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
   125
                                    summary_detritus)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   126
                        except KeyError:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   127
                                self.desc = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   128
                if not self.summary:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   129
                        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
   130
                            summary_detritus)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   131
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   132
        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
   133
                self.srcpkgs.append(imppkg)
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 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
   136
                try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   137
                        ppath = pkg_path(imppkg_filename)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   138
                except:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   139
                        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
   140
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   141
                bundle = SolarisPackageDirBundle(ppath, data=False)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   142
                p = bundle.pkg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   143
                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
   144
                self.imppkg = bundle.pkg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   145
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   146
                includes_seen = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   147
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   148
                # 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
   149
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   150
                svr4pkgsseen[imppkg_name] = p
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   151
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   152
                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
   153
                    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
   154
                        hollow = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   155
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   156
                        hollow = False
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   157
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   158
                for action in bundle:
1329
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   159
                        if includes:
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   160
                                if action.name == "license":
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   161
                                        pass # always include license.
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   162
                                elif "path" not in action.attrs or \
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   163
                                    action.attrs["path"] not in includes:
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   164
                                        continue
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   165
                                else:
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   166
                                        includes_seen.append(
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   167
                                            action.attrs["path"])
d3b0ddf1d1c2 10936 - SUNWdtbas package ships no license
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1292
diff changeset
   168
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   169
                        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
   170
                            action.attrs["path"] in excludes:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   171
                                if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   172
                                        print "excluding %s from %s" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   173
                                            (action.attrs["path"], imppkg_name)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   174
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   175
 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   176
                        if action.name == "unknown":
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
                        action.attrs["importer.source"] = "svr4pkg"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   180
                        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
   181
                        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
   182
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   183
                        if action.name == "license":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   184
                                # 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
   185
                                # unnecessary for licenses.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   186
                                del action.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   187
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   188
                        # 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
   189
                        if action.name == "file":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   190
                                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
   191
                                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
   192
                                        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
   193
                                                break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   194
                                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   195
                                        del action.attrs["timestamp"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   196
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   197
                        if hollow:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   198
                                action.attrs["opensolaris.zone"] = "global"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   199
                                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
   200
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   201
                        self.check_perms(action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   202
                        self.actions.append(action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   203
                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
   204
                if includes_missed:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   205
                        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
   206
                            (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
   207
                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
   208
                return p
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   209
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   210
        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
   211
                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
   212
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   213
        def check_perms(self, action):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   214
                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
   215
                        return
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   216
                orig = action.attrs.copy()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   217
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   218
                if action.attrs["owner"] == "?":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   219
                        action.attrs["owner"] = "root"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   220
                if action.attrs["group"] == "?":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   221
                        action.attrs["group"] = "bin"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   222
                if action.attrs["mode"] == "?":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   223
                        if action.name == "dir":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   224
                                action.attrs["mode"] = "0755"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   225
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   226
                                action.attrs["mode"] = "0444"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   227
                if orig != action.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   228
                        for k in action.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   229
                                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
   230
                                        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
   231
                                            (
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   232
                                            action.attrs["path"],
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   233
                                            action.attrs["importer.svr4pkgname"],
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   234
                                            k,
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   235
                                            action.attrs[k]
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   236
                                            )
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   237
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   238
        def chattr(self, fname, line):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   239
                matches = [
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   240
                    a 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   241
                    for a in self.actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   242
                    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
   243
                ]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   244
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   245
                if not matches:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   246
                        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
   247
                            (fname, curpkg.name))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   248
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   249
                line = line.rstrip()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   250
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   251
                # is this a deletion?
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   252
                if line.startswith("drop"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   253
                        for f in matches:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   254
                                # deletion of existing attribute
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   255
                                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
   256
                                        if d in f.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   257
                                                del f.attrs[d]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   258
                                                if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   259
                                                        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
   260
                                                            (d, fname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   261
                        return
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   262
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   263
                # handle insertion/modification case
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   264
                for f in matches:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   265
                        # create attribute dictionary from line
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   266
                        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
   267
                        f.attrs.update(new_attrs)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   268
                        if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   269
                                print "Updating attributes on " + \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   270
                                    "'%s' in '%s' with '%s'" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   271
                                    (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
   272
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   273
        # 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
   274
        # 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
   275
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   276
        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
   277
                args = line.split()
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
                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
   280
                        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
   281
                        type = args.pop(0)
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   282
                        line = " ".join(args)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   283
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   284
                        type = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   285
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   286
                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
   287
                        edit = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   288
                        args.pop(0)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   289
                        target = args.pop(0)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   290
                        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
   291
                        replace = args.pop(0)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   292
                        line = " ".join(args)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   293
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   294
                        edit = False
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   295
                        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
   296
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   297
                o = [
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   298
                        f
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   299
                        for f in self.actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   300
                        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
   301
                            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
   302
                            (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
   303
                     ]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   304
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   305
                for f in o:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   306
                        fname = f.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   307
                        if edit:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   308
                                if target in f.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   309
                                        old_value = f.attrs[target]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   310
                                        new_value = regexp.sub(replace, \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   311
                                            old_value)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   312
                                        if old_value == new_value:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   313
                                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   314
                                        f.attrs[target] = new_value
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   315
                                else:
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
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   318
                                f.attrs.update(new_attrs)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   319
                                if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   320
                                        print "Updating attributes on " + \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   321
                                            "'%s' in '%s' with '%s'" % \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   322
                                            (fname, curpkg.name, new_attrs)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   323
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   324
def pkg_path(pkgname):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   325
        name = os.path.basename(pkgname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   326
        if pkgname in pkgpaths:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   327
                return pkgpaths[name]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   328
        if "/" in pkgname:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   329
                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
   330
                return pkgname
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   331
        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   332
                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
   333
                        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
   334
                                pkgpaths[name] = each_path + "/" + pkgname
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   335
                                return pkgpaths[name]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   336
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   337
                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
   338
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   339
def check_pkg_actions(pkg):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   340
        path_dict = {}
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   341
        # 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
   342
        for a in pkg.actions:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   343
                if "path" in a.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   344
                        path_dict.setdefault(a.attrs["path"], []).append(a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   345
        errors = check_pathdict_actions(path_dict, remove_dups=True)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   346
        if errors:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   347
                for e in errors:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   348
                        print e
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   349
                raise RuntimeError("Package %s: errors occurred" % pkg.name)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   350
        return path_dict
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   351
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   352
def check_pathdict_actions(path_dict, remove_dups=False):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   353
        # 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
   354
        errorlist = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   355
        for p in path_dict:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   356
                if len(path_dict[p]) == 1:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   357
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   358
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   359
                dups = path_dict[p]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   360
                # 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
   361
                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
   362
                        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
   363
                            ("\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
   364
                        # 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
   365
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   366
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   367
                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
   368
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   369
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   370
                elif dups[0].name == "link":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   371
                        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
   372
                        if len(targets) > 1:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   373
                                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
   374
                                    ("\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
   375
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   376
                        
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   377
                elif dups[0].name != "dir":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   378
                        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
   379
                            ("\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
   380
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   381
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   382
                # 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
   383
                dkeys = set([
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   384
                    k
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   385
                    for d in dups
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   386
                    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
   387
                ])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   388
                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
   389
                for g in ga:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   390
                        if len(ga[g]) == 1:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   391
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   392
                        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
   393
                                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
   394
                                    (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
   395
                        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
   396
                                # 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
   397
                                for d in dups:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   398
                                        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
   399
                                                d.attrs["importer.deleteme"] = "True"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   400
                                                if 1 or show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   401
                                                        print "removing %s as hollow dup" % d
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   402
                return errorlist
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   403
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   404
def start_package(pkgname):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   405
        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
   406
        return Package(pkgname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   407
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   408
def end_package(pkg):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   409
        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
   410
        if not pkg.version:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   411
                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
   412
        elif "-" not in pkg.version:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   413
                pkg.version += "-%s" % pkg_branch
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   414
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   415
       # add description actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   416
        if pkg.desc:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   417
                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
   418
                    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
   419
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   420
        if pkg.summary:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   421
                pkg.actions.extend([
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   422
                    actions.attribute.AttributeAction(None,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   423
                        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
   424
                    actions.attribute.AttributeAction(None,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   425
                        name="description", value=pkg.summary)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   426
                ])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   427
        if pkg.classification:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   428
                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
   429
                    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
   430
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   431
        # add legacy actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   432
        if pkg.name != "SUNWipkg":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   433
                for p in pkg.srcpkgs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   434
                        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   435
                                sp = svr4pkgsseen[p]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   436
                        except KeyError:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   437
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   438
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   439
                        wanted_attrs = (
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   440
                                "PKG", "NAME", "ARCH", "VERSION", "CATEGORY",
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   441
                                "VENDOR", "DESC", "HOTLINE"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   442
                                )
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   443
                        attrs = dict(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   444
                                (k.lower(), v)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   445
                                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
   446
                                if k in wanted_attrs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   447
                                )
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   448
                        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
   449
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   450
                        pkg.actions.append(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   451
                            actions.legacy.LegacyAction(None, **attrs))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   452
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   453
        for action in pkg.actions[:]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   454
                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
   455
                if action.name == "license" and \
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   456
                    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
   457
                        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
   458
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   459
        # 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
   460
        check_pkg_actions(pkg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   461
        # 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
   462
        fmridict[pkg.name] = pkg.fmristr()
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
        clear_macro("PKGNAME")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   465
        print "Package '%s'" % pkg.name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   466
        if not show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   467
                return
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   468
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   469
        print "  Version:", pkg.version
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   470
        print "  Description:", pkg.desc
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   471
        print "  Summary:", pkg.summary
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   472
        print "  Classification: ", ",".join(pkg.classification)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   473
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   474
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
   475
        # remove any temp attributes
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   476
        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
   477
                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
   478
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   479
        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
   480
                if k.startswith("importer."):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   481
                        del a.attrs[k]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   482
        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   483
                t.add(a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   484
        except TypeError, e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   485
                print a.attrs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   486
                print a.name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   487
                
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   488
                raise
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   489
        
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   490
def publish_pkg(pkg):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   491
        """ 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
   492
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   493
        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
   494
            a.attrs["importer.svr4pkg"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   495
            for a in pkg.actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   496
            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
   497
            a.name in ["license", "file"]
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
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   500
        svr4_traversal_list = [
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   501
            ("%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
   502
            for a in pkg.actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   503
            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
   504
            a.name in ["license", "file"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   505
        ]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   506
        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
   507
        # 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
   508
        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
   509
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   510
        t = trans.Transaction(def_repo, create_repo=create_repo,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   511
            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
   512
        transaction_id = t.open()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   513
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   514
        # publish easy actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   515
        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
   516
                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
   517
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   518
                if a.name == "hardlink":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   519
                        # 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
   520
                        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
   521
                elif a.name == "license":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   522
                        # 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
   523
                        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
   524
                publish_action(t, pkg, a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   525
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   526
        # 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
   527
        # 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
   528
        # 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
   529
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   530
        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
   531
                bundle = SolarisPackageDirBundle(pkg_path(p))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   532
                for a in bundle:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   533
                        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
   534
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   535
                        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
   536
                        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
   537
                        if not actual_action:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   538
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   539
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   540
                        # 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
   541
                        # 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
   542
                        ao = a.data()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   543
                        bufsz = 256 * 1024
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   544
                        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
   545
                        fd, tmp = mkstemp(prefix="pkg.")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   546
                        while sz > 0:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   547
                                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
   548
                                os.write(fd, d)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   549
                                sz -= len(d)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   550
                        d = None # free data
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   551
                        os.close(fd)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   552
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   553
                        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
   554
                        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
   555
                        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
   556
                        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
   557
                                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
   558
                                    actual_action, tmp))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   559
                        os.unlink(tmp)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   560
        # 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
   561
        for a in pkg.actions:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   562
                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
   563
                    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
   564
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   565
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   566
                if hasattr(a, "hash"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   567
                        fname, fd = sourcehook(a.hash)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   568
                        fd.close()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   569
                        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
   570
                        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
   571
                        if a.name == "license":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   572
                                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
   573
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   574
                publish_action(t, pkg, a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   575
                if "path" in a.attrs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   576
                        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
   577
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   578
        # resolve & combine dependencies
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   579
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   580
        # 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
   581
        # 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
   582
        depend_actions = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   583
        for a in pkg.actions:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   584
                if a.name != "depend":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   585
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   586
                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
   587
                        # set any unanchored deps to current version
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   588
                        if "@" not in a.attrs["fmri"] and a.attrs["fmri"] in fmridict:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   589
                                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
   590
                        depend_actions.append(a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   591
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   592
                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
   593
                        fname = a.attrs["importer.file"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   594
                        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
   595
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   596
                        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
   597
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   598
                for path in pathlist:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   599
                        fmris = search_dicts(path)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   600
                        if fmris:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   601
                                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
   602
                                orig_action = str(a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   603
                                for f in fmris:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   604
                                        if f != pkg.fmristr():
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   605
                                                b = actions.fromstr(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   606
                                                    orig_action.replace(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   607
                                                    repl_string, "fmri=%s" % f))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   608
                                                depend_actions.append(b)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   609
                                break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   610
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   611
                        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
   612
                        if not possibles:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   613
                                suggestions = "None"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   614
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   615
                                # 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
   616
                                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
   617
                        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
   618
                            pkg.name, a, suggestions)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   619
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   620
        #  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
   621
        depend_dict = {}
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   622
        delete_count = 0
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   623
        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
   624
                fmri = str(a.attrs["fmri"])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   625
                if fmri in depend_dict:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   626
                        if depend_dict[fmri] != a.attrs["type"]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   627
                                print "%s: multiple dependency types on same pkg %s:%s" % (
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   628
                                    pkg.name, fmri, depend_dict)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   629
                                raise RuntimeError("dependency error")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   630
                        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
   631
                        delete_count += 1
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   632
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   633
                        depend_dict[fmri] = a.attrs["type"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   634
        # pass three - publish
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   635
        for a in depend_actions:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   636
                publish_action(t, pkg, a)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   637
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1329
diff changeset
   638
        pkg_fmri, pkg_state = t.close(refresh_index=False)
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   639
        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
   640
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   641
def search_dicts(path):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   642
        """ 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
   643
        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
   644
        if path in pkgpath_dict:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   645
                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
   646
                        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
   647
                            path, path_dict[path])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   648
                ret = [pkgpath_dict[path][0]]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   649
                return ret
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   650
        # 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
   651
        comp = path.split("/")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   652
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   653
        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
   654
                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
   655
                        break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   656
                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
   657
                        continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   658
                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
   659
                        link = path_dict[p][0]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   660
                        np = link.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   661
                        nt = link.attrs["target"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   662
                        newpath = os.path.normpath(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   663
                                    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
   664
                        assert path.startswith(np)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   665
                        ret = [pkgpath_dict[p][0]] 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   666
                        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
   667
                        if next:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   668
                                ret += next
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   669
                                return ret
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   670
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   671
                        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
   672
        return []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   673
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   674
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
   675
        """ 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
   676
        hardlink action we're analyzing"""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   677
        target = action.attrs["target"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   678
        path = action.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   679
        if not target.startswith("/"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   680
                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
   681
                    target))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   682
        return [actions.fromstr(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   683
            "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
   684
            target)]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   685
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   686
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
   687
        """ 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
   688
        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
   689
        version of the file"""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   690
        return_actions = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   691
        path = action.attrs["path"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   692
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   693
        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
   694
                f = file(fname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   695
                l = f.readline()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   696
                f.close()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   697
                # add #!/ dependency
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   698
                if l.startswith("#!/"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   699
                        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
   700
                        # 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
   701
                        if p.startswith("/bin"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   702
                                p = "/usr" + p
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   703
                        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
   704
                            (p.lstrip("/"), path)))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   705
                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
   706
                        pass # do something here....
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   707
                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
   708
                        pass # and here
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
                return return_actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   711
        # handle elf files
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   712
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   713
        ei = elf.get_info(fname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   714
        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   715
                ed = elf.get_dynamic(fname)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   716
        except elf.ElfError:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   717
                deps = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   718
                rp = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   719
        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   720
                deps = [
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   721
                    a 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   722
                    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
   723
                    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
   724
                    ]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   725
                rp = ed.get("runpath", "").split(":")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   726
                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
   727
                        rp = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   728
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   729
        rp = [
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   730
            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
   731
            for p in rp
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   732
        ]
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
        kernel64 = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   735
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   736
        # 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
   737
        # /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
   738
        # 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
   739
        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
   740
            (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
   741
                if rp:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   742
                        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
   743
                            (path, rp)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   744
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   745
                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
   746
                        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
   747
                # Default kernel search path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   748
                rp.extend(("/kernel", "/usr/kernel"))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   749
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   750
                # 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
   751
                if ei["bits"] == 64:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   752
                        if ei["arch"] == "i386":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   753
                                kernel64 = "amd64"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   754
                        elif ei["arch"] == "sparc":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   755
                                kernel64 = "sparcv9"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   756
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   757
                                print ei["arch"]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   758
        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   759
                if "/lib" not in rp:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   760
                        rp.append("/lib")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   761
                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
   762
                        rp.append("/usr/lib")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   763
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   764
        # 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
   765
        # 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
   766
        for p in rp:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   767
                if "$" in p:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   768
                        tok = p[p.find("$"):]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   769
                        if "/" in tok:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   770
                                tok = tok[:tok.find("/")]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   771
                        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
   772
        for d in deps:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   773
                pathlist = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   774
                for p in rp:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   775
                        if kernel64:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   776
                                # 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
   777
                                # 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
   778
                                # /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
   779
                                # /platform to look.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   780
                                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
   781
                                deppath = os.path.join(p,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   782
                                                       head,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   783
                                                       kernel64,
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   784
                                                       tail)[1:]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   785
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   786
                                # 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
   787
                                # 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
   788
                                # 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
   789
                                # 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
   790
                                # 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
   791
                                # 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
   792
                                # 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
   793
                                # path.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   794
                                if p.endswith("/64"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   795
                                        if ei["arch"] == "i386":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   796
                                                p = p[:-2] + "amd64"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   797
                                        elif ei["arch"] == "sparc":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   798
                                                p = p[:-2] + "sparcv9"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   799
                                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
   800
                        # deppath includes filename; remove that.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   801
                        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
   802
                        if head:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   803
                                pathlist.append(head)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   804
                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
   805
                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
   806
                    (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
   807
        return return_actions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   808
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   809
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
   810
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
   811
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   812
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
   813
        """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
   814
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   815
        if cmd:
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   816
                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
   817
                pkg_cmd = "importer "
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   818
        else:
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   819
                pkg_cmd = "importer: "
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   820
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   821
                # 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
   822
                # 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
   823
                text = str(text)
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   824
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   825
        # 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
   826
        # *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
   827
        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
   828
        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
   829
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
   830
        # 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
   831
        # 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
   832
        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
   833
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   834
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
   835
        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
   836
                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
   837
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   838
        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
   839
            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
   840
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   841
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
   842
        """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
   843
        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
   844
        exact fmri"""
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   845
        # 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
   846
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   847
        try:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   848
                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
   849
                    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
   850
        except:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   851
                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
   852
                    (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
   853
                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
   854
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   855
        # 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
   856
        try:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   857
                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
   858
        except:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   859
                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
   860
                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
   861
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   862
        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
   863
        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
   864
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   865
        return m
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   866
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   867
catalog_cache = {}
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   868
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   869
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
   870
        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
   871
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   872
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
   873
        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
   874
                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
   875
        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
   876
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   877
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
   878
        """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
   879
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   880
        # 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
   881
        try:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   882
                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
   883
        except:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   884
                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
   885
                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
   886
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   887
        # 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
   888
        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
   889
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   890
        # 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
   891
        try:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   892
                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
   893
        except: 
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   894
                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
   895
                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
   896
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   897
        # 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
   898
        c.close()
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   899
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   900
        # 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
   901
        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
   902
        
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   903
        # 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
   904
        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
   905
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   906
catalog_dict = {}
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   907
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
   908
        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
   909
        d = {}
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   910
        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
   911
                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
   912
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   913
        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
   914
                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
   915
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   916
        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
   917
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   918
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
   919
        """ 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
   920
        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
   921
        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
   922
                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
   923
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   924
        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
   925
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   926
        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
   927
                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
   928
                        return f
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   929
        return None
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   930
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   931
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   932
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
   933
        s = set()
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 fmri_list:
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   935
                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
   936
                _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
   937
        return s
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   938
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   939
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
   940
        """ 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
   941
        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
   942
        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
   943
                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
   944
                        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
   945
                        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
   946
                                _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
   947
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   948
def zap_strings(instr, strings):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   949
        """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
   950
        case"""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   951
        for s in strings:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   952
                ls = s.lower()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   953
                while True:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   954
                        li = instr.lower()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   955
                        i = li.find(ls)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   956
                        if i < 0:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   957
                                break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   958
                        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
   959
        return instr 
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   960
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   961
def get_branch(name):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   962
        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
   963
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   964
def set_macro(key, value):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   965
        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
   966
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   967
def clear_macro(key):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   968
        del macro_definitions["$(%s)" % key]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   969
1432
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
   970
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
   971
        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
   972
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   973
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
   974
        """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
   975
        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
   976
        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
   977
        """
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   978
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   979
        lines = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   980
        while True:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   981
                line = lexer.instream.readline().strip()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   982
                lexer.lineno = lexer.lineno + 1
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   983
                if line[-1] in continuation:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   984
                        lines.append(line[:-1])
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   985
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   986
                        lines.append(line)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   987
                        break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   988
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   989
        return apply_macros(' '.join(lines))
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 apply_macros(s):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   992
        """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
   993
        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
   994
        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
   995
        while s and "$(" in s:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   996
                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
   997
                        if key in s:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   998
                                value = macro_definitions[key]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   999
                                if value == "#": # comment character
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1000
                                        s = "#"  # affects whole token
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1001
                                        break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1002
                                s = s.replace(key, value)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1003
                                break # look for more substitutions
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1004
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1005
                        break # no more substitutable tokens
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1006
        return s
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1007
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1008
def sourcehook(filename):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1009
        """ implement include hierarchy """
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1010
        for i in include_path:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1011
                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
  1012
                if os.path.exists(f):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1013
                        return (f, open(f))
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
        return filename, open(filename)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1016
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1017
class tokenlexer(shlex.shlex):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1018
        def read_token(self):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1019
                """ 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
  1020
                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
  1021
                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
  1022
                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
  1023
                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
  1024
                # (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
  1025
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1026
                while True:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1027
                        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
  1028
                        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
  1029
                                self.instream.readline()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1030
                                self.lineno = self.lineno + 1
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1031
                        # 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
  1032
                        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
  1033
                                break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1034
                return s
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1035
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1036
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1037
def SolarisParse(mf):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1038
        global curpkg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1039
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1040
        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
  1041
        lexer.whitespace_split = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1042
        lexer.source = "include"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1043
        lexer.sourcehook = sourcehook
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1044
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1045
        while True:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1046
                token = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1047
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1048
                if not token:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1049
                        break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1050
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1051
                if token == "package":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1052
                        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
  1053
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1054
                        if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1055
                                print "-j %s" % curpkg.name
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1056
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1057
                elif token == "end":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1058
                        endarg = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1059
                        if endarg == "package":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1060
                                if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1061
                                        curpkg = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1062
                                        continue
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
                                for filename in global_includes:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1065
                                        for i in include_path:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1066
                                                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
  1067
                                                if os.path.exists(f):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1068
                                                        SolarisParse(f)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1069
                                                        break
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1070
                                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1071
                                                raise RuntimeError("File not "
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1072
                                                    "found: %s" % filename)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1073
                                end_package(curpkg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1074
                                curpkg = None
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1075
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1076
                elif token == "version":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1077
                        curpkg.version = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1078
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1079
                elif token == "import":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1080
                        package_name = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1081
                        next = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1082
                        if next != "exclude":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1083
                                line = ""
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1084
                                lexer.push_token(next)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1085
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1086
                                line = read_full_line(lexer)
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
                        if not print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1089
                                try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1090
                                        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
  1091
                                except Exception, e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1092
                                        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
  1093
                                                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
  1094
                                        raise
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1095
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1096
                elif token == "from":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1097
                        # slurp up all import lines
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1098
                        pkgspec = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1099
                        filenames = []
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1100
                        junk = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1101
                        assert junk == "import"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1102
                        next = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1103
                        while next != "end":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1104
                                filenames.append(next)
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
                        junk = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1107
                        assert junk == "import"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1108
                        if not print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1109
                                try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1110
                                        curpkg.import_files(pkgspec, filenames)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1111
                                except Exception, e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1112
                                        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
  1113
                                            e, mf, lexer.lineno)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1114
                                        raise
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1115
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1116
                elif token == "classification":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1117
                        cat_subcat = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1118
                        curpkg.classification.append(
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1119
                            "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
  1120
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1121
                elif token == "description":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1122
                        curpkg.desc = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1123
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
  1124
                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
  1125
                        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
  1126
                        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
  1127
                            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
  1128
                        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
  1129
                        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
  1130
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
  1131
                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
  1132
                        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
  1133
                        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
  1134
                            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
  1135
                        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
  1136
                        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
  1137
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1138
                elif token == "consolidation":
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1139
			# Add to consolidation incorporation and
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1140
			# include the org.opensolaris.consolidation
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1141
			# package property.
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1142
                        curpkg.consolidation = lexer.get_token()
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1143
                        if not curpkg.consolidation in cons_dict:
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1144
                                cons_dict[curpkg.consolidation] = []
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1145
                        cons_dict[curpkg.consolidation].append(curpkg.name)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1146
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1147
                        action = actions.fromstr("set " \
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1148
                            "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
  1149
                            curpkg.consolidation)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1150
                        action.attrs["importer.source"] = token
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1151
                        curpkg.actions.append(action)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1152
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1153
                elif token == "summary":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1154
                        curpkg.summary = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1155
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1156
                elif token == "depend":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1157
                        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
  1158
                            lexer.get_token())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1159
                        action.attrs["importer.source"] = token
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1160
                        curpkg.actions.append(action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1161
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1162
                elif token == "depend_path":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1163
                        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
  1164
                            lexer.get_token())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1165
                        action.attrs["importer.source"] = token
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1166
                        curpkg.actions.append(action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1167
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1168
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1169
                elif token == "cluster":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1170
                        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
  1171
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1172
                elif token == "add":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1173
                        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
  1174
                        action.attrs["importer.source"] = token
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1175
                        curpkg.actions.append(action)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1176
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1177
                elif token == "drop":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1178
                        f = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1179
                        if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1180
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1181
                        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
  1182
                        if not m:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1183
                                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
  1184
                                    "found" % (f, curpkg.name)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1185
                        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1186
                                # 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
  1187
                                for a in m:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1188
                                        if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1189
                                                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
  1190
                                        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
  1191
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1192
                elif token == "drop_license":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1193
                        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
  1194
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1195
                elif token == "chattr":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1196
                        fname = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1197
                        line = read_full_line(lexer)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1198
                        if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1199
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1200
                        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1201
                                curpkg.chattr(fname, line)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1202
                        except Exception, e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1203
                                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
  1204
                                    "'%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
  1205
                                raise
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1206
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1207
                elif token == "chattr_glob":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1208
                        glob = lexer.get_token()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1209
                        line = read_full_line(lexer)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1210
                        if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1211
                                continue
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1212
                        try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1213
                                curpkg.chattr_glob(glob, line)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1214
                        except Exception, e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1215
                                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
  1216
                                    "'%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
  1217
                                    glob, e
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1218
                                raise
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1219
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1220
                else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1221
                        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
  1222
                            "(%s:%s)" % (token, lexer.infile, lexer.lineno))
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1223
def main_func():
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1224
        global create_repo
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1225
        global def_branch
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1226
        global def_repo
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1227
        global def_vers
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1228
        global just_these_pkgs
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1229
        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
  1230
        global publish_all
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1231
        global print_pkg_names
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1232
        global reference_uris
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1233
        global show_debug
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1234
        global wos_path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1235
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1236
        
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1237
        try:
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
  1238
                _opts, _args = getopt.getopt(sys.argv[1:], "AB:D: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
  1239
        except getopt.GetoptError, _e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1240
                print "unknown option", _e.opt
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1241
                sys.exit(1)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1242
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1243
        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
  1244
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1245
        for opt, arg in _opts:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1246
                if opt == "-b":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1247
                        def_branch = arg.rstrip("abcdefghijklmnopqrstuvwxyz")
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1248
                elif opt == "-d":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1249
                        show_debug = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1250
                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
  1251
                        just_these_pkgs.append(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1252
                elif opt == "-m":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1253
                        _a = arg.split("=", 1)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1254
                        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
  1255
                elif opt == "-n":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1256
                        nopublish = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1257
                elif opt == "-p":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1258
                        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
  1259
                                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
  1260
                        # 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
  1261
                        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
  1262
                elif  opt == "-s":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1263
                        def_repo = arg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1264
                        if def_repo.startswith("file://"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1265
                                # When publishing to file:// repositories, automatically
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1266
                                # create the target repository if needed.
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1267
                                create_repo = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1268
                elif opt == "-v":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1269
                        def_vers = arg
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1270
                elif opt == "-w":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1271
                        wos_path.append(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1272
                elif opt == "-D":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1273
                        elided_files[arg] = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1274
                elif opt == "-I":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1275
                        include_path.extend(arg.split(":"))
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
  1276
                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
  1277
                        # 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
  1278
                        publish_all = True
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1279
                elif opt == "-B":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1280
                        branch_file = file(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1281
                        for _line in branch_file:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1282
                                if not _line.startswith("#"):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1283
                                        bfargs = _line.split()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1284
                                        if len(bfargs) == 2:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1285
                                                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
  1286
                        branch_file.close()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1287
                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
  1288
                        global_includes.append(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1289
                elif opt == "-N":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1290
                        print_pkg_names = True
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1291
                elif opt == "-R":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1292
                        reference_uris.append(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1293
                elif opt == "-T":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1294
                        timestamp_files.append(arg)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1295
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1296
        if not def_branch:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1297
                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
  1298
                sys.exit(2)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1299
        elif "." not in def_branch:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1300
                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
  1301
                sys.exit(2)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1302
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1303
        if not _args:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1304
                print "need argument!"
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1305
                sys.exit(2)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1306
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1307
        if not wos_path:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1308
                wos_path = def_wos_path
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1309
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1310
        if just_these_pkgs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1311
                filelist = _args
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1312
        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1313
                filelist = _args[0:1]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1314
                just_these_pkgs = _args[1:]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1315
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1316
        if print_pkg_names:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1317
                for _mf in filelist:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1318
                        SolarisParse(_mf)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1319
                sys.exit(0)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1320
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1321
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1322
        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
  1323
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1324
        for _mf in filelist:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1325
                SolarisParse(_mf)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1326
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
  1327
        # 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
  1328
        # (-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
  1329
        # 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
  1330
        # 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
  1331
        # 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
  1332
        # 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
  1333
        or_pkgs_per_con = {}
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
  1334
        for pkg in pkgdict:
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
  1335
                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
  1336
                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
  1337
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
  1338
                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
  1339
                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
  1340
                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
  1341
                        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
  1342
                        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
  1343
                        or_pkgs_per_con.setdefault(cons, {})[pkg] = 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
  1344
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
  1345
                        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
  1346
                                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
  1347
                        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
  1348
                                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
  1349
                                        # 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
  1350
                                        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
  1351
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
  1352
                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
  1353
                        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
  1354
                        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
  1355
                        or_pkgs_per_con.setdefault(cons, {})[pkg] = 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
  1356
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
  1357
                        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
  1358
                                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
  1359
                        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
  1360
                                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
  1361
                                        # 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
  1362
                                        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
  1363
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1364
        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
  1365
        # perform global crosschecks
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1366
        #
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1367
        for pkg in pkgdict.values():
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1368
                for action in pkg.actions:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1369
                        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
  1370
                                continue
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
  1371
                        path_dict.setdefault(action.attrs["path"], []).append(action)
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1372
                        if action.name in ["file", "link", "hardlink"]:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1373
                                basename_dict.setdefault(os.path.basename(action.attrs["path"]), []).append(action)
1464
6d5abe98a5b7 12416 race between caching of rss/atom feed and publishing "entire"
Shawn Walker <srw@sun.com>
parents: 1436
diff changeset
  1374
                                pkgpath_dict.setdefault(action.attrs["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
  1375
        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
  1376
        if errors:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1377
                for e in errors:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1378
                        print e
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1379
                sys.exit(1)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1380
        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
  1381
        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
  1382
                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
  1383
                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
  1384
                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
  1385
                        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
  1386
                        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
  1387
                                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
  1388
                                        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
  1389
                                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
  1390
                                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
  1391
                                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
  1392
                                        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
  1393
                                                continue
e2a449338bc5 10476 importer should be capable of resolving package dependencies against repo
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1431
diff changeset
  1394
                                        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
  1395
                                        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
  1396
                                        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
  1397
                                                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
  1398
                                                    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
  1399
                                                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
  1400
                                                    []).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
  1401
                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
  1402
                if errors:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1403
                        for e in errors:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1404
                                print e
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1405
                        sys.exit(1)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1406
                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
  1407
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1408
        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
  1409
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1410
        # Generate consolidation incorporations
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1411
        for cons in cons_dict.keys():
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1412
                curpkg = start_package("consolidation/%s/%s-incorporation" %
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1413
                        (cons, cons))
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1414
                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
  1415
                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
  1416
                        "from the %s consolidation." % cons
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1417
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1418
                for depend in cons_dict[cons]:
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1419
                        action = actions.fromstr(
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1420
                            "depend fmri=%s type=incorporate" % depend)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1421
                        action.attrs["importer.source"] = "depend"
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1422
                        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
  1423
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
  1424
                # 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
  1425
                # 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
  1426
                for name in or_pkgs_per_con.get(cons, {}):
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
  1427
                        version = or_pkgs_per_con[cons][name]
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
  1428
                        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
  1429
                            "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
  1430
                                (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
  1431
                        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
  1432
                        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
  1433
1471
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1434
                action = actions.fromstr("set " \
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1435
                    "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
  1436
                action.attrs["importer.source"] = "add"
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1437
                curpkg.actions.append(action)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1438
                end_package(curpkg)
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1439
                curpkg = None
7526bfca96f9 12347 new dependencies required for developer/opensolaris/osnet
Liane Praza <Liane.Praza@Sun.COM>
parents: 1464
diff changeset
  1440
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1441
        if just_these_pkgs:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1442
                newpkgs = set(pkgdict[name]
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1443
                              for name in pkgdict.keys()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1444
                              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
  1445
                              )
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1446
        else:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1447
                newpkgs = set(pkgdict.values())
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1448
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1449
        processed = 0
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1450
        total = len(newpkgs)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1451
        error_count = 0
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1452
        for _p in sorted(newpkgs):
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1453
                if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1454
                        print "  Version:", _p.version
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1455
                        print "  Description:", _p.desc
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1456
                        print "  Summary:", _p.summary
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1457
                        print "  Classification:", ",".join(_p.classification)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1458
                try:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1459
                        publish_pkg(_p)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1460
                except trans.TransactionError, _e:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1461
                        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
  1462
                        error_count += 1
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1329
diff changeset
  1463
                processed += 1
1292
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1464
                if show_debug:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1465
                        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
  1466
                            processed * 100.0 / total)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1467
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1468
        if error_count:
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1469
                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
  1470
                    error_count * 100.0 / total)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1471
                sys.exit(1)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1472
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1473
        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
  1474
             processed * 100.0 / total)
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1475
        print "Done:", datetime.now()
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1476
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1477
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1478
if __name__ == "__main__":
c789fdb90238 3395 importer can't find dependencies hidden behind symlinks
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
  1479
        main_func()