src/modules/lint/engine.py
author thejaswini.k@oracle.com
Fri, 18 Apr 2014 10:14:06 +0530
branchs11-update
changeset 3063 bbaaf1579de3
parent 3048 2aecfba95fe8
child 3172 243877a6f4b3
child 3190 ebc9455aaf57
permissions -rw-r--r--
15744850 no actuators are run when pkg manipulates a booted NGZ image from the GZ 17457046 pkg should display list of new / modified editable files for operation 18399970 file action should ignore preserve attribute for elf files 18414661 plan summary output should have more whitespace 18477216 ImagePlan.plan_desc doesn't include all package changes 17478601 provide a pkg(5) private module to compute SHA512/256 15615267 ability to require updates based on complete content 16273726 https support for svc:/application/pkg/depot
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
#
3048
2aecfba95fe8 16986557 prefixes should be omitted from output of facet and variant
saurabh.vyas@oracle.com
parents: 2910
diff changeset
    24
# Copyright (c) 2010, 2014, 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
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
    32
from pkg.client.api_errors import ApiException
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    33
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
    34
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    35
import ConfigParser
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
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    40
import urllib2
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    41
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    42
PKG_CLIENT_NAME = "pkglint"
3063
bbaaf1579de3 15744850 no actuators are run when pkg manipulates a booted NGZ image from the GZ
thejaswini.k@oracle.com
parents: 3048
diff changeset
    43
CLIENT_API_VERSION = 79
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    44
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
    45
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    46
class LintEngineException(Exception):
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    47
        """An exception thrown when something fatal goes wrong with the engine,
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    48
        such that linting can no longer continue."""
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    49
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    50
        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
    51
                # 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
    52
                # 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
    53
                # 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
    54
                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
    55
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    56
class LintEngineSetupException(LintEngineException):
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    57
        """An exception thrown when the engine failed to complete its setup."""
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    58
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    59
        def __unicode__(self):
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    60
                # To workaround python issues 6108 and 2517, this provides a
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    61
                # a standard wrapper for this class' exceptions so that they
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    62
                # have a chance of being stringified correctly.
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    63
                return str(self)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
    64
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    65
class LintEngineCache():
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    66
        """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
    67
        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
    68
        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
    69
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    70
        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
    71
                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
    72
                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
    73
                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
    74
                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
    75
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    76
                # 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
    77
                # 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
    78
                # 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
    79
                # 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
    80
                #
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    81
                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
    82
                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
    83
                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
    84
                        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
    85
                            (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
    86
                        try:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
    87
                                self.branch = DotSequence(
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
    88
                                    combined.split("-")[1])
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    89
                        except pkg.version.IllegalDotSequence:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
    90
                                raise LintEngineSetupException(
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
    91
                                    _("Invalid release string: %s") %
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
    92
                                    self.release)
2147
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
        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
    95
                """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
    96
                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
    97
                """
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
    98
                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
    99
                pattern_list = ["*"]
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   100
                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
   101
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   102
                # 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
   103
                # manifests
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   104
                packages = {}
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   105
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   106
                # 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
   107
                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
   108
                # 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
   109
                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
   110
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   111
                if not self.release:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   112
                        for item in api_inst.get_pkg_list(
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   113
                            search_type, patterns=pattern_list, variants=True):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   114
                                pub_name, name, version = item[0]
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   115
                                pub = api_inst.get_publisher(prefix=pub_name)
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   116
                                fmri ="pkg://%s/%s@%s" % (pub, name, version)
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   117
                                pfmri = pkg.fmri.PkgFmri(fmri)
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   118
                                # index with just the pkg name, allowing us to
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   119
                                # use this cache when searching for dependencies
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   120
                                packages["pkg:/%s" % name] = pfmri
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   121
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   122
                else:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   123
                        # 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
   124
                        # 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
   125
                        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
   126
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   127
                        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
   128
                            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
   129
                                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
   130
                                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
   131
                                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
   132
                                # 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
   133
                                # 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
   134
                                # 0.111
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   135
                                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
   136
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   137
                                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
   138
                                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
   139
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   140
                                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
   141
                                    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
   142
                                        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
   143
                                # 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
   144
                                # 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
   145
                                # 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
   146
                                # 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
   147
                                # 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
   148
                                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
   149
                                        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
   150
                                        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
   151
                                            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
   152
                                            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
   153
                                                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
   154
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   155
                # now get the manifests
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   156
                tracker.manifest_fetch_start(len(packages))
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   157
                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
   158
                        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
   159
                            api_inst.get_manifest(packages[item])
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   160
                        tracker.manifest_fetch_progress(completion=True)
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   161
                tracker.manifest_fetch_done()
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   162
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   163
        def gen_latest(self, api_inst, pattern):
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   164
                """ 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
   165
                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
   166
                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
   167
                if not self.seeded:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   168
                        raise LintEngineException("Cache has not been seeded")
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   169
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   170
                if api_inst in self.latest_cache:
