#!/usr/bin/python # Copyright 2011 Lars Wirzenius # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import cliapp import ConfigParser import debian.deb822 import glob import logging import os import shutil import subprocess __version__ = '0.0' class Unperish(cliapp.Application): metafilename = 'project.meta' def add_settings(self): self.settings.string(['build-area'], 'where should results go? (%default)', default='..') self.settings.string(['basetgz'], 'pbuilder basetgz (%default)', default='/var/cache/pbuilder/base.tgz') def process_args(self, args): self.meta = self.read_meta() self.debian_control = debian.deb822.Deb822(open('debian/control')) return cliapp.Application.process_args(self, args) @property def upstream_name(self): return self.meta.get('project', 'name') @property def upstream_version(self): return self.meta.get('project', 'version') @property def upstream_tarball(self): return '%s-%s.tar.gz' % (self.upstream_name, self.upstream_version) @property def debian_source_package(self): return self.debian_control['Source'] @property def debian_tarball(self): return '%s_%s.orig.tar.gz' % (self.debian_source_package, self.upstream_version) @property def dirname(self): return '%s-%s' % (self.debian_source_package, self.upstream_version) def cmd_dump_meta(self, args): self.meta.write(self.output) def cmd_export(self, args): self.runcmd('bzr', 'export', self.join(self.dirname)) def cmd_debian_tarball(self, args): origtar = self.join(self.debian_tarball) self.runcmd('bzr', 'export', origtar) def cmd_dsc(self, args): self.runcmd('dpkg-source', '-b', self.dirname, cwd=self.settings['build-area']) def cmd_deb(self, args): dsc = glob.glob(self.join('*.dsc'))[0] argv = ['sudo', 'pbuilder', '--build', '--basetgz', self.settings['basetgz'], '--buildresult', self.settings['build-area'], '--logfile', self.join('pbuilder.log'), dsc] self.runcmd(*argv, cwd=self.settings['build-area']) def read_meta(self): cp = ConfigParser.RawConfigParser() cp.read(self.metafilename) return cp def join(self, pathname): return os.path.join(self.settings['build-area'], pathname) def runcmd(self, *argv, **kwargs): logging.debug('runcmd: %s' % repr(argv)) p = subprocess.Popen(argv, stdout=subprocess.PIPE, stderr=subprocess.PIPE, **kwargs) out, err = p.communicate() if p.returncode: raise cliapp.AppException('command failed: %s\n%s' % (argv, err)) return out if __name__ == '__main__': Unperish(version=__version__).run()