diff options
author | Yaakov M. Nemoy <loupgaroublond@gmail.com> | 2009-01-07 20:37:17 -0500 |
---|---|---|
committer | Yaakov M. Nemoy <loupgaroublond@gmail.com> | 2009-01-07 20:37:17 -0500 |
commit | 6d3b33fa6c32c8702bab887e621f9cf61aaf9108 (patch) | |
tree | e6b0c221300434404a012f1e99c58269e3d7f64f /modules | |
parent | a7bcebe96bd00388fea1c2cf01e0691534f61744 (diff) | |
download | fedora-devshell-6d3b33fa6c32c8702bab887e621f9cf61aaf9108.tar.gz fedora-devshell-6d3b33fa6c32c8702bab887e621f9cf61aaf9108.tar.xz fedora-devshell-6d3b33fa6c32c8702bab887e621f9cf61aaf9108.zip |
Adds working customizable profiles with mock configurations
Diffstat (limited to 'modules')
-rw-r--r-- | modules/build.py | 14 | ||||
-rw-r--r-- | modules/mock.py | 60 | ||||
-rw-r--r-- | modules/package.py | 4 | ||||
-rw-r--r-- | modules/profile.py | 68 |
4 files changed, 99 insertions, 47 deletions
diff --git a/modules/build.py b/modules/build.py index 9955512..cc61868 100644 --- a/modules/build.py +++ b/modules/build.py @@ -33,6 +33,7 @@ from base.profiles import dir_defines, join_defines, dist_defines, Profile from modules.directory import Directory from modules.dirfactory import DirFactory from modules.package import Package +from modules.profile import Profile class Build(Directory): _type = 'build' @@ -47,11 +48,11 @@ class Build(Directory): for patch in patches: symlink(patch, join(self.dir, 'SOURCES', patch)) - def build_quick_rpm(self, package): - self.rpmbuild('-ba', package) + def build_quick_rpm(self, package, profile=None): + self.rpmbuild('-ba', package, profile) - def build_source_rpm(self, package): - self.rpmbuild('-bs', package) + def build_source_rpm(self, package, profile=None): + self.rpmbuild('-bs', package, profile) def rpmbuild(self, param, package, profile=None): pkg = DirFactory(package) @@ -73,14 +74,15 @@ class Build(Directory): p.wait() log.debug(p.returncode) - def fetch_rpms(self): + def fetch_rpms(self, target_dir): with pwd(self.dir): for path, dirs, files in walk('.'): for f in files: if f.endswith('.rpm'): #TODO: Gotta figure out what should be FEDORA_DIR # Probably something involving "Project" or i dunno what - move(join(path, f), join(FEDORA_DIR, f)) + # it's something temporary for now, don't commi this + move(join(path, f), join(target_dir, f)) def fetch_build(self, package): pkg = DirFactory(package) diff --git a/modules/mock.py b/modules/mock.py index a49231f..aaa0108 100644 --- a/modules/mock.py +++ b/modules/mock.py @@ -17,47 +17,47 @@ # from __future__ import with_statement +from subprocess import Popen + +from base.base import log from base.module import Module -from base.vars import FEDORA_DIR -from base.profiles import ver_rel, Profile +from base.profiles import ver_rel +from base.util import pwd + from modules.build import Build +from modules.dirfactory import DirFactory from modules.package import Package +from modules.profile import Profile class Mock(Module): - def __init__(self, target_dir, name, profile): - self.target_dir = target_dir - self.name = name - self.pkg = Package(name) - self.build = Build(name, target_dir) - # for now we're using the old profile form, namely a branch - # TODO: fix real profiles + def __init__(self, profile, build): + self.build = Build(build) self.profile = Profile(profile) - def build_rpm(self, target_dir=None): - if not target_dir: - if self.target_dir: - target_dir = self.target_dir - else: - raise ExecutionException(None, 'no Target Dir specified') - - self.build.build_source_rpm(target_dir, self.profile) - self.build.fetch_rpms(target_dir) - - srpm_name = self.pkg.get_srpm_name(self.profile) + def build_rpm(self, package): + pkg = DirFactory(package) + + self.build.build_source_rpm(package, self.profile) + self.build.fetch_rpms(self.profile.result_dir) + + srpm_name = pkg.get_srpm_name(self.profile) mock_cfg = self.profile.mock_cfg result_dir = self.profile.result_dir - config_dir = self.profile.config_dir - with pwd(self.pkg.code_dir): + config_dir = self.profile.mock_cfg_dir + cmd = ['mock', '-r %s' % mock_cfg, + '--configdir=%s' % config_dir, + '--resultdir=%s' % result_dir, + srpm_name] + log.debug('cmd is ' + str(cmd)) + with pwd(pkg.dir): with file('mock.log', 'w') as mock_out: - with pwd(FEDORA_DIR): - p = Popen(['/usr/bin/mock', - '-r %s' % mock_cfg, - '--configdir=%s' % config_dir, - '--resultdir=%s' % result_dir, - srpm_name], - stdout=mock_out, stderr=mock_out) - log.info('quick compiling %s... please wait' % srpm_name) + with pwd(result_dir): + p = Popen(cmd, stdout=mock_out, stderr=mock_out) + log.info('mock compiling %s... please wait' % srpm_name) p.wait() + def close(self): + self.build.close() + self.profile.close() __all__ = ['Mock'] diff --git a/modules/package.py b/modules/package.py index d123446..983a2aa 100644 --- a/modules/package.py +++ b/modules/package.py @@ -69,12 +69,12 @@ class Package(Directory): def get_srpm_name(self, profile): with pwd(self.code_dir): - ver, rel = ver_rel(self.spec_file, profile.dist_defines()) + ver, rel = ver_rel(self.spec_file, profile.dist_defines) return '%s-%s-%s.src.rpm' % (self.pkg_name, ver, rel) def ver(self, profile=None): with pwd(self.dir): - ver, rel = ver_rel(self.spec_file, profile.dist_defines() if profile else '') + ver, rel = ver_rel(self.spec_file, profile.dist_defines if profile else '') return ver def source_dir(self, *args): diff --git a/modules/profile.py b/modules/profile.py index 40b38ae..56639cb 100644 --- a/modules/profile.py +++ b/modules/profile.py @@ -15,17 +15,67 @@ # # Authors: Yaakov M. Nemoy <ynemoy@redhat.com> # +from __future__ import with_statement + +from os.path import join -from base.module import Module from base.exceptions import ExecutionException +from base.profiles import dist_defines, get_mock_cfg, distro, TARGET, DIST, DISTVAR, DISTVAL +from base.util import pwd, copytree +from base.vars import MOCK_CFG_DIR + +from modules.directory import Directory + +class Profile(Directory): + _type = 'profile' + @property + def dist(self): + '''eg .fc7 or .olpc2 + used in rpmmacro %dist''' + return self.cfg['dist'] + + @property + def distvar(self): + 'eg: fedora or rhel' + return self.cfg['distvar'] + + @property + def distval(self): + 'eg: 10 or 3 (string form)' + return self.cfg['distval'] + + @property + def koji_target(self): + 'eg: dist-f11' + return self.cfg['koji_target'] + + @property + def dist_defines(self): + return dist_defines(self.dist, self.distvar, self.distval) + + # i'm not sure this is 100% relevant, mock cfg's might be named only after the arch used + @property + def mock_cfg(self): + # TODO: buildarchs need to be handled somehow + # yes i'm lame and i did this i386 only for now + return get_mock_cfg(self.distvar, self.distval, 'i386') + + @property + def mock_cfg_dir(self): + return join(self.dir, 'mock') -class Profile(Module): - def __init__(self, name=None, branch=None): - if branch: - pass - elif name: - pass - else: - raise ExecutionException('need a saved profile or a branch to lookup') + @property + def result_dir(self): + return self.dir + def configure_from_system(self, branch): + self.cfg['branch'] = branch + d = distro[branch] + self.cfg['koji_target'] = d[TARGET] + self.cfg['distval'] = d[DISTVAL] + self.cfg['distvar'] = d[DISTVAR] + self.cfg['dist'] = d[DIST] + with pwd(self.dir): + copytree(MOCK_CFG_DIR, self.mock_cfg_dir) + __all__ = ['Profile'] |