2383
cfc3e2182a1d 18400 pkglint output is still not deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2382
diff changeset
   171
                        for item in sorted(self.latest_cache[api_inst]):
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   172
                                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
   173
                                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
   174
                                    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
   175
                                        yield mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   176
                                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
   177
                                        yield mf
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 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
   180
                """ 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
   181
                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
   182
                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
   183
                        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
   184
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   185
                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
   186
                        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
   187
                                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
   188
                return None
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   189
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   190
        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
   191
                """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
   192
                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
   193
                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
   194
                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
   195
                        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
   196
                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
   197
                        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
   198
                count = 0
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   199
                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
   200
                        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
   201
                        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
   202
                                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
   203
                return count
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   204
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   205
        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
   206
                """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
   207
                # 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
   208
                # 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
   209
                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
   210
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   211
        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
   212
                """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
   213
                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
   214
                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
   215
                        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
   216
                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
   217
                        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
   218
                else:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   219
                        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
   220
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   221
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   222
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
   223
        """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
   224
        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
   225
        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
   226
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   227
        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
   228
        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
   229
        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
   230
        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
   231
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   232
        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
   233
        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
   234
        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
   235
        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
   236
        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
   237
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   238
        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
   239
        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
   240
        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
   241
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   242
        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
   243
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   244
        <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
   245
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   246
        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
   247
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   248
        <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
   249
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   250
        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
   251
        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
   252
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   253
        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
   254
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   255
        '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
   256
        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
   257
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   258
        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
   259
        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
   260
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   261
        '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
   262
        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
   263
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   264
        '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
   265
        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
   266
        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
   267
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   268
        '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
   269
        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
   270
        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
   271
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   272
        '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
   273
        '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
   274
        '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
   275
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   276
        '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
   277
        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
   278
        "*,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
   279
        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
   280
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   281
        '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
   282
        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
   283
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   284
        '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
   285
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   286
        '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
   287
        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
   288
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   289
        The engine has support for a "/* LINTED */"-like functionality,
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   290
        see the comment for <LintEngine>.execute()"""
