⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rpmbuild.py

📁 The BuildBot is a system to automate the compile/test cycle required by most software projects. CVS
💻 PY
字号:
# Dan Radez <dradez+buildbot@redhat.com># Steve 'Ashcrow' Milner <smilner+buildbot@redhat.com>## This software may be freely redistributed under the terms of the GNU# general public license.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."""RPM Building steps."""from buildbot.steps.shell import ShellCommandfrom buildbot.process.buildstep import RemoteShellCommandclass RpmBuild(ShellCommand):    """    Build and RPM based on pased spec filename    """    import os.path    name = "rpmbuilder"    haltOnFailure = 1    flunkOnFailure = 1    description = ["RPMBUILD"]    descriptionDone = ["RPMBUILD"]    def __init__(self,                 specfile=None,                 topdir='`pwd`',                 builddir='`pwd`',                 rpmdir='`pwd`',                 sourcedir='`pwd`',                 specdir='`pwd`',                 srcrpmdir='`pwd`',                 dist='.el5',                 autoRelease=False,                 vcsRevision=False,                 **kwargs):        """        Creates the RpmBuild object.        @type specfile: str        @param specfile: the name of the spec file for the rpmbuild        @type topdir: str        @param topdir: the top directory for rpm building.        @type builddir: str        @param builddir: the directory to use for building        @type rpmdir: str        @param rpmdir: the directory to dump the rpms into        @type sourcedir: str        @param sourcedir: the directory that houses source code        @type srcrpmdir: str        @param srcrpmdir: the directory to dump source rpms into        @type dist: str        @param dist: the distribution to build for        @type autoRelease: boolean        @param autoRelease: if the auto release mechanics should be used        @type vcsRevision: boolean        @param vcsRevision: if the vcs revision mechanics should be used        @type kwargs: dict        @param kwargs: All further keyword arguments.        """        ShellCommand.__init__(self, **kwargs)        self.addFactoryArguments(topdir=topdir,                                 builddir=builddir,                                 rpmdir=rpmdir,                                 sourcedir=sourcedir,                                 specdir=specdir,                                 srcrpmdir=srcrpmdir,                                 specfile=specfile,                                 dist=dist,                                 autoRelease=autoRelease,                                 vcsRevision=vcsRevision)        self.rpmbuild = (            'rpmbuild --define "_topdir %s" --define "_builddir %s"'            ' --define "_rpmdir %s" --define "_sourcedir %s"'            ' --define "_specdir %s" --define "_srcrpmdir %s"'            ' --define "dist %s"' % (topdir, builddir, rpmdir, sourcedir,            specdir, srcrpmdir, dist))        self.specfile = specfile        self.autoRelease = autoRelease        self.vcsRevision = vcsRevision    def start(self):        """        Buildbot Calls Me when it's time to start        """        if self.autoRelease:            relfile = '%s.release' % (                self.os.path.basename(self.specfile).split('.')[0])            try:                rfile = open(relfile, 'r')                rel = int(rfile.readline().strip())                rfile.close()            except:                rel = 0            self.rpmbuild = self.rpmbuild + ' --define "_release %s"' % rel            rfile = open(relfile, 'w')            rfile.write(str(rel+1))            rfile.close()        if self.vcsRevision:            self.rpmbuild = self.rpmbuild + ' --define "_revision %s"' % \                self.getProperty('got_revision')        self.rpmbuild = self.rpmbuild + ' -ba %s' % self.specfile        self.command = ['bash', '-c', self.rpmbuild]        # create the actual RemoteShellCommand instance now        kwargs = self.remote_kwargs        kwargs['command'] = self.command        cmd = RemoteShellCommand(**kwargs)        self.setupEnvironment(cmd)        self.checkForOldSlaveAndLogfiles()        self.startCommand(cmd)    def createSummary(self, log):        """        Create nice summary logs.        @param log: The log to create summary off of.        """        rpm_prefixes = ['Provides:', 'Requires(rpmlib):', 'Requires:',                        'Checking for unpackaged', 'Wrote:',                        'Executing(%', '+ ']        rpm_err_pfx = ['   ', 'RPM build errors:', 'error: ']        rpmcmdlog = []        rpmerrors = []        for line in log.readlines():            for pfx in rpm_prefixes:                if pfx in line:                    rpmcmdlog.append(line)            for err in rpm_err_pfx:                if err in line:                    rpmerrors.append(line)        self.addCompleteLog('RPM Command Log', "".join(rpmcmdlog))        self.addCompleteLog('RPM Errors', "".join(rpmerrors))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -