def state(self, state):
        """Set the current build state and record the time to maintain history.

        Note! This is different from the dataset state. Setting the build set is commiteed to the
        progress table/database immediately. The dstate is also set, but is not committed until the
        bundle is committed. So, the dstate changes more slowly.
        """

        assert state != 'build_bundle'

        self.buildstate.state.current = state
        self.buildstate.state[state] = time()
        self.buildstate.state.lasttime = time()

        self.buildstate.state.error = False
        self.buildstate.state.exception = None
        self.buildstate.state.exception_type = None
        self.buildstate.commit()

        if state in (self.STATES.NEW, self.STATES.CLEANED, self.STATES.BUILT, self.STATES.FINALIZED,
                     self.STATES.SOURCE):
            state = state if state != self.STATES.CLEANED else self.STATES.NEW
            self.dstate = state
Set the current build state and record the time to maintain history.

        Note! This is different from the dataset state. Setting the build set is commiteed to the
        progress table/database immediately. The dstate is also set, but is not committed until the
        bundle is committed. So, the dstate changes more slowly.