src/modules/lint/engine.py
author Brock Pytlik <brock.pytlik@oracle.com>
Wed, 27 Apr 2011 20:30:32 -0700
changeset 2310 ce10607d5332
parent 2293 631000734928
child 2319 247375ff5e19
permissions -rw-r--r--
11684 desire option to not propagate certs to non-global zones 17522 system repository should provide basic functionality 17523 Need a functioning sysdepo 17524 system depot should auto generate its configuration based on system image 17525 system depot should respond to versions/0 17526 system depot should provide publisher configuration 17527 caching should be enabled for system depot 17528 system depot should proxy http repositories 17529 system depot should proxy https repositories 17530 pkg client needs to be aware of the system repository 17531 pkg needs to cache system publisher information 17532 pkg should retrieve publisher information from the system repository when configured 17533 pkg needs to use the system repository as a proxy for http repositories 17534 pkg needs to use the system repository as a proxy for https repositories 17535 need an image property to indicate whether to use the system repository 17536 an image shouldn't require any configured publishers 17537 notion of preferred publisher should be removed 17538 pkg should be able to merge system publisher info with locally configured publishers 17539 pkg should notify that users cannot modify system publishers in certain ways 17540 pkg publisher needs to be updated to include information about system publishers 17541 pkg will need a way to specify alternate system repository urls 17547 file repositories need to be proxied by the system repository 17594 pkg set-publisher in GZ should refresh sysdepo service 17604 converting an imageconfig object to a string causes an infinite loop 17847 pkg set-publisher shouldn't allow -P along with --search-* 17911 pkg image-create should allow an image to be created without a publisher 18200 need a manpage for the sysrepo service
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
     1
#!/usr/bin/python
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
     2
#
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
     3
# CDDL HEADER START
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
     4
#
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
     8
#
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    12
# and limitations under the License.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    13
#
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    19
#
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    20
# CDDL HEADER END
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    21
#
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    22
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    23
#
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2158
diff changeset
    24
# Copyright (c) 2010, 2011 Oracle and/or its affiliates. All rights reserved.
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    25
#
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    26
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    27
import pkg.client.api
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    28
import pkg.client.progress as progress
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    29
import pkg.lint.base as base
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    30
import pkg.lint.config
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    31
import pkg.fmri
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    32
from pkg.version import DotSequence, Version
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    33
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    34
import ConfigParser
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    35
import inspect
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    36
import logging
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    37
import os
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    38
import shutil
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    39
import sys
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    40
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    41
PKG_CLIENT_NAME = "pkglint"
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
    42
