コード例 #1
0
ファイル: schedgroup.py プロジェクト: flamenca/virtualbox
    def removeEntry(self, uidAuthor, idSchedGroup, fCascade = False, fCommit = False):
        """
        Deletes a scheduling group.
        """

        #
        # Input validation and retrival of current data.
        #
        if idSchedGroup == 1:
            raise TMRowInUse('Cannot remove the default scheduling group (id 1).');
        oData = SchedGroupDataEx().initFromDbWithId(self._oDb, idSchedGroup);

        #
        # We use cascade a little different here... We don't actually delete
        # associated testboxes or testgroups.
        #
        if oData.aoTestBoxes:
            if fCascade is not True:
                # Complain about there being associated testboxes.
                asTestBoxes = ['%s (#%d)' % (oTestBox.sName, oTestBox.idTestBox) for oTestBox in oData.aoTestBoxes];
                raise TMRowInUse('Scheduling group #%d is associated with one or more test boxes: %s'
                                 % (idSchedGroup, ', '.join(asTestBoxes),));
            else:
                # Reassign testboxes to scheduling group #1 (the default group).
                oTbLogic = TestBoxLogic(self._oDb);
                for oTestBox in oData.aoTestBoxes:
                    oTbCopy = TestBoxData().initFromOther(oTestBox);
                    oTbCopy.idSchedGroup = 1;
                    oTbLogic.editEntry(oTbCopy, uidAuthor, fCommit = False);

                oData = SchedGroupDataEx().initFromDbWithId(self._oDb, idSchedGroup);
                if oData.aoTestBoxes:
                    raise TMRowInUse('More testboxes was added to the scheduling group as we were trying to delete it.');

        #
        # Remove the group and all member records.
        #
        for oMember in oData.aoMembers:
            self._removeSchedGroupMember(uidAuthor, oMember);
        self._oDb.execute('UPDATE   SchedGroupMembers\n'
                          'SET      tsExpire     = CURRENT_TIMESTAMP\n'
                          'WHERE    idSchedGroup = %s\n'
                          '     AND tsExpire     = \'infinity\'::TIMESTAMP\n'
                          , (idSchedGroup,));

        (tsCur, tsCurMinusOne) = self._oDb.getCurrentTimestamps();
        if oData.tsEffective != tsCur and oData.tsEffective != tsCurMinusOne:
            self._historizeEntry(idSchedGroup, tsCurMinusOne);
            self._readdEntry(uidAuthor, oData, tsCurMinusOne);
            self._historizeEntry(idSchedGroup);
        self._oDb.execute('UPDATE   SchedGroups\n'
                          'SET      tsExpire     = CURRENT_TIMESTAMP\n'
                          'WHERE    idSchedGroup = %s\n'
                          '     AND tsExpire     = \'infinity\'::TIMESTAMP\n'
                          , (idSchedGroup,))

        self._oDb.maybeCommit(fCommit)
        return True;
コード例 #2
0
ファイル: build.py プロジェクト: MasterScott/VirtualBox-6.0.6
    def removeEntry(self, uidAuthor, idBuildCategory, fCascade = False, fCommit = False):
        """
        Tries to delete the build category.
        Note! Does not implement cascading. This is intentional!
        """

        #
        # Check that the build category isn't used by anyone.
        #
        self._oDb.execute('SELECT   COUNT(idBuild)\n'
                          'FROM     Builds\n'
                          'WHERE    idBuildCategory = %s\n'
                          , (idBuildCategory,));
        cBuilds = self._oDb.fetchOne()[0];
        if cBuilds > 0:
            raise TMRowInUse('Build category #%d is used by %d builds and can therefore not be deleted.'
                             % (idBuildCategory, cBuilds,));

        #
        # Ok, it's not used, so just delete it.
        # (No history on this table. This code is for typos.)
        #
        self._oDb.execute('DELETE FROM Builds\n'
                          'WHERE    idBuildCategory = %s\n'
                          , (idBuildCategory,));

        self._oDb.maybeCommit(fCommit);
        _ = uidAuthor; _ = fCascade;
        return True;
