예제 #1
0
    def setLevel(self, levelName):
        """
            Performs the check using a particular pre-defined quality set.

            This overrides the (optional) setting 'sqLevel' in the
            pkgInfo.py of the package to test.
        """
        Any.requireIsTextNonEmpty(levelName)
        Any.requireIsIn(levelName, sqLevelNames)

        self.sqLevelToRun = levelName
    def __init__( self, packagePath, isFirstInstall, msgType, message ):
        """
            Creates a new global install log entry instance.
        """
        Any.requireIsTextNonEmpty( packagePath )
        Any.requireIsBool( isFirstInstall )
        Any.requireIsTextNonEmpty( msgType )
        Any.requireIsIn( msgType, ( 'NEW', 'FIX', 'DOC', 'IMP' ) )

        self._date            = datetime.now().strftime( "%Y-%m-%d %H:%M:%S" )
        self._installRoot     = ''
        self._packageCategory = ''
        self._packageName     = ''
        self._packageVersion  = ''
        self._maintainer      = getuser()
        self._isFirstInstall  = False
        self._msgType         = 'NEW'
        self._message         = ''
        self._fileName        = None
        self._fileExt         = 'xml'


        ( self._packageCategory, self._packageName, self._packageVersion ) = \
            splitPath( packagePath )


        Any.requireIsTextNonEmpty( self._packageCategory )
        Any.requireIsTextNonEmpty( self._packageName )
        Any.requireIsTextNonEmpty( self._packageVersion )


        self.setIsFirstInstall( isFirstInstall )
        self.setMsgType( msgType )
        self.setMessage( message )

        sitRootPath = getRootPath()
        timestamp   = int( time() )

        getFileName = lambda t: os.path.join( sitRootPath, 'Temporary',
                                              'GlobalInstallLogfiles',
                                              'GlobalInstall_%d.%s' % \
                                              ( timestamp, self._fileExt ) )
        fileName    = getFileName( timestamp )

        while os.path.exists( fileName ):
            logging.debug( 'global log entry %d exists, increasing to %d',
                           timestamp, timestamp + 1 )

            # if a logfile of this name already exists, try increasing the
            # timestamp
            timestamp += 1
            fileName   = getFileName( timestamp )

        self.setFileName( fileName )
예제 #3
0
    def setRules(self, ruleIDs):
        """
            Run only the given list of rules, instead of all.

            This overrides the (optional) settings 'sqOptIn' and/or
            'sqOptOut' in the pkgInfo.py of the package to test.
        """
        Any.requireIsListNonEmpty(ruleIDs)

        for ruleID in ruleIDs:
            Any.requireIsIn(ruleID, self.ruleIDs)

        self.rulesToRun = ruleIDs
        self.useOptFlags = False
예제 #4
0
    def _populateRules(self, forceRules=None):
        """
            Discovers available / not implemented / opted-in / opted-out
            checkers.

            'forceRules' is supposed to be an ordered list of rule IDs
            to get executed this time. In case of 'None' all rules will
            get checked.
        """
        checkersAvailable = Rules.getRules()
        Any.requireIsListNonEmpty(checkersAvailable)

        for elem in checkersAvailable:
            Any.requireIsTuple(elem)

            (ruleID, rule) = elem
            Any.requireIsTextNonEmpty(ruleID)
            Any.requireIsInstance(rule, Rules.AbstractRule)

            self.ruleIDs.add(ruleID)

            self.rules[ruleID] = rule

            self.rulesOrdered.append(ruleID)

            if hasattr(rule, 'run'):
                self.rulesImplemented.add(ruleID)

                # will get overwritten below if 'forceRules' provided
                self.rulesToRun.append(ruleID)

            elif rule.removed:
                self.rulesRemoved.add(ruleID)

            # else: rule not implemented, yet

        if forceRules is not None:
            Any.requireIsListNonEmpty(forceRules)

            for ruleID in forceRules:
                Any.requireIsTextNonEmpty(ruleID)
                Any.requireIsIn(ruleID, self.ruleIDs)

            self.rulesToRun = forceRules
예제 #5
0
def getFullPlatformString( platformName ):
    """
        Returns a human-readable string for the given platform name, e.g.:

          getFullPlatformString( 'trusty64' )

        will return:

          'Ubuntu 12.04 LTS (64 bit)'

    """
    Any.requireIsTextNonEmpty( platformName )
    Any.requireIsIn( platformName, getPlatformNames() )


    for platform in getPlatformList():

        if platform[0] == platformName:
            return platform[4]

    raise KeyError( 'invalid platform name: %s' % platformName )
예제 #6
0
def requireValidFormat(formatName):
    Any.requireIsTextNonEmpty(formatName)

    Any.requireIsIn(formatName, formatsAvailable)
예제 #7
0
    def includeRule(self, ruleID):
        Any.requireIsTextNonEmpty(ruleID)
        Any.requireIsIn(ruleID, self.ruleIDs)

        if ruleID not in self.rulesToRun:
            self.rulesToRun.append(ruleID)