2046
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
        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
   293
            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
   294
                """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
   295
                '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
   296
                to DEBUG
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   297
                '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
   298
                '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
   299
                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
   300
                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
   301
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   302
                # 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
   303
                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
   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 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
   306
                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
   307
                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
   308
                # 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
   309
                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
   310
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   311
                # 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
   312
                self.checkers = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   313
                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
   314
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   315
                # 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
   316
                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
   317
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   318
                # 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
   319
                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
   320
2537
9dd463d721f3 18807 pkglint should use a default build version for pkg.fmri if it's not present
Tim Foster <tim.s.foster@oracle.com>
parents: 2524
diff changeset
   321
                formatter.engine = self
9dd463d721f3 18807 pkglint should use a default build version for pkg.fmri if it's not present
Tim Foster <tim.s.foster@oracle.com>
parents: 2524
diff changeset
   322
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   323
                # 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
   324
                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
   325
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   326
                # 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
   327
                # manifests
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   328
                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
   329
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   330
                # 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
   331
                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
   332
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   333
                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
   334
                # 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
   335
                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
   336
                        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
   337
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   338
                self.tracker_phase = 0
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   339
                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
   340
                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
   341
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   342
                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
   343
                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
   344
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   345
                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
   346
                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
   347
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   348
                # 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
   349
                # images
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   350
                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
   351
                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
   352
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   353
                # 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
   354
                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
   355
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   356
                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
   357
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   358
        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
   359
                """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
   360
                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
   361
                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
   362
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   363
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   364
                        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
   365
                        __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
   366
                        (checkers, excluded) = \
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   367
                            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
   368
                        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
   369
                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
   370
                        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
   371
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   372
        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
   373
                """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
   374
                checks."""
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   375
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   376
                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
   377
                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
   378
                        if checker.name in unique_names:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   379
                                raise LintEngineSetupException(
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   380
                                    _("loading extensions: "
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   381
                                    "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
   382
                                    "%(class)s") %
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   383
                                    {"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
   384
                                    "class": checker})
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   385
                        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
   386
                        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
   387
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   388
                        for method, pkglint_id in checker.included_checks + \
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   389
                            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
   390
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   391
                                if pkglint_id in unique_methods:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   392
                                        raise LintEngineSetupException(_(
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   393
                                            "loading extension "
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   394
                                            "%(checker)s: duplicate pkglint_id "
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   395
                                            "%(pkglint_id)s in %(method)s") %
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   396
                                            {"checker": checker.name,
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   397
                                            "pkglint_id": pkglint_id,
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   398
                                            "method": method})
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   399
                                unique_methods.add(pkglint_id)
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   400
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   401
        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
   402
                """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
   403
                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
   404
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   405
                try:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   406
                        conf = pkg.lint.config.PkglintConfig(
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   407
                            config_file=config).config
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   408
                except (pkg.lint.config.PkglintConfigException), err:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   409
                        raise LintEngineSetupException(err)
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   410
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   411
                excl = []
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
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   414
                        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
   415
                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
   416
                        pass
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   417
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   418
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   419
                        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
   420
                            "version.pattern")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   421
                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
   422
                        pass
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   423
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   424
                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
   425
                        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
   426
                                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
   427
                                        # 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
   428
                                        (checkers, exclude) = \
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   429
                                            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
   430
                                            conf)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   431
                                        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
   432
                                        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
   433
                                        continue
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   434
                                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   435
                                        (checkers, exclude) = \
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   436
                                            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
   437
                                            conf)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   438
                                        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
   439
                                        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
   440
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   441
                                except base.LintException, err:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   442
                                        raise LintEngineSetupException(
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   443
                                            _("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
   444
                                            "%(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
   445
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   446
                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
   447
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   448
                if verbose:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   449
                        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
   450
                                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
   451
                else:
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 = 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
   454
                                    "log_level")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   455
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   456
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   457
                        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
   458
                            "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
   459
                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
   460
                        pass
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   461
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   462
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   463
                        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
   464
                            "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
   465
                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
   466
                        pass
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   467
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   468
                try:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   469
                        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
   470
                            "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
   471
                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
   472
                        pass
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   473
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   474
                return conf
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   475
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   476
        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
   477
            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
   478
                """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
   479
                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
   480
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   481
                '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
   482
                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
   483
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   484
                '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
   485
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   486
                '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
   487
                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
   488
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   489
                '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
   490
                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
   491
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   492
                '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
   493
                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
   494
                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
   495
                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
   496
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   497
                '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
   498
                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
   499
                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
   500
                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
   501
                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
   502
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   503
                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
   504
                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
   505
                self.lint_manifests = lint_manifests