コード例 #3
0
 def _assertUnique(self, sName, idSchedGroupIgnore=None):
     """
     Checks that the scheduling group name is unique.
     Raises exception if the name is already in use.
     """
     if idSchedGroupIgnore is None:
         self._oDb.execute(
             'SELECT   idSchedGroup\n'
             'FROM     SchedGroups\n'
             'WHERE    tsExpire = \'infinity\'::TIMESTAMP\n'
             '   AND   sName    = %s\n', (sName, ))
     else:
         self._oDb.execute(
             'SELECT   idSchedGroup\n'
             'FROM     SchedGroups\n'
             'WHERE    tsExpire      = \'infinity\'::TIMESTAMP\n'
             '   AND   sName         = %s\n'
             '   AND   idSchedGroup <> %s\n', (
                 sName,
                 idSchedGroupIgnore,
             ))
     if self._oDb.getRowCount() > 0:
         raise TMRowInUse('Scheduling group name (%s) is already in use.' %
                          (sName, ))
     return True
コード例 #4
0
    def removeEntry(self, uidAuthor, idFailureCategory, fCascade = False, fCommit = False):
        """
        Deletes a failure reason category.
        """
        _ = fCascade; # too complicated for now.

        #
        # Check whether it's being used by other tables and bitch if it is .
        # We currently do not implement cascading.
        #
        self._oDb.execute('SELECT   CONCAT(idFailureReason, \' - \', sShort)\n'
                          'FROM     FailureReasons\n'
                          'WHERE    idFailureCategory = %s\n'
                          '    AND  tsExpire = \'infinity\'::TIMESTAMP\n'
                          , (idFailureCategory,));
        aaoRows = self._oDb.fetchAll();
        if aaoRows:
            raise TMRowInUse('Cannot remove failure reason category %u because its being used by: %s'
                             % (idFailureCategory, ', '.join(aoRow[0] for aoRow in aaoRows),));

        #
        # Do the job.
        #
        oData = FailureCategoryData().initFromDbWithId(self._oDb, idFailureCategory);
        (tsCur, tsCurMinusOne) = self._oDb.getCurrentTimestamps();
        if oData.tsEffective != tsCur and oData.tsEffective != tsCurMinusOne:
            self._historizeEntry(idFailureCategory, tsCurMinusOne);
            self._readdEntry(uidAuthor, oData, tsCurMinusOne);
        self._historizeEntry(idFailureCategory);
        self._oDb.maybeCommit(fCommit);
        return True;
コード例 #5
0
ファイル: failurereason.py プロジェクト: AndSecYi/LLDBagility
    def removeEntry(self,
                    uidAuthor,
                    idFailureReason,
                    fCascade=False,
                    fCommit=False):
        """
        Deletes a failure reason.
        """
        _ = fCascade
        # too complicated for now.

        #
        # Check whether it's being used by other tables and bitch if it is .
        # We currently do not implement cascading.
        #
        self._oDb.execute(
            'SELECT   CONCAT(idBlacklisting, \' - blacklisting\')\n'
            'FROM     BuildBlacklist\n'
            'WHERE    idFailureReason = %s\n'
            '    AND  tsExpire = \'infinity\'::TIMESTAMP\n'
            'UNION\n'
            'SELECT   CONCAT(idTestResult, \' - test result failure reason\')\n'
            'FROM     TestResultFailures\n'
            'WHERE    idFailureReason = %s\n'
            '    AND  tsExpire = \'infinity\'::TIMESTAMP\n', (
                idFailureReason,
                idFailureReason,
            ))
        aaoRows = self._oDb.fetchAll()
        if aaoRows:
            raise TMRowInUse(
                'Cannot remove failure reason %u because its being used by: %s'
                % (
                    idFailureReason,
                    ', '.join(aoRow[0] for aoRow in aaoRows),
                ))

        #
        # Do the job.
        #
        oData = FailureReasonData().initFromDbWithId(self._oDb,
                                                     idFailureReason)
        assert oData.idFailureReason == idFailureReason
        (tsCur, tsCurMinusOne) = self._oDb.getCurrentTimestamps()
        if oData.tsEffective != tsCur and oData.tsEffective != tsCurMinusOne:
            self._historizeEntry(idFailureReason, tsCurMinusOne)
            self._readdEntry(uidAuthor, oData, tsCurMinusOne)
        self._historizeEntry(idFailureReason)
        self._oDb.maybeCommit(fCommit)
        return True
