예제 #1
0
 def stage_resulting_changes(self, dscfile, arch):
     source, version = parse_dsc_filename(dscfile)
     basename = self._changes(dscfile, arch)
     resultdir = 'result/%s' % arch
     changes = os.path.join(resultdir, basename)
     if not os.path.isfile(changes):
         raise RuntimeError, "%s doesn't exist." % changes
     return self.stage_changes(source, changes, arch)
예제 #2
0
 def install_to_repos(self, dist, changes):
     dscfile = self.get_dscfile_from_changes(changes)
     source, version = parse_dsc_filename(dscfile)
     if os.path.isfile(changes):
         self.local_repos.include(dist, changes)
     self.build_binary_packages(dscfile)
     here = os.getcwd()
     os.chdir(source)
     changes_files = [f for f in os.listdir('.') if f.endswith('.changes')]
     for changes in changes_files:
         self.local_repos.include(dist, changes)
예제 #3
0
    def build(self, dscfile, pbuilderrc=None, wait=True):
        # we only parse the dsc file for
        # sanitation purposes.  The source
        # and version variables aren't
        # being used.
        source, version = parse_dsc_filename(dscfile)
        address = self.command_prefix(user='******')[1]
        incoming = '~/%s' % self.buildd_incoming
        self.makedirs(incoming)
        
        # copy files to buildd
        if self.verbose:
            print "Copying files to %s" % address
        cmd = ['dcmd', 'scp', dscfile,
               '%s:~/%s' % (address, self.buildd_incoming)]
        subprocess.check_call(cmd)

        # prepare variables and logs
        basepath = self.basedir(pbuilderrc=pbuilderrc)
        buildresult = self.buildresult(pbuilderrc=pbuilderrc)
        package = os.path.basename(dscfile).split('.dsc')[0]
        self.current_package = package
        logname = self.logname('build.%s' % package)
        self.build_logfile = logname
        logfile = file(logname, 'a')
        self.make_prebuild_info(logfile, pbuilderrc)

        # prepare build command
        prefix = self.command_prefix(user='******')
        buildcmd = ['cowbuilder', '--build', '--basepath', basepath,
                    '--buildresult', buildresult]
        buildcmd += self._update_cowbuild_cmd(pbuilderrc)
        buildcmd.append(dscfile)

        # setup command for remote execution
        shell_cmd = ' '.join(buildcmd)
        dirspec = self.incomingdir()
        ssh_cmd = 'cd %s && %s' % (dirspec, shell_cmd)

        cmd = prefix + [ssh_cmd]
        if self.verbose:
            msg = "building source %s with command: %s" 
            print msg % (package, ' '.join(cmd))

        # run command
        self.buildproc = Proc(cmd, stdout=logfile, stderr=logfile)

        if self.watch_build_process:
            self.make_tailproc(logname)
        if wait:
            while self.poll() is None:
                time.sleep(10)
            self.build_finished()
예제 #4
0
 def build_source_package(self, dscfile):
     source, version = parse_dsc_filename(dscfile)
     upstream_version = version.split('-')[0]
     dirname = '%s-%s' % (source, upstream_version)
     here = os.getcwd()
     os.chdir(dirname)
     cmd = ['dpkg-buildpackage'] + self.srcbuild_opts
     subprocess.check_call(cmd)
     os.chdir(here)
     #self.builder.stage_resulting_changes(dscfile, 'source')
     changes = '%s_%s_source.changes' % (source, version)
     self.builder.stage_changes(source, changes, 'source', remove=False)
     return source
예제 #5
0
 def staging_dir(self, dscfile):
     source, version = parse_dsc_filename(dscfile)
     return source