CLIENT_API_VERSION = 57
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    43
pkg.client.global_settings.client_name = PKG_CLIENT_NAME
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    44
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    45
class LintEngineException(Exception):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    46
        """An exception thrown when something fatal goes wrong with the engine.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    47
            """
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    48
        def __unicode__(self):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    49
                # To workaround python issues 6108 and 2517, this provides a
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    50
                # a standard wrapper for this class' exceptions so that they
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    51
                # have a chance of being stringified correctly.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    52
                return str(self)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    53
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    54
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    55
class LintEngineCache():
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    56
        """This class provides two caches for the LintEngine.  A cache of the
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    57
        latest packages for one or more ImageInterface objects intended to be
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    58
        seeded at startup, and a generic manifest cache"""
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    59
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    60
        def __init__(self, version_pattern, release=None):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    61
                self.latest_cache = {}
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    62
                self.misc_cache = {}
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    63
                self.logger = logging.getLogger("pkglint")
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    64
                self.seeded = False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    65
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    66
                # release is a build number, eg. 150
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    67
                # version_pattern used by the engine is a regexp, intended
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    68
                # to be used when searching for images, combined with the
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    69
                # release - eg. "*,5.11-0."
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    70
                #
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    71
                self.version_pattern = version_pattern
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    72
                self.release = release
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    73
                if self.release:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    74
                        combined = "%s%s" % \
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    75
                            (version_pattern.split(",")[1], release)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    76
                        try:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    77
                                self.branch = DotSequence(combined.split("-")[1])
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    78
                        except pkg.version.IllegalDotSequence:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    79
                                raise LintEngineException(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    80
                                    _("Invalid release string: %s") % self.release)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    81
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    82
        def seed_latest(self, api_inst, tracker, phase):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    83
                """Builds a cache of latest manifests for this api_inst, using
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    84
                the provided progress tracker, phase and release.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    85
                """
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    86
                search_type = pkg.client.api.ImageInterface.LIST_NEWEST
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    87
                pattern_list = ["*"]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    88
                self.seeded = True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    89
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    90
                # a dictionary of PkgFmri objects which we'll use to retrieve
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    91
                # manifests
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    92
                packages = {}
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    93
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    94
                # a dictionary of the latest packages for a given release
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    95
                self.latest_cache[api_inst] = {}
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    96
                # a dictionary of packages at other versions
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    97
                self.misc_cache[api_inst] = {}
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    98
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    99
                if not self.release:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   100
                    for item in api_inst.get_pkg_list(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   101
                        search_type, patterns=pattern_list, variants=True):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   102
                            pub_name, name, version = item[0]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   103
                            pub = api_inst.get_publisher(prefix=pub_name)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   104
                            fmri ="pkg://%s/%s@%s" % (pub, name, version)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   105
                            pfmri = pkg.fmri.PkgFmri(fmri)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   106
                            # index with just the pkg name, allowing us to use
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   107
                            # this cache when searching for dependencies
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   108
                            packages["pkg:/%s" % name] = pfmri
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   109
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   110
                else:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   111
                        # take a bit more time building up the latest version
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   112
                        # of all packages not greater than build_release
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   113
                        search_type = pkg.client.api.ImageInterface.LIST_ALL
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   114
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   115
                        for item in api_inst.get_pkg_list(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   116
                            search_type, variants=True):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   117
                                pub_name, name, version = item[0]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   118
                                pub = api_inst.get_publisher(prefix=pub_name)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   119
                                fmri ="pkg://%s/%s@%s" % (pub, name, version)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   120
                                # obtain just the build branch, e.g. from
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   121
                                # 0.5.11,5.11-0.111:20090508T235707Z, return
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   122
                                # 0.111
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   123
                                branch = Version(version, None).branch
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   124
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   125
                                pfmri = pkg.fmri.PkgFmri(fmri)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   126
                                key = "pkg:/%s" % name
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   127
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   128
                                if key not in packages and \
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   129
                                    branch <= self.branch:
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2158
diff changeset
   130
                                        packages[key] = pfmri
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   131
                                # get_pkg_list returns results sorted by
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   132
                                # publisher, then sorted by version. We may find
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   133
                                # another publisher that has a more recent
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   134
                                # package available, so we need to respect
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   135
                                # timestamps in that case.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   136
                                elif key in packages:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   137
                                        prev = packages[key]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   138
                                        if lint_fmri_successor(pfmri, prev,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   139
                                            ignore_timestamps=False) and \
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   140
                                            branch <= self.branch:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   141
                                                packages[key] = pfmri
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   142
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   143
                # now get the manifests
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   144
                tracker.index_set_goal(phase, len(packages))
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   145
                for item in packages:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   146
                        self.latest_cache[api_inst][item] = \
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   147
                            api_inst.get_manifest(packages[item])
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   148
                        tracker.index_add_progress()
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   149
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   150
        def gen_latest(self, api_inst, tracker, pattern):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   151
                """ A generator function to return the latest version of the
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   152
                packages matching the supplied pattern from the publishers set
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   153
                for api_inst"""
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   154
                if not self.seeded:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   155
                        raise LintException("Cache has not been seeded")
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   156
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   157
                if api_inst in self.latest_cache:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   158
                        for item in self.latest_cache[api_inst]:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   159
                                mf = self.latest_cache[api_inst][item]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   160
                                if pattern and pkg.fmri.glob_match(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   161
                                    str(mf.fmri), pattern):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   162
                                        tracker.index_add_progress()
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   163
                                        yield mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   164
                                elif not pattern:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   165
                                        tracker.index_add_progress()
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   166
                                        yield mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   167
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   168
        def get_latest(self, api_inst, pkg_name):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   169
                """ Return the package matching pkg_name from the publishers set
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   170
                for api_inst """
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   171
                if not self.seeded:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   172
                        raise LintEngineException("Cache has not been seeded")
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   173
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   174
                if api_inst in self.latest_cache:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   175
                        if pkg_name in self.latest_cache[api_inst]:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   176
                                return self.latest_cache[api_inst][pkg_name]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   177
                return None
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   178
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   179
        def count_latest(self, api_inst, pattern):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   180
                """Returns the number of manifests in the given api_inst cache
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   181
                that match the provided pattern. If pattern is None,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   182
                we return the length of the api_inst cache."""
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   183
                if not self.seeded:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   184
                        raise LintEngineException("Cache has not been seeded")
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   185
                if not pattern:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   186
                        return len(self.latest_cache[api_inst])
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   187
                count = 0
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   188
                for item in self.latest_cache[api_inst]:
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2158
diff changeset
   189
                        mf = self.latest_cache[api_inst][item]
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   190
                        if pkg.fmri.glob_match(str(mf.fmri), pattern):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   191
                                count = count + 1
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   192
                return count
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   193
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   194
        def add(self, api_inst, pkg_name, manifest):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   195
                """Adds a given manifest to the cache for a given api_inst"""
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   196
                # we don't update latest_cache, since that should have been
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   197
                # pre-seeded on startup.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   198
                self.misc_cache[api_inst][pkg_name] = manifest
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   199
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   200
        def get(self, api_inst, pkg_name):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   201
                """Retrieves a given pkg_name entry from the cache.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   202
                Can raise KeyError if the package isn't in the cache."""
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   203
                if not self.seeded:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   204
                        raise LintEngineException("Cache has not been seeded")
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   205
                if pkg_name in self.latest_cache[api_inst]:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   206
                        return self.latest_cache[api_inst][pkg_name]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   207
                else:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   208
                        return self.misc_cache[api_inst][pkg_name]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   209
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   210
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   211
class LintEngine(object):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   212
        """LintEngine is the main object used by pkglint to discover lint
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   213
        plugins, and execute lint checks on package manifests, retrieved
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   214
        from a repository or from local objects.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   215
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   216
        Lint plugins are written as subclasses of pkg.lint.base.Checker
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   217
        and are discovered once the module containing them has been listed
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   218
        in either the shipped pkglintrc file, a user-supplied version, or
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   219
        the pkg.lint.config.PkglintConfig defaults.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   220
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   221
        User-supplied manifests for linting are read directly as files
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   222
        provided on the command line.  For cross-checking against a
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   223
        reference repository, or linting the manifests in a repository, we
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   224
        create a reference or lint user-images in a provided cache location,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   225
        used to obtain manifests from those repositories.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   226
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   227
        Multiple repositories can be provided, however each must
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   228
        use a different publisher.prefix (as they are added as publishers
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   229
        to a single user image)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   230
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   231
        Our reference image is stored in
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   232
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   233
        <cache>/ref_image/
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   234
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   235
        The image for linting is stored in
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   236
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   237
        <cache>/lint_image/
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   238
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   239
        We can also lint pkg.manifest.Manifest objects, passed as the
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   240
        lint_manifests list to the setup(..) method.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   241
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   242
        The config object for the engine has the following keys:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   243
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   244
        'log_level' The minimum level at which to emit lint messages. Lint
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   245
        messages lower than this level are discarded.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   246
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   247
        By default, this is set to INFO. Log levels in order of least to most
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   248
        severe are: DEBUG, INFO, WARNING, ERROR, CRITICAL
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   249
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   250
        'do_pub_checks' Whether to perform checks which may  only  make  sense
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   251
        for published packages. Set to True by default.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   252
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   253
        'pkglint.ext.*' Multiple keys, specifying modules to load which contain
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   254
        subclasses of pkg.lint.base.Checker.  The value of this property should
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   255
        be fully specified python module name, assumed to be in $PYTHONPATH
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   256
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   257
        'pkglint.exclude' A space-separated list of fully-specified Python
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   258
        modules, classes or function names which should be omitted from the set
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   259
        of checks performed. eg.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   260
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   261
        'pkg.lint.opensolaris.ActionChecker' or
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   262
        'my.lint.module' or
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   263
        'my.lint.module.ManifestChecker.crosscheck_paths'
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   264
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   265
        'version.pattern' A version pattern, used when specifying a build number
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   266
        to lint against (-b). If not specified in the rcfile, this pattern is
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   267
        "*,5.11-0.", matching all components of the '5.11' build, with a branch
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   268
        prefix of '0.'
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   269
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   270
        'info_classification_path' A path the file used to check the values
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   271
        of info.classification attributes in manifests.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   272
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   273
        'use_progress_tracker' Whether to use progress tracking.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   274
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   275
        'ignore_different_publishers' Whether to ignore differences in publisher
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   276
        when comparing package FMRIs.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   277
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   278
        The engine has support for a "/* LINTED */"-like functionality,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   279
        omitting lint checks for actions or manifests that contain
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   280
        a pkg.linted attribute set to True."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   281
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   282
        def __init__(self, formatter, verbose=False, config_file=None,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   283
            use_tracker=None):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   284
                """Creates a lint engine a given pkg.lint.log.LogFormatter.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   285
                'verbose' overrides any log_level settings in the config file
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   286
                to DEBUG
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   287
                'config_file' specifies a path to a pkglintrc configuration file
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   288
                'use_tracker' overrides any pkglintrc settings to either
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   289
                explicitly enable or disable the use of a tracker, set to None,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   290
                we don't override the config file setting."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   291
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   292
                # the directory used to store our user-images.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   293
                self.basedir = None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   294
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   295
                # a pattern used to narrow searches in the lint image
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   296
                self.pattern = None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   297
                self.release = None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   298
                # a prefix for the pattern used to search for given releases
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   299
                self.version_pattern = "*,5.11-0."
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   300
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   301
                # lists of checker functions and excluded checker functions
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   302
                self.checkers = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   303
                self.excluded_checkers = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   304
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   305
                # A progress tracker, used during the lint run
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   306
                self.tracker = None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   307
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   308
                # set up our python logger
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   309
                self.logger = logging.getLogger("pkglint")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   310
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   311
                # the pkglint LogFormatters we are configured with
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   312
                self.logs = [formatter]
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   313
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   314
                # whether to run checks that may only be valid for published
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   315
                # manifests
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   316
                self.do_pub_checks = True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   317
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   318
                # whether to ignore publisher differences when comparing vers
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   319
                self.ignore_pubs = True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   320
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   321
                self.conf = self.load_config(config_file, verbose=verbose)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   322
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   323
                # overrides config_file entry
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   324
                if use_tracker is not None:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   325
                        self.use_tracker = use_tracker
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   326
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   327
                self.tracker_phase = 0
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   328
                self.in_setup = False
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   329
                formatter.tracker = self.get_tracker()
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   330
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   331
                self.ref_image = None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   332
                self.lint_image = None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   333
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   334
                self.lint_uris = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   335
                self.ref_uris = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   336
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   337
                # a reference to the pkg.client.api for our reference and lint
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   338
                # images
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   339
                self.ref_api_inst = None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   340
                self.lint_api_inst = None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   341
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   342
                # manifests presented to us for parsing on the command line
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   343
                self.lint_manifests = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   344
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   345
                self.mf_cache = None
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   346
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   347
        def _load_checker_module(self, name, config):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   348
                """Dynamically loads a given checker module, returning new
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   349
                instances of the checker classes the module declares,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   350
                assuming they haven't been excluded by the config object."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   351
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   352
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   353
                        self.logger.debug("Loading module %s" % name)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   354
                        __import__(name, None, None, [], -1)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   355
                        (checkers, excluded) = \
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   356
                            base.get_checkers(sys.modules[name], config)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   357
                        return (checkers, excluded)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   358
                except (KeyError, ImportError), err:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   359
                        raise base.LintException(err)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   360
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   361
        def _unique_checkers(self):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   362
                """Ensure that the engine has unique names for all of the loaded
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   363
                checks."""
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   364
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   365
                unique_names = set()
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   366
                for checker in self.checkers:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   367
                        if checker.name in unique_names:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   368
                                raise LintEngineException(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   369
                                    _("loading extensions: "
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   370
                                    "duplicate checker name %(name)s: "
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   371
                                    "%(class)s") %
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   372
                                    {"name": checker.name,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   373
                                    "class": checker})
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   374
                        unique_names.add(checker.name)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   375
                        unique_methods = set()
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   376
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   377
                        for method in checker.included_checks + \
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   378
                            checker.excluded_checks:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   379
                                mname = "%s.%s" % (method.im_class.__name__,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   380
                                    method.im_func.func_name)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   381
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   382
                                # identify the value of each pkglint_id argument
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   383
                                # for this method.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   384
                                arg_spec = inspect.getargspec(method)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   385
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   386
                                # arg_spec.args is a tuple of the method args,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   387
                                # populating the tuple with both arg values for
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   388
                                # non-keyword arguments, and keyword arg names
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   389
                                # for keyword args
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   390
                                c = len(arg_spec.args) - 1
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   391
                                i = arg_spec.args.index("pkglint_id")
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   392
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   393
                                if not arg_spec.defaults:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   394
                                        continue
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   395
                                # arg_spec.defaults are the default values for
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   396
                                # any keyword args, in order.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   397
                                name = arg_spec.defaults[c - i]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   398
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   399
                                if name in unique_methods:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   400
                                        raise LintEngineException(_(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   401
                                            "loading extension "
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   402
                                            "%(checker)s: duplicate pkglint_id "
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   403
                                            "%(name)s in %(method)s") %
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   404
                                            {"checker": checker.name,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   405
                                            "name": name,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   406
                                            "method": mname})
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   407
                                unique_methods.add(name)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   408
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   409
        def load_config(self, config, verbose=False):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   410
                """Loads configuration from supplied config file, allowing
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   411
                a verbosity override."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   412
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   413
                conf = pkg.lint.config.PkglintConfig(config_file=config).config
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   414
                excl = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   415
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   416
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   417
                        excl = conf.get("pkglint", "pkglint.exclude").split()
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   418
                except ConfigParser.NoOptionError:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   419
                        pass
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   420
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   421
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   422
                        self.version_pattern = conf.get("pkglint",
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   423
                            "version.pattern")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   424
                except ConfigParser.NoOptionError:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   425
                        pass
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   426
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   427
                for key, value in conf.items("pkglint"):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   428
                        if "pkglint.ext" in key:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   429
                                if value in excl:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   430
                                        # want to exclude everything from here
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   431
                                        (checkers, exclude) = \
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   432
                                            self._load_checker_module(value,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   433
                                            conf)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   434
                                        self.excluded_checkers.extend(checkers)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   435
                                        self.excluded_checkers.extend(exclude)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   436
                                        continue
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   437
                                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   438
                                        (checkers, exclude) = \
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   439
                                            self._load_checker_module(value,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   440
                                            conf)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   441
                                        self.checkers.extend(checkers)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   442
                                        self.excluded_checkers.extend(exclude)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   443
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   444
                                except base.LintException, err:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   445
                                        raise LintEngineException(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   446
                                            _("Error parsing config value for "
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   447
                                            "%(key)s: %(err)s") % locals())
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   448
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   449
                self._unique_checkers()
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   450
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   451
                if verbose:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   452
                        for lint_log in self.logs:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   453
                                lint_log.level = "DEBUG"
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   454
                else:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   455
                        for lint_log in self.logs:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   456
                                lint_log.level = conf.get("pkglint",
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   457
                                    "log_level")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   458
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   459
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   460
                        self.do_pub_checks = conf.getboolean("pkglint",
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   461
                            "do_pub_checks")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   462
                except ConfigParser.NoOptionError:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   463
                        pass
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   464
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   465
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   466
                        self.use_tracker = conf.get("pkglint",
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   467
                            "use_progress_tracker").lower() == "true"
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   468
                except ConfigParser.NoOptionError:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   469
                        pass
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   470
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   471
                try:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   472
                        self.ignore_pubs = conf.get("pkglint",
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   473
                            "ignore_different_publishers").lower() == "true"
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   474
                except ConfigParser.NoOptionError:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   475
                        pass
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   476
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   477
                return conf
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   478
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   479
        def setup(self, lint_manifests=[], ref_uris=[], lint_uris=[],
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   480
            cache=None, pattern=None, release=None):
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   481
                """Starts a pkglint session, creates our image, pulls manifests,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   482
                etc. from servers if necessary.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   483
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   484
                'cache' An area where we create images to access repos for both
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   485
                reference and linting purposes
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   486
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   487
                'lint_manifests' An array of paths to manifests for linting
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   488
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   489
                'ref_uris' A list of repositories which will be added to the
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   490
                image used as a reference for linting
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   491
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   492
                'lint_uris' A list of repositories which will be added to th
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   493
                image we want to lint
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   494
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   495
                'pattern' A regexp to match the packages we want to lint, if
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   496
                empty, we match everything.  Note that this is only applied when
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   497
                searching for packages to lint: we lint against all packages for
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   498
                a given release in the reference repository (if configured)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   499
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   500
                'release' A release value that narrows the set of packages we
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   501
                lint with.  This affects both the packages presented for linting
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   502
                as well as the packages in the repository we are linting
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   503
                against. If release if set to None, we lint with and against the
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   504
                latest available packages in the repositories."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   505
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   506
                self.ref_uris = ref_uris
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   507
                self.lint_uris = lint_uris
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   508
                self.lint_manifests = lint_manifests
2184
48031491a616 17603 pkglint messages should be deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2183
diff changeset
   509
                self.lint_manifests.sort()
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   510
                self.pattern = pattern
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   511
                self.release = release
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   512
                self.in_setup = True
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   513
                self.mf_cache = LintEngineCache(self.version_pattern,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   514
                    release=release)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   515
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   516
                if not cache and not lint_manifests:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   517
                        raise LintEngineException(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   518
                            _("Either a cache directory, or some local "
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   519
                            "manifest files must be provided."))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   520
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   521
                if not cache and (ref_uris or lint_uris):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   522
                        raise LintEngineException(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   523
                            _("A cache directory must be provided if using "
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   524
                            "reference or lint repositories."))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   525
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   526
                if cache:
2090
d84a7b3cafa3 17061 pkglint -L output could be improved
Tim Foster <tim.s.foster@oracle.com>
parents: 2089
diff changeset
   527
                        self.basedir = os.path.abspath(cache)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   528
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   529
                        try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   530
                                self.lint_image = os.path.join(self.basedir,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   531
                                    "lint_image")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   532
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   533
                                if os.path.exists(self.lint_image):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   534
                                        self.lint_api_inst = self._get_image(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   535
                                            self.lint_image)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   536
                                        if self.lint_api_inst and lint_uris:
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   537
                                                self.tracker.flush()
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   538
                                                self.logger.info(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   539
                                                    _("Ignoring -l option, "
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   540
                                                    "existing image found."))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   541
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   542
                                # only create a new image if we've not been
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   543
                                # able to load one, and we have been given a uri
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   544
                                if not self.lint_api_inst and lint_uris:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   545
                                        self.lint_api_inst = self._create_image(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   546
                                            self.lint_image, self.lint_uris)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   547
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   548
                                if self.lint_api_inst:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   549
                                        self.tracker_phase = \
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   550
                                            self.tracker_phase + 1
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   551
                                        self.mf_cache.seed_latest(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   552
                                            self.lint_api_inst,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   553
                                            self.get_tracker(),
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   554
                                            self.tracker_phase)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   555
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   556
                        except LintEngineException, err:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   557
                                raise LintEngineException(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   558
                                    _("Unable to create lint image: %s") %
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   559
                                    str(err))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   560
                        try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   561
                                self.ref_image = os.path.join(self.basedir,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   562
                                    "ref_image")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   563
                                if os.path.exists(self.ref_image):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   564
                                        self.ref_api_inst = self._get_image(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   565
                                            self.ref_image)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   566
                                        if self.ref_api_inst and ref_uris:
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   567
                                                self.tracker.flush()
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   568
                                                self.logger.info(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   569
                                                    _("Ignoring -r option, "
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   570
                                                    "existing image found."))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   571
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   572
                                # only create a new image if we've not been
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   573
                                # able to load one, and we have been given a uri
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   574
                                if not self.ref_api_inst and ref_uris:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   575
                                        if not (self.lint_api_inst or \
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   576
                                            lint_manifests):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   577
                                                raise LintEngineException(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   578
                                                    "No lint image or manifests"
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   579
                                                    " provided.")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   580
                                        self.ref_api_inst = self._create_image(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   581
                                            self.ref_image, self.ref_uris)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   582
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   583
                                if self.ref_api_inst:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   584
                                        self.tracker_phase = self.tracker_phase + 1
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   585
                                        self.mf_cache.seed_latest(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   586
                                            self.ref_api_inst,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   587
                                            self.get_tracker(),
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   588
                                            self.tracker_phase)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   589
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   590
                        except LintEngineException, err:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   591
                                raise LintEngineException(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   592
                                    _("Unable to create reference image: %s") %
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   593
                                    str(err))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   594
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   595
                        if not (self.ref_api_inst or self.lint_api_inst):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   596
                                raise LintEngineException(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   597
                                    _("Unable to access any pkglint images "
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   598
                                   "under %s") % cache)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   599
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   600
                for checker in self.checkers:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   601
                        checker.startup(self)
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   602
                self.get_tracker().index_done()
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   603
                self.in_setup = False
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   604
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   605
        def execute(self):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   606
                """Run the checks that have been configured for this engine.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   607
                We run checks on all lint_manifests as well as all manifests
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   608
                in a configured lint repository that match both our pattern
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   609
                and release (if they have been configured)."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   610
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   611
                manifest_checks = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   612
                action_checks = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   613
                count = 0
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   614
                for checker in self.checkers:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   615
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   616
                        count = count + len(checker.included_checks)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   617
                        if isinstance(checker, base.ManifestChecker):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   618
                                manifest_checks.append(checker)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   619
                        elif isinstance(checker, base.ActionChecker):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   620
                                action_checks.append(checker)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   621
                        else:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   622
                                raise LintEngineException(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   623
                                    _("%s does not subclass a known "
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   624
                                    "Checker subclass intended for use by "
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   625
                                    "pkglint extensions") % str(checker))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   626
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   627
                self.tracker.flush()
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   628
                self.logger.debug(_("Total number of checks found: %s") % count)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   629
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   630
                for mf in self.lint_manifests:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   631
                        self._check_manifest(mf, manifest_checks,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   632
                            action_checks)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   633
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   634
                for manifest in self.gen_manifests(self.lint_api_inst,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   635
                    pattern=self.pattern, release=self.release):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   636
                        self._check_manifest(manifest, manifest_checks,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   637
                            action_checks)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   638
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   639
        def gen_manifests(self, api_inst, pattern=None, release=None):
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   640
                """A generator to return package manifests for a given image.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   641
                With a given pattern, it narrows the set of manifests
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   642
                returned to match that pattern.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   643
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   644
                With the given 'release' number, it searches for manifests for
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   645
                that release using "<pattern>@<version.pattern><release>"
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   646
                where <version.pattern> is set in pkglintrc and
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   647
                <pattern> and <release> are the keyword arguments to this
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   648
                method. """
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   649
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   650
                if not api_inst:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   651
                        return
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   652
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   653
                tracker = self.get_tracker()
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   654
                if self.in_setup:
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   655
                        self.tracker_phase = \
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   656
                            self.tracker_phase + 1
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   657
                tracker.index_set_goal(self.tracker_phase,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   658
                    self.mf_cache.count_latest(api_inst, pattern))
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   659
                for m in self.mf_cache.gen_latest(api_inst,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   660
                    tracker, pattern):
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2158
diff changeset
   661
                        yield m
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   662
                return
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   663
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   664
        EXACT = 0
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   665
        LATEST_SUCCESSOR = 1
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   666
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   667
        def get_manifest(self, pkg_name, search_type=EXACT):
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   668
                """Returns the first available manifest for a given package
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   669
                name, searching hierarchically in the lint manifests,
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   670
                the lint_repo or the ref_repo for that single package.
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   671
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   672
                By default, we search for an exact match on the provided
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   673
                pkg_name, throwing a LintEngineException if we get more than
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   674
                one match for the supplied pkg_name.
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   675
                When search_type is LintEngine.LATEST_SUCCESSOR, we return the
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   676
                most recent successor of the provided package, using the
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   677
                lint_fmri_successor() method defined in this module.
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   678
                """
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   679
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   680
                if not pkg_name.startswith("pkg:/"):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   681
                        pkg_name = "pkg:/%s" % pkg_name
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   682
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   683
                def build_fmri(pkg_name):
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   684
                        """builds a pkg.fmri.PkgFmri from a string."""
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   685
                        try:
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   686
                                fmri = pkg.fmri.PkgFmri(pkg_name)
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   687
                                return fmri
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   688
                        except pkg.fmri.IllegalFmri:
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   689
                                try:
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   690
                                        # FMRIs listed as dependencies often
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   691
                                        # omit build_release, use a dummy one
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   692
                                        # for now
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   693
                                        fmri = pkg.fmri.PkgFmri(pkg_name,
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   694
                                            build_release="5.11")
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   695
                                        return fmri
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   696
                                except:
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   697
                                        msg = _("unable to construct fmri from %s") % \
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   698
                                            pkg_name
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   699
                                        raise base.LintException(msg)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   700
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   701
                def get_fmri(api_inst, pkg_name):
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   702
                        """Retrieve an fmri string that matches pkg_name."""
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   703
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   704
                        if "*" in pkg_name or "?" in pkg_name:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   705
                                raise base.LintException(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   706
                                    _("invalid pkg name %s") % pkg_name)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   707
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   708
                        if "@" not in pkg_name and self.release:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   709
                                pkg_name = "%s@%s%s" % \
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   710
                                    (pkg_name, self.version_pattern,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   711
                                    self.release)
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   712
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   713
                        fmris = []
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   714
                        for item in api_inst.get_pkg_list(
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   715
                            pkg.client.api.ImageInterface.LIST_ALL,
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   716
                            patterns=[pkg_name], variants=True,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   717
                            return_fmris=True):
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   718
                                fmris.append(item[0])
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   719
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   720
                        fmri_list = []
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   721
                        for item in fmris:
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   722
                                fmri_list.append(item.get_fmri())
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   723
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   724
                        if len(fmri_list) == 1:
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   725
                                return fmri_list[0]
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   726
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   727
                        elif len(fmri_list) == 0:
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   728
                                return None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   729
                        else:
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   730
                                # we expected to get only 1 hit, so
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   731
                                # something has gone wrong
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   732
                                raise LintEngineException(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   733
                                    _("get_fmri(pattern) %(pattern)s "
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   734
                                    "matched %(count)s packages: "
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   735
                                    "%(pkgs)s") %
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   736
                                    {"pattern": pkg_name,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   737
                                    "count": len(fmri_list),
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   738
                                    "pkgs": " ".join(fmri_list)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   739
                                    })
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   740
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   741
                def mf_from_image(api_inst, pkg_name, search_type):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   742
                        """Fetch a manifest for the given package name using
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   743
                        the ImageInterface provided."""
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   744
                        if not api_inst:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   745
                                return None
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   746
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   747
                        search_fmri = build_fmri(pkg_name)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   748
                        if search_type == self.LATEST_SUCCESSOR:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   749
                                # we want to normalize the pkg_name, removing
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   750
                                # the publisher, if any.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   751
                                name = "pkg:/%s" % search_fmri.get_name()
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   752
                                mf = self.mf_cache.get_latest(api_inst, name)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   753
                                if not mf:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   754
                                        return
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   755
                                # double-check the publishers match, since we
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   756
                                # searched for just a package name
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   757
                                if search_fmri.publisher:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   758
                                        if search_fmri.publisher == mf.fmri.publisher:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   759
                                                return mf
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   760
                                else:
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   761
                                        return mf
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   762
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   763
                        # We've either not found a matching publisher, or we're
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   764
                        # doing an exact search.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   765
                        try:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   766
                                mf = self.mf_cache.get(api_inst, pkg_name)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   767
                                return mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   768
                        except KeyError:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   769
                                mf = None
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   770
                                fmri = get_fmri(api_inst, pkg_name)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   771
                                if fmri:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   772
                                        mf = api_inst.get_manifest(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   773
                                            pkg.fmri.PkgFmri(fmri))
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   774
                                self.mf_cache.add(api_inst, pkg_name, mf)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   775
                                return mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   776
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   777
                # search hierarchically for the given package name in our
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   778
                # local manifests, our lint image, or our reference image
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   779
                # and return a manifest for that package.
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   780
                for mf in self.lint_manifests:
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   781
                        search_fmri = build_fmri(pkg_name)
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   782
                        if search_type == self.LATEST_SUCCESSOR and \
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   783
                            lint_fmri_successor(mf.fmri, search_fmri,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   784
                                ignore_pubs=self.ignore_pubs):
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   785
                                return mf
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   786
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   787
                        if str(mf.fmri) == pkg_name:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   788
                                return mf
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   789
                        if mf.fmri.get_name() == pkg_name:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   790
                                return mf
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   791
                mf = mf_from_image(self.lint_api_inst, pkg_name, search_type)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   792
                if mf:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   793
                        return mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   794
                # fallback to our reference api, returning None if that's
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   795
                # what we were given.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   796
                return mf_from_image(self.ref_api_inst, pkg_name, search_type)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   797
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   798
        def _get_image(self, image_dir):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   799
                """Return a pkg.client.api.ImageInterface for the provided
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   800
                image directory."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   801
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   802
                cdir = os.getcwd()
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   803
                tracker = self.get_tracker()
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   804
                api_inst = None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   805
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   806
                        api_inst = pkg.client.api.ImageInterface(
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   807
                            image_dir, CLIENT_API_VERSION,
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   808
                            tracker, None, PKG_CLIENT_NAME)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   809
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   810
                        if api_inst.root != image_dir:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   811
                                api_inst = None
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   812
                        else:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   813
                                # given that pkglint is expected to be used
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   814
                                # during manifest development, we always want
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   815
                                # to refresh now, rather than waiting for some
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   816
                                # update interval
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   817
                                api_inst.refresh(immediate=True)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   818
                except Exception, err:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   819
                        raise LintEngineException(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   820
                            _("Unable to get image at %(dir)s: %(reason)s") %
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   821
                            {"dir": image_dir,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   822
                            "reason": str(err)})
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   823
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   824
                # restore the current directory, which ImageInterace had changed
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   825
                os.chdir(cdir)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   826
                return api_inst
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   827
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   828
        def _create_image(self,  image_dir, repo_uris):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   829
                """Create image in the given image directory. For now, only
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   830
                a single publisher is supported per image."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   831
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   832
                if len(repo_uris) != 1:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   833
                        raise LintEngineException(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   834
                            _("pkglint only supports a single publisher "
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   835
                            "per image."))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   836
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   837
                tracker = self.get_tracker()
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   838
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   839
                is_zone = False
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   840
                refresh_allowed = True
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   841
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   842
                self.tracker.flush()
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   843
                self.logger.debug(_("Creating image at %s") % image_dir)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   844
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   845
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   846
                        api_inst = pkg.client.api.image_create(
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   847
                            PKG_CLIENT_NAME, CLIENT_API_VERSION, image_dir,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   848
                            pkg.client.api.IMG_TYPE_USER, is_zone,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   849
                            facets=pkg.facet.Facets(), force=False,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   850
                            progtrack=tracker, refresh_allowed=refresh_allowed,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   851
                            repo_uri=repo_uris[0])
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   852
                except (pkg.client.api_errors.ApiException, OSError, IOError), err:
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   853
                        raise LintEngineException(err)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   854
                return api_inst
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   855
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   856
        def _check_manifest(self, manifest, manifest_checks, action_checks):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   857
                """Check a given manifest."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   858
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   859
                if "pkg.linted" in manifest and \
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   860
                    manifest["pkg.linted"].lower() == "true":
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   861
                        self.info("Not checking linted manifest %s" %
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   862
                            manifest.fmri, msgid="pkglint001.1")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   863
                        return
2090
d84a7b3cafa3 17061 pkglint -L output could be improved
Tim Foster <tim.s.foster@oracle.com>
parents: 2089
diff changeset
   864
d84a7b3cafa3 17061 pkglint -L output could be improved
Tim Foster <tim.s.foster@oracle.com>
parents: 2089
diff changeset
   865
                self.debug(_("Checking %s") % manifest.fmri, "pkglint001.3")
d84a7b3cafa3 17061 pkglint -L output could be improved
Tim Foster <tim.s.foster@oracle.com>
parents: 2089
diff changeset
   866
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   867
                for checker in manifest_checks:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   868
                        try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   869
                                checker.check(manifest, self)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   870
                        except base.LintException, err:
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   871
                                self.error(err, msgid="lint.error")
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   872
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   873
                if action_checks:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   874
                        for action in manifest.gen_actions():
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   875
                                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   876
                                        self._check_action(action, manifest,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   877
                                            action_checks)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   878
                                except base.LintException, err:
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   879
                                        self.error(err, msgid="lint.error")
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   880
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   881
        def _check_action(self, action, manifest, action_checks):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   882
                if "pkg.linted" in action.attrs and \
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   883
                    action.attrs["pkg.linted"].lower() == "true":
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   884
                        self.info("Not checking linted action %s" %
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   885
                            str(action), msgid="pkglint001.2")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   886
                        return
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   887
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   888
                for checker in action_checks:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   889
                        try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   890
                                checker.check(action, manifest, self)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   891
                        except base.LintException, err:
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   892
                                self.error(err, msgid="lint.error")
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   893
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   894
        # convenience methods to log lint messages to all loggers
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   895
        # configured for this engine
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   896
        def debug(self, message, msgid=None):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   897
                for log in self.logs:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   898
                        log.debug(message, msgid=msgid)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   899
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   900
        def info(self, message, msgid=None):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   901
                for log in self.logs:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   902
                        log.info(message, msgid=msgid)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   903
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   904
        def warning(self, message, msgid=None):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   905
                for log in self.logs:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   906
                        log.warning(message, msgid=msgid)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   907
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   908
        def error(self, message, msgid=None,):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   909
                for log in self.logs:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   910
                        log.error(message, msgid=msgid)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   911
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   912
        def critical(self, message, msgid=None):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   913
                for log in self.logs:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   914
                        log.critical(message, msgid=msgid)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   915
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   916
        def teardown(self, clear_cache=False):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   917
                """Ends a pkglint session.
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   918
                clear_cache    False by default, True causes the cache to be
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   919
                               destroyed."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   920
                for checker in self.checkers:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   921
                        try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   922
                                checker.shutdown(self)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   923
                        except base.LintException, err:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   924
                                self.error(err)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   925
                self.checkers = []
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   926
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   927
                # Reset the API object before destroying it; because it does a
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   928
                # chdir(), we need to save and restore our cwd.
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   929
                cwd = os.getcwd()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   930
                if self.lint_api_inst:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   931
                        self.lint_api_inst.reset()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   932
                os.chdir(cwd)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   933
                self.lint_api_inst = None
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   934
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   935
                if clear_cache:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   936
                        shutil.rmtree(self.basedir)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   937
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   938
        def get_tracker(self):
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   939
                """Creates a ProgressTracker if we don't already have one,
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   940
                otherwise resetting our current tracker and returning it"""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   941
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   942
                if self.tracker and self.in_setup:
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   943
                        return self.tracker
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   944
                if self.tracker:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   945
                        self.tracker.reset()
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   946
                        return self.tracker
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   947
                if not self.use_tracker:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   948
                        self.tracker = progress.QuietProgressTracker()
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   949
                else:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   950
                        try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   951
                                self.tracker = progress.FancyUNIXProgressTracker()
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   952
                        except progress.ProgressTrackerException:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   953
                                self.tracker = progress.CommandLineProgressTracker()
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   954
                return self.tracker
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   955
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   956
        def follow_renames(self, pkg_name, target=None, old_mfs=[],
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   957
            warn_on_obsolete=False):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   958
                """Given a package name, and an optional target pfmri that we
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   959
                expect to be ultimately renamed to, follow package renames from
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   960
                pkg_name, looking for the package we expect to be at the end of
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   961
                the chain.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   962
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   963
                If there was a break in the renaming chain, we return None.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   964
                old_mfs, if passed, should be a list of manifests that were
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   965
                sources of this rename.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   966
                """
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   967
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   968
                mf = self.get_manifest(pkg_name,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   969
                    search_type=self.LATEST_SUCCESSOR)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   970
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   971
                if not mf:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   972
                        return None
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   973
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   974
                if warn_on_obsolete and "pkg.obsolete" in mf:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   975
                        raise base.LintException(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   976
                            _("obsolete package: %s") % mf.fmri)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   977
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   978
                # if we're trying to rename to a package in our history,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   979
                # we should complain
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   980
                for old_mf in old_mfs:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   981
                        if old_mf.fmri.get_name() == mf.fmri.get_name():
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   982
                                old_mfs.append(mf)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   983
                                raise base.LintException(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   984
                                    _("loop detected in rename: %s") %
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   985
                                    " -> ".join(str(s.fmri) for s in old_mfs))
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   986
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   987
                if "pkg.renamed" in mf and \
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   988
                    mf["pkg.renamed"].lower() == "true":
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   989
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   990
                        old_mfs.append(mf)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   991
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   992
                        for dep in mf.gen_actions_by_type("depend"):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   993
                                # disregard dependencies on incorporations
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   994
                                if "incorporation" in dep.attrs["fmri"]:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   995
                                        continue
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   996
                                follow = dep.attrs["fmri"]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   997
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   998
                                # the engine's cache lookup doesn't include
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   999
                                # versions, so remove those and lookup the
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1000
                                # latest available version of this dependency
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1001
                                if "@" in follow:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1002
                                        follow = follow.split("@")[0]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1003
                                mf = self.follow_renames(follow,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1004
                                    target=target, old_mfs=old_mfs,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1005
                                    warn_on_obsolete=warn_on_obsolete)
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1006
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1007
                                # we can stop looking if we've found a package
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1008
                                # of which our target is a successor
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1009
                                if target and mf and \
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1010
                                    lint_fmri_successor(target, mf.fmri,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1011
                                        ignore_pubs=self.ignore_pubs):
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1012
                                        return mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1013
                return mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1014
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1015
def lint_fmri_successor(new, old, ignore_pubs=True, ignore_timestamps=True):
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1016
        """Given two FMRIs, determine if new_fmri is a successor of old_fmri.
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1017
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1018
        This differs from pkg.fmri.is_successor() in that it treats un-versioned
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1019
        FMRIs as being newer than versioned FMRIs of the same package name,
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1020
        and un-timestamped packages as being newer than versioned FMRIs of the
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1021
        same package name and version.
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2158
diff changeset
  1022
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1023
        For published packages, where the version and pkg names are identical,
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1024
        but the publisher differs, it also treats the new package as being a
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1025
        successor of the old.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1026
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1027
        If ignore_pubs is set, any differences in publishers between the
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1028
        provided FMRIs are ignored.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1029
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1030
        if ignore_timestamps is set, timestamps are not used as a basis for
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1031
        comparison between new and old FMRIs.
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1032
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1033
        We use this when looking for dependencies, or when comparing
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1034
        FMRIs presented in manifests for linting against those present in an
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1035
        existing repository (where, eg. a new timestamp would be supplied to a
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1036
        package during the import process and the timestamp would not
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1037
        necessarily be in the manifest file presented for linting)
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1038
        """
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1039
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1040
        if not ignore_pubs and new.publisher != old.publisher:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1041
                return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1042
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1043
        new_name = new.get_name()
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1044
        old_name = old.get_name()
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1045
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1046
        if new_name != old_name:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1047
                return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1048
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1049
        if not new.has_version():
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1050
                return True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1051
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1052
        # compare everything except the timestamp
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1053
        if new.has_version() and old.has_version():
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1054
                if new.version.release > old.version.release:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1055
                        return True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1056
                if new.version.release < old.version.release:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1057
                        return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1058
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1059
                if new.version.branch > old.version.branch:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1060
                        return True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1061
                if new.version.branch < old.version.branch:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1062
                        return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1063
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1064
                if new.version.build_release > old.version.build_release:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1065
                        return True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1066
                if new.version.build_release < old.version.build_release:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1067
                        return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1068
                if not ignore_timestamps:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1069
                        new_ts = new.version.get_timestamp()
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1070
                        old_ts = old.version.get_timestamp()
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1071
                        if new_ts > old_ts:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1072
                                return True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1073
                        if new_ts < old_ts:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1074
                                return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1075
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1076
        # everything is equal, or old has no version and we'll favour new
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1077
        return True