예제 #8
0
    def _parsePkgInfo(self):
        try:
            if not self.pkgInfoContent:
                self.pkgInfoContent = getPkgInfoContent(
                    dirName=self.topLevelDir)
        except (AssertionError, IOError, OSError):
            # Many packages lack a pkgInfo.py file within the source tree,
            # f.i they have no customizations. However in the SIT
            # installation such file exists if installed with our
            # Install Procedure. Handcrafted "LTS"-package might not have it.
            return
        except (NameError, SyntaxError):
            raise

        def getValue(key, default=None):
            try:
                result = self.pkgInfoContent[key]
                # logging.debug( '%s=%s', key, result )
            except KeyError:
                result = default  # no such setting, fall back to default

            return result

        # 2019-02-13  Legacy, can be dropped later on
        self.gitBranch = getValue('branch', self.gitBranch)
        self.gitCommitIdLong = getValue('commitID', self.gitCommitIdLong)
        self.gitOrigin = getValue('origin', self.gitOrigin)
        self.gitRelPath = getValue('repoRelPath', self.gitRelPath)
        self.packageName = getValue('package',
                                    self.packageName)  # legacy 2018-09-26
        self.sqCheckExe = getValue('SQ_12',
                                   self.sqCheckExe)  # legacy 2019-10-08

        # supposed to be used:
        self.userSrcAlias = getValue('aliases', self.userSrcAlias)
        self.useClang = getValue('BST_useClang', self.useClang)
        self.buildDependencies = getValue('buildDepends',
                                          self.buildDependencies)
        self.buildDependsArch = getValue('buildDependsArch',
                                         self.buildDependsArch)
        self.packageCategory = getValue('category', self.packageCategory)
        self.dependencies = getValue('depends', self.dependencies)
        self.dependsArch = getValue('dependsArch', self.dependsArch)
        self.userSrcEnv = getValue('envVars', self.userSrcEnv)
        self.userSrcBashCode = getValue('bashCode', self.userSrcBashCode)
        self.userSrcCmdCode = getValue('cmdCode', self.userSrcCmdCode)
        self.gitBranch = getValue('gitBranch', self.gitBranch)
        self.gitBranchForCIA = getValue('gitBranchForCIA',
                                        self.gitBranchForCIA)
        self.gitCommitIdLong = getValue('gitCommitID', self.gitCommitIdLong)
        self.gitOrigin = getValue('gitOrigin', self.gitOrigin)
        self.gitOriginForCIA = getValue('gitOriginForCIA',
                                        self.gitOriginForCIA)
        self.gitRelPath = getValue('gitRelPath', self.gitRelPath)
        self.docTool = getValue('docTool', self.docTool)
        self.install = getValue('install', self.install)

        for name in ('Install_onStartupStage1', 'Install_onStartupStage2',
                     'Install_onStartupStage3', 'Install_onStartupStage4',
                     'Install_onStartupStage5', 'Install_onExitStage1',
                     'Install_onExitStage2', 'Install_onExitStage3',
                     'Install_onExitStage4', 'Install_onExitStage5'):
            self.installHooks[name] = getValue(name)

        self.installGroup = getValue('installGroup', self.installGroup)
        self.installMatching = getValue('installMatching',
                                        self.installMatching)
        self.installMode = getValue('installMode', self.installMode)
        self.installSymlinks = getValue('installSymlinks',
                                        self.installSymlinks)
        self.installUmask = getValue('installUmask', self.installUmask)
        self.linkAllLibraries = getValue('linkAllLibraries',
                                         self.linkAllLibraries)
        self.packageName = getValue('name', self.packageName)
        self.patchlevel = getValue('patchlevel', self.patchlevel)
        self.recommendations = getValue('recommends', self.recommendations)
        self.svnRepositoryRoot = getValue('repositoryRoot',
                                          self.svnRepositoryRoot)
        self.svnRepositoryURL = getValue('repositoryUrl',
                                         self.svnRepositoryURL)
        self.svnRevision = getValue('revision', self.svnRevision)
        self.svnRevisionForCIA = getValue('revisionForCIA',
                                          self.svnRevisionForCIA)
        self.sqComments = getValue('sqComments', self.sqComments)
        self.sqCheckExe = getValue('sqCheckExe', self.sqCheckExe)
        self.sqLevel = getValue('sqLevel', self.sqLevel)
        self.sqOptInRules = getValue('sqOptInRules', self.sqOptInRules)
        self.sqOptOutRules = getValue('sqOptOutRules', self.sqOptOutRules)
        self.sqOptInDirs = getValue('sqOptInDirs', self.sqOptInDirs)
        self.sqOptOutDirs = getValue('sqOptOutDirs', self.sqOptOutDirs)
        self.sqOptInFiles = getValue('sqOptInFiles', self.sqOptInFiles)
        self.sqOptOutFiles = getValue('sqOptOutFiles', self.sqOptOutFiles)
        self.suggestions = getValue('suggests', self.suggestions)
        self.usePatchlevels = getValue('usePatchlevels', self.usePatchlevels)
        self.packageVersion = getValue('version',
                                       self.packageVersion)  # both the same
        self.packageVersionRaw = getValue('version',
                                          self.packageVersionRaw)  #    - " -

        if self.packageCategory and self.packageName and self.packageVersion:
            self.canonicalPath = os.path.join(self.packageCategory,
                                              self.packageName,
                                              self.packageVersion)

        self.userSrcEnv = self._expandListOfTuples(self.userSrcEnv)
        self.userSrcAlias = self._expandListOfTuples(self.userSrcAlias)
        self.userSrcBashCode = self._expandListOfStrings(self.userSrcBashCode)
        self.userSrcCmdCode = self._expandListOfStrings(self.userSrcCmdCode)

        Any.requireIsIn(self.installMode, ('clean', 'incremental'),
                        'invalid value of "installMode" in pkgInfo.py')