コード例 #6
0
    def removeEntry(self,
                    uidAuthor,
                    idBuildSrc,
                    fCascade=False,
                    fCommit=False):
        """
        Deletes a build sources.
        """

        #
        # Check cascading.
        #
        if fCascade is not True:
            self._oDb.execute(
                'SELECT   idSchedGroup, sName\n'
                'FROM     SchedGroups\n'
                'WHERE    idBuildSrc          = %s\n'
                '     OR  idBuildSrcTestSuite = %s\n', (
                    idBuildSrc,
                    idBuildSrc,
                ))
            if self._oDb.getRowCount() > 0:
                asGroups = []
                for aoRow in self._oDb.fetchAll():
                    asGroups.append('%s (#%d)' % (aoRow[1], aoRow[0]))
                raise TMRowInUse(
                    'Build source #%d is used by one or more scheduling groups: %s'
                    % (
                        idBuildSrc,
                        ', '.join(asGroups),
                    ))
        else:
            self._oDb.execute(
                'UPDATE   SchedGroups\n'
                'SET      idBuildSrc = NULL\n'
                'WHERE    idBuildSrc = %s', (idBuildSrc, ))
            self._oDb.execute(
                'UPDATE   SchedGroups\n'
                'SET      idBuildSrcTestSuite = NULL\n'
                'WHERE    idBuildSrcTestSuite = %s', (idBuildSrc, ))

        #
        # Do the job.
        #
        self._historizeBuildSource(idBuildSrc, None)
        _ = uidAuthor
        ## @todo record deleter.

        self._oDb.maybeCommit(fCommit)
        return True
コード例 #7
0
ファイル: testgroup.py プロジェクト: hzy199411/vbox
    def removeEntry(self, uidAuthor, idTestGroup, fCascade = False, fCommit = False):
        """
        Deletes a test group.
        """
        _ = uidAuthor; ## @todo record uidAuthor.

        #
        # Cascade.
        #
        if fCascade is not True:
            self._oDb.execute('SELECT   SchedGroups.idSchedGroup, SchedGroups.sName\n'
                              'FROM     SchedGroupMembers, SchedGroups\n'
                              'WHERE    SchedGroupMembers.idTestGroup = %s\n'
                              '     AND SchedGroupMembers.tsExpire    = \'infinity\'::TIMESTAMP\n'
                              '     AND SchedGroups.idSchedGroup      = SchedGroupMembers.idSchedGroup\n'
                              '     AND SchedGroups.tsExpire          = \'infinity\'::TIMESTAMP\n'
                              , ( idTestGroup, ));
            aoGroups = self._oDb.fetchAll();
            if aoGroups:
                asGroups = ['%s (#%d)' % (sName, idSchedGroup) for idSchedGroup, sName in aoGroups];
                raise TMRowInUse('Test group #%d is member of one or more scheduling groups: %s'
                                 % (idTestGroup, ', '.join(asGroups),));
        else:
            self._oDb.execute('UPDATE   SchedGroupMembers\n'
                              'SET      tsExpire = CURRENT_TIMESTAMP\n'
                              'WHERE    idTestGroup = %s\n'
                              '     AND tsExpire = \'infinity\'::TIMESTAMP\n'
                              , ( idTestGroup, ));

        #
        # Remove the group.
        #
        self._oDb.execute('UPDATE   TestGroupMembers\n'
                          'SET      tsExpire    = CURRENT_TIMESTAMP\n'
                          'WHERE    idTestGroup = %s\n'
                          '     AND tsExpire    = \'infinity\'::TIMESTAMP\n'
                          , (idTestGroup,))
        self._oDb.execute('UPDATE   TestGroups\n'
                          'SET      tsExpire    = CURRENT_TIMESTAMP\n'
                          'WHERE    idTestGroup = %s\n'
                          '     AND tsExpire    = \'infinity\'::TIMESTAMP\n'
                          , (idTestGroup,))

        self._oDb.maybeCommit(fCommit)
        return True;