2383
cfc3e2182a1d 18400 pkglint output is still not deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2382
diff changeset
   506
                self.lint_manifests.sort(key=_manifest_sort_key)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   507
                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
   508
                self.release = release
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   509
                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
   510
                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
   511
                    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
   512
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   513
                if not cache and not lint_manifests:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   514
                        raise LintEngineSetupException(
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   515
                            _("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
   516
                            "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
   517
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   518
                if not cache and (ref_uris or lint_uris):
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   519
                        raise LintEngineSetupException(
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   520
                            _("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
   521
                            "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
   522
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   523
                if cache:
2090
d84a7b3cafa3 17061 pkglint -L output could be improved
Tim Foster <tim.s.foster@oracle.com>
parents: 2089
diff changeset
   524
                        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
   525
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   526
                        try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   527
                                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
   528
                                    "lint_image")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   529
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   530
                                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
   531
                                        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
   532
                                            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
   533
                                        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
   534
                                                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
   535
                                                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
   536
                                                    _("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
   537
                                                    "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
   538
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   539
                                # 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
   540
                                # 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
   541
                                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
   542
                                        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
   543
                                            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
   544
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   545
                                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
   546
                                        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
   547
                                            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
   548
                                        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
   549
                                            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
   550
                                            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
   551
                                            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
   552
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   553
                        except LintEngineException, err:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   554
                                raise LintEngineSetupException(
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   555
                                    _("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
   556
                                    str(err))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   557
                        try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   558
                                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
   559
                                    "ref_image")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   560
                                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
   561
                                        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
   562
                                            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
   563
                                        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
   564
                                                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
   565
                                                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
   566
                                                    _("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
   567
                                                    "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
   568
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   569
                                # 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
   570
                                # 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
   571
                                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
   572
                                        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
   573
                                            lint_manifests):
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   574
                                                raise LintEngineSetupException(
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   575
                                                    "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
   576
                                                    " provided.")
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   577
                                        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
   578
                                            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
   579
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   580
                                if self.ref_api_inst:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   581
                                        self.tracker_phase = \
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   582
                                            self.tracker_phase + 1
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   583
                                        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
   584
                                            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
   585
                                            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
   586
                                            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
   587
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   588
                        except LintEngineException, err:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   589
                                raise LintEngineSetupException(
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   590
                                    _("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
   591
                                    str(err))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   592
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   593
                        if not (self.ref_api_inst or self.lint_api_inst):
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   594
                                raise LintEngineSetupException(
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   595
                                    _("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
   596
                                   "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
   597
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   598
                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
   599
                        checker.startup(self)
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   600
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   601
                self.get_tracker().lint_done()
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   602
                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
   603
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   604
        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
   605
                """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
   606
                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
   607
                in a configured lint repository that match both our pattern
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   608
                and release (if they have been configured).
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   609
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   610
                We allow for pkg.linted=True and pkg.linted.<name>=True, where
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   611
                <name> is a substring of a pkglint id to skip logging errors
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   612
                for that action or manifest.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   613
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   614
                As much of the pkg.linted functionality as possible is handled
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   615
                by the logging system, in combination with the engine calling
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   616
                advise_loggers() as appropriate, however some ManifestChecker
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   617
                methods may still need to use engine.linted() or
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   618
                <LintEngine>.advise_loggers() manually when iterating over
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   619
                manifest actions in order to properly respect pkg.linted
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   620
                attributes."""
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   621
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   622
                manifest_checks = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   623
                action_checks = []
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   624
                count = 0
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   625
                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
   626
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   627
                        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
   628
                        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
   629
                                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
   630
                        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
   631
                                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
   632
                        else:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   633
                                raise LintEngineSetupException(
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   634
                                    _("%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
   635
                                    "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
   636
                                    "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
   637
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   638
                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
   639
                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
   640
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   641
                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
   642
                        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
   643
                            action_checks)
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   644
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   645
                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
   646
                    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
   647
                        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
   648
                            action_checks)
2736
c4e2ef545c7f 7184829 pkglint progress tracker should flush after itself
Tim Foster <tim.s.foster@oracle.com>
parents: 2731
diff changeset
   649
                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
   650
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   651
        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
   652
                """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
   653
                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
   654
                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
   655
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   656
                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
   657
                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
   658
                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
   659
                <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
   660
                method. """
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   661
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   662
                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
   663
                        return
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   664
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   665
                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
   666
                if self.in_setup:
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   667
                        pt = tracker.LINT_PHASETYPE_SETUP
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   668
                else:
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   669
                        pt = tracker.LINT_PHASETYPE_EXECUTE
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   670
                tracker.lint_next_phase(
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   671
                    self.mf_cache.count_latest(api_inst, pattern), pt)
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   672
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   673
                for m in self.mf_cache.gen_latest(api_inst, pattern):
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   674
                        tracker.lint_add_progress()
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
   675
                        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
   676
                return
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   677
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   678
        EXACT = 0
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   679
        LATEST_SUCCESSOR = 1
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   680
2838
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   681
        def get_manifest(self, pkg_name, search_type=EXACT, reference=False):
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   682
                """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
   683
                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
   684
                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
   685
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   686
                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
   687
                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
   688
                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
   689
                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
   690
                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
   691
                lint_fmri_successor() method defined in this module.
2838
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   692
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   693
                If 'reference' is True, only search for the package using the
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   694
                reference image. If no reference image has been configured, this
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   695
                raises a pkg.lint.base.LintException.
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   696
                """
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   697
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   698
                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
   699
                        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
   700
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   701
                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
   702
                        """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
   703
                        try:
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   704
                                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
   705
                                return fmri
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   706
                        except pkg.fmri.IllegalFmri:
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   707
                                try:
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   708
                                        # 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
   709
                                        # 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
   710
                                        # for now
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   711
                                        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
   712
                                            build_release="5.11")
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   713
                                        return fmri
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   714
                                except:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   715
                                        msg = _("unable to construct fmri from "
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   716
                                            "%s") %  pkg_name
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   717
                                        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
   718
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   719
                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
   720
                        """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
   721
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   722
                        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
   723
                                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
   724
                                    _("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
   725
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   726
                        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
   727
                                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
   728
                                    (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
   729
                                    self.release)
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   730
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   731
                        fmris = []
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   732
                        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
   733
                            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
   734
                            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
   735
                            return_fmris=True):
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   736
                                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
   737
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   738
                        fmri_list = []
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   739
                        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
   740
                                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
   741
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   742
                        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
   743
                                return fmri_list[0]
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   744
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   745
                        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
   746
                                return None
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   747
                        else:
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   748
                                # 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
   749
                                # 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
   750
                                raise LintEngineException(
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   751
                                    _("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
   752
                                    "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
   753
                                    "%(pkgs)s") %
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   754
                                    {"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
   755
                                    "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
   756
                                    "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
   757
                                    })
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   758
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   759
                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
   760
                        """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
   761
                        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
   762
                        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
   763
                                return None
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   764
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   765
                        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
   766
                        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
   767
                                # 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
   768
                                # 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
   769
                                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
   770
                                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
   771
                                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
   772
                                        return
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   773
                                # 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
   774
                                # 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
   775
                                if search_fmri.publisher:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   776
                                        if search_fmri.publisher == \
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   777
                                            mf.fmri.publisher:
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   778
                                                return mf
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   779
                                else:
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   780
                                        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
   781
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   782
                        # 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
   783
                        # 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
   784
                        try:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   785
                                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
   786
                                return mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   787
                        except KeyError:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   788
                                mf = None
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   789
                                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
   790
                                if fmri:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   791
                                        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
   792
                                            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
   793
                                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
   794
                                return mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   795
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   796
                # search hierarchically for the given package name in our
2838
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   797
                # local manifests, using our lint image, or using our reference
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   798
                # image and return a manifest for that package.
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   799
                if reference:
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   800
                     if not self.ref_api_inst:
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   801
                             raise base.LintException(
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   802
                                _("No reference repository has been "
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   803
                                "configured"))
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   804
                     return mf_from_image(self.ref_api_inst, pkg_name,
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   805
                        search_type)
b414bc3b5c20 15944889 pkglint should have a means to access reference manifests from lint checks
Tim Foster <tim.s.foster@oracle.com>
parents: 2776
diff changeset
   806
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   807
                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
   808
                        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
   809
                        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
   810
                            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
   811
                                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
   812
                                return mf
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
   813
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   814
                        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
   815
                                return mf
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   816
                        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
   817
                                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
   818
                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
   819
                if mf:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   820
                        return mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   821
                # 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
   822
                # 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
   823
                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
   824
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   825
        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
   826
                """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
   827
                image directory."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   828
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   829
                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
   830
                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
   831
                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
   832
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   833
                        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
   834
                            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
   835
                            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
   836
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   837
                        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
   838
                                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
   839
                        else:
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   840
                                # 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
   841
                                # 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
   842
                                # 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
   843
                                # update interval
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   844
                                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
   845
                except Exception, err:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   846
                        raise LintEngineSetupException(
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   847
                            _("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
   848
                            {"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
   849
                            "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
   850
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   851
                # 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
   852
                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
   853
                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
   854
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   855
        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
   856
                """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
   857
                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
   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 len(repo_uris) != 1:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   860
                        raise LintEngineSetupException(
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   861
                            _("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
   862
                            "per image."))
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   863
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   864
                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
   865
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   866
                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
   867
                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
   868
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
   869
                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
   870
                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
   871
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   872
                # Check to see if a scheme was used, if not, treat it as a
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   873
                # file:// URI, and get the absolute path.  Missing or invalid
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   874
                # repositories will be caught by pkg.client.api.image_create.
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   875
                if not urllib2.urlparse.urlparse(repo_uris[0]).scheme:
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   876
                        repo_uris[0] = "file://%s" % \
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   877
                            urllib2.quote(os.path.abspath(repo_uris[0]))
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   878
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   879
                try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   880
                        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
   881
                            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
   882
                            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
   883
                            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
   884
                            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
   885
                            repo_uri=repo_uris[0])
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   886
                except (ApiException, OSError, IOError), err:
2731
4ef27f88d3ce 7139394 pkglint should check that path parents are directories
Tim Foster <tim.s.foster@oracle.com>
parents: 2701
diff changeset
   887
                        raise LintEngineSetupException(err)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   888
                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
   889
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   890
        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
   891
                """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
   892
2090
d84a7b3cafa3 17061 pkglint -L output could be improved
Tim Foster <tim.s.foster@oracle.com>
parents: 2089
diff changeset
   893
                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
   894
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   895
                for checker in manifest_checks:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   896
                        checker.check(manifest, self)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   897
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   898
                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
   899
                        for action in manifest.gen_actions():
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   900
                                self._check_action(action, manifest,
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   901
                                    action_checks)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   902
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   903
        def _check_action(self, action, manifest, action_checks):
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   904
                """Check a given action."""
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   905
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   906
                for checker in action_checks:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   907
                        checker.check(action, manifest, self)
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   908
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   909
        def advise_loggers(self, action=None, manifest=None):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   910
                """Called to advise any loggers we have set that we're about
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   911
                to perform lint checks on the given action or manifest.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   912
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   913
                In particular, this is used to let the logger objects access
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   914
                the manifest or action being linted without needing to pass
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   915
                those objects each time we log a message.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   916
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   917
                Care must be taken in base.ManifestChecker methods to call
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   918
                this any time they're iterating over actions and are likely to
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   919
                report lint errors that may be related to that action.  When
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   920
                finished iterating, they should re-call this method with only
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   921
                the manifest keyword argument, to clear the last action used.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   922
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   923
                Between each Checker method invocation, the Checker subclass
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   924
                calls this automatically to clear any state set by those method
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   925
                calls.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   926
                """
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   927
                for log in self.logs:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   928
                        log.advise(action=action, manifest=manifest)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   929
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   930
        # 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
   931
        # configured for this engine
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   932
        def debug(self, message, msgid=None, ignore_linted=False):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   933
                """Log a debug message to all loggers."""
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   934
                for log in self.logs:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   935
                        log.debug(message, msgid=msgid,
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   936
                            ignore_linted=ignore_linted)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   937
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   938
        def info(self, message, msgid=None, ignore_linted=False):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   939
                """Log an info message to all loggers."""
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   940
                for log in self.logs:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   941
                        log.info(message, msgid=msgid,
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   942
                            ignore_linted=ignore_linted)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   943
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   944
        def warning(self, message, msgid=None, ignore_linted=False):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   945
                """Log a warning message to all loggers."""
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   946
                for log in self.logs:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   947
                        log.warning(message, msgid=msgid,
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   948
                            ignore_linted=ignore_linted)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   949
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   950
        def error(self, message, msgid=None, ignore_linted=False):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   951
                """Log an error message to all loggers."""
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   952
                for log in self.logs:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   953
                        log.error(message, msgid=msgid,
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   954
                            ignore_linted=ignore_linted)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   955
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   956
        def critical(self, message, msgid=None, ignore_linted=False):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   957
                """Log a critical message to all loggers."""
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   958
                for log in self.logs:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   959
                        log.critical(message, msgid=msgid,
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   960
                            ignore_linted=ignore_linted)
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   961
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   962
        def skip_check_msg(self, action, msgid):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   963
                """Log a message saying we're skipping a particular check."""
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   964
                self.info(_("Not running %(check)s checks on linted action "
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   965
                    "%(action)s") % {"check": msgid, "action": str(action)},
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   966
                    msgid="pkglint001.4", ignore_linted=True)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   967
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   968
        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
   969
                """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
   970
                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
   971
                               destroyed."""
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   972
                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
   973
                        try:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   974
                                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
   975
                        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
   976
                                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
   977
                self.checkers = []
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   978
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   979
                # 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
   980
                # 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
   981
                cwd = os.getcwd()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   982
                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
   983
                        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
   984
                os.chdir(cwd)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2184
diff changeset
   985
                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
   986
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   987
                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
   988
                        shutil.rmtree(self.basedir)
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
   989
                self.advise_loggers()
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   990
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   991
        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
   992
                """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
   993
                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
   994
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   995
		if self.tracker:
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   996
			if not self.in_setup:
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   997
				self.tracker.reset()
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
   998
                        self.tracker.set_major_phase(self.tracker.PHASE_UTILITY)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
   999
                        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
  1000
                if not self.use_tracker:
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
  1001
                        self.tracker = progress.NullProgressTracker()
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
  1002
                else:
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
  1003
                        try:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1004
                                self.tracker = \
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1005
                                    progress.FancyUNIXProgressTracker()
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
  1006
                        except progress.ProgressTrackerException:
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1007
                                self.tracker = \
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1008
                                    progress.CommandLineProgressTracker()
2693
cfee571ea6d5 7154388 Progress tracking API and functionality improvements
Dan Price <daniel.price@oracle.com>
parents: 2690
diff changeset
  1009
                self.tracker.set_major_phase(self.tracker.PHASE_UTILITY)
2046
2522cde7adc2 13536 We need a way to audit one or more packages
Tim Foster <tim.s.foster@oracle.com>
parents:
diff changeset
  1010
                return self.tracker
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1011
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1012
        def follow_renames(self, pkg_name, target=None, old_mfs=[],
2776
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1013
            warn_on_obsolete=False, legacy=False):
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1014
                """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
  1015
                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
  1016
                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
  1017
                the chain.
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1018
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1019
                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
  1020
                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
  1021
                sources of this rename.
2776
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1022
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1023
                If legacy is True, as well as checking that the target
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1024
                name was reached, we also look for the leaf-name of the target.
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1025
                This lets legacy action checking function properly, allowing,
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1026
                say pkg:/SUNWbip or pkg:/compatibility/package/SUNWbip to
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1027
                satisfy the rename check.
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1028
                """
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1029
2776
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1030
                # When doing legacy action checks, the leaf of the target pkg
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1031
                # matching the pkg_name is enough so long as that package is
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1032
                # not marked as 'pkg.renamed'
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1033
                if legacy and target:
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1034
                        leaf_name = target.get_name().split("/")[-1]
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1035
                        if leaf_name == pkg_name:
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1036
                                leaf_mf = self.get_manifest(target.get_name(),
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1037
                                    search_type=self.LATEST_SUCCESSOR)
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1038
                                if leaf_mf and leaf_mf.get("pkg.renamed",
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1039
                                    "false") == "false":
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1040
                                        return leaf_mf
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1041
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1042
                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
  1043
                    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
  1044
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1045
                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
  1046
                        return None
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1047
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1048
                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
  1049
                        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
  1050
                            _("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
  1051
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1052
                # 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
  1053
                # 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
  1054
                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
  1055
                        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
  1056
                                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
  1057
                                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
  1058
                                    _("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
  1059
                                    " -> ".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
  1060
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1061
                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
  1062
                    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
  1063
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1064
                        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
  1065
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1066
                        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
  1067
                                # 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
  1068
                                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
  1069
                                        continue
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1070
                                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
  1071
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1072
                                # 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
  1073
                                # 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
  1074
                                # 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
  1075
                                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
  1076
                                        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
  1077
                                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
  1078
                                    target=target, old_mfs=old_mfs,
2776
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1079
                                    warn_on_obsolete=warn_on_obsolete,
efaf0a59fa03 7139795 pkglint legacy action check needs work
Tim Foster <tim.s.foster@oracle.com>
parents: 2736
diff changeset
  1080
                                    legacy=legacy)
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1081
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1082
                                # 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
  1083
                                # 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
  1084
                                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
  1085
                                    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
  1086
                                        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
  1087
                                        return mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1088
                return mf
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1089
2434
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1090
        def get_param(self, key, action=None, manifest=None):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1091
                """Returns a string value of a given pkglint parameter,
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1092
                intended for use by pkglint Checker objects to provide hints as
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1093
                to how particular checks should be run.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1094
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1095
                Keys are searched for first in the action, if provided, then as
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1096
                manifest attributes, finally falling back to the pkglintrc
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1097
                config file.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1098
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1099
                The return value is a space-separated string of parameters.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1100
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1101
                When searching for keys in the manifest or action, we prepend
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1102
                "pkg.lint" to the key name to ensure that we play in our own
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1103
                namespace and don't clash with other manifest or action attrs.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1104
                """
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1105
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1106
                param_key = "pkg.lint.%s" % key
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1107
                val = None
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1108
                if action and param_key in action.attrs:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1109
                        val = action.attrs[param_key]
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1110
                if manifest and param_key in manifest:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1111
                        val = manifest[param_key]
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1112
                if val:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1113
                        if isinstance(val, basestring):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1114
                                return val
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1115
                        else:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1116
                                return " ".join(val)
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1117
                try:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1118
                        val = self.conf.get("pkglint", key)
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1119
                        if val:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1120
                                return val.replace("\n", " ")
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1121
                except ConfigParser.NoOptionError:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1122
                        return None
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1123
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1124
        def get_attr_action(self, attr, manifest):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1125
                """Return the AttributeAction that sets a given attribute in a
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1126
                manifest.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1127
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1128
                This is available for clients, particularly ManifestCheckers
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1129
                that need to see whether a lint flag has been set on a given
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1130
                'set' action.
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1131
                """
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1132
                if attr not in manifest:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1133
                        raise KeyError(_("%s is not set in manifest") % attr)
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1134
                for action in manifest.gen_actions_by_type("set"):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1135
                        if action.attrs.get("name", "") == attr:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1136
                                return action
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1137
                return None
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1138
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1139
        def linted(self, action=None, manifest=None, lint_id=None):
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1140
                """Determine whether pkg.linted.* flags are present on the
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1141
                action and/or manifest passed as arguments.  If lint_id is set,
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1142
                we look for pkg.linted.<lint_id> attributes as well."""
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1143
                ret = False
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1144
                try:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1145
                        ret = base.linted(action=action, manifest=manifest,
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1146
                            lint_id=lint_id)
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1147
                except base.DuplicateLintedAttrException, err:
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1148
                        self.error(err, msgid="pkglint001.6")
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1149
                return ret
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1150
e82acfe2f46e 17777 it would be nice if pkglint could suppress specific messages for specific actions
Tim Foster <tim.s.foster@oracle.com>
parents: 2383
diff changeset
  1151
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1152
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
  1153
        """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
  1154
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1155
        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
  1156
        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
  1157
        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
  1158
        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
  1159
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1160
        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
  1161
        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
  1162
        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
  1163
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1164
        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
  1165
        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
  1166
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1167
        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
  1168
        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
  1169
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1170
        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
  1171
        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
  1172
        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
  1173
        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
  1174
        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
  1175
        """
2147
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1176
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1177
        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
  1178
                return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1179
2081
f2189c4a03c4 16824 pkglint should remove its workaround for 16811
Tim Foster <tim.s.foster@oracle.com>
parents: 2073
diff changeset
  1180
        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
  1181
        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
  1182
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1183
        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
  1184
                return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1185
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1186
        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
  1187
                return True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1188
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1189
        # 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
  1190
        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
  1191
                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
  1192
                        return True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1193
                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
  1194
                        return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1195
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1196
                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
  1197
                        return True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1198
                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
  1199
                        return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1200
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1201
                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
  1202
                        return True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1203
                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
  1204
                        return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1205
                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
  1206
                        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
  1207
                        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
  1208
                        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
  1209
                                return True
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1210
                        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
  1211
                                return False
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1212
d035de6cab14 17002 pkglint unusual_perms check needs to get out more
Tim Foster <tim.s.foster@oracle.com>
parents: 2144
diff changeset
  1213
        # 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
  1214
        return True
2383
cfc3e2182a1d 18400 pkglint output is still not deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2382
diff changeset
  1215
cfc3e2182a1d 18400 pkglint output is still not deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2382
diff changeset
  1216
def _manifest_sort_key(mf):
cfc3e2182a1d 18400 pkglint output is still not deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2382
diff changeset
  1217
        """The lint engine uses the FMRI of a package to deterine the order in
cfc3e2182a1d 18400 pkglint output is still not deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2382
diff changeset
  1218
        which to iterate over manifests.  This is done using the 'key' attribute
cfc3e2182a1d 18400 pkglint output is still not deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2382
diff changeset
  1219
        to the Python sort() and sorted() methods."""
cfc3e2182a1d 18400 pkglint output is still not deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2382
diff changeset
  1220
        if mf.fmri:
cfc3e2182a1d 18400 pkglint output is still not deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2382
diff changeset
  1221
                return mf.fmri
cfc3e2182a1d 18400 pkglint output is still not deterministic
Tim Foster <tim.s.foster@oracle.com>
parents: 2382
diff changeset
  1222
        return mf.get("pkg.fmri")