summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorYaakov M. Nemoy <loupgaroublond@gmail.com>2008-12-29 23:11:55 -0500
committerYaakov M. Nemoy <loupgaroublond@gmail.com>2008-12-29 23:11:55 -0500
commit0cb6e545b308e79a5d4aa6c36b7366f2b0fc30fd (patch)
tree8c30624c6191a3d7a138b8229ef829a8406b9aa0 /base
parent3d02771f3e2376cd459e9a4d0edf2ff0c0f22b2c (diff)
downloadfedora-devshell-0cb6e545b308e79a5d4aa6c36b7366f2b0fc30fd.tar.gz
fedora-devshell-0cb6e545b308e79a5d4aa6c36b7366f2b0fc30fd.tar.xz
fedora-devshell-0cb6e545b308e79a5d4aa6c36b7366f2b0fc30fd.zip
Mass commit, i should be cleaner in the future.
Diffstat (limited to 'base')
-rw-r--r--base/profiles.py110
-rw-r--r--base/rpm_utils.py33
2 files changed, 143 insertions, 0 deletions
diff --git a/base/profiles.py b/base/profiles.py
new file mode 100644
index 0000000..2490b3f
--- /dev/null
+++ b/base/profiles.py
@@ -0,0 +1,110 @@
+
+from os.path import join
+from subprocess import Popen, PIPE
+
+from vars import FEDORA_DIR
+
+TARGET = 0
+DIST = 1
+DISTVAR = 2
+DISTVAL = 3
+
+def distdef(dist):
+ return dist.replace('.', '')
+
+def define(key, value):
+ return '--define "%s %s"' % (key, value)
+
+def join_defines(*defines):
+ return " ".join(defines)
+
+def dist_defines(dist, distvar, distval):
+ dist = define('dist', dist)
+ distvar = define(distvar, distval)
+ distdef = define(distdef(dist), 1)
+ return join_defines([dist, distvar, distdef])
+
+head_branch = 'devel'
+
+def get_mock_cfg(distvar, distval, buildarch):
+ if distvar == 'fedora' and distval in [4, 5, 6]:
+ return '%s-%s-%s-core' % (distvar, distval, buildarch)
+ else:
+ return '%s-%s-%s' % (distvar, distval, buildarch)
+
+def dir_defines(some_dir):
+ defs = list()
+ defs.append(define('_sourcedir', join(some_dir, 'SOURCES')))
+ defs.append(define('_specdir', join(some_dir, 'SPECS')))
+ defs.append(define('_builddir', join(some_dir, 'BUILD')))
+ defs.append(define('_srcrpmdir', join(some_dir, 'SRPMS')))
+ defs.append(define('_rpmdir', join(some_dir, 'RPMS')))
+ return join_defines(defs)
+
+def ver_rel(spec_file, defines):
+ rpm_p = Popen('rpm %s -q --qf "%%{VERSION} %%{RELEASE}\n" --specfile %s' % \
+ (defines, spec_file), stdout=PIPE, shell=True)
+ verrels = rpm_p.communicate()[0]
+ verrel = verrels.split('\n')[0]
+ return verrel.split(' ')
+
+#taken from CVS for now
+distro = [{'RHL-7':('rhl7','.rhl7','rhl','7'),
+ 'RHL-8':('rhl8','.rhl8','rhl','8'),
+ 'RHL-9':('rhl9','.rhl9','rhl','9'),
+ 'OLPC-2':('dist-olpc2','.olpc2','olpc','2'),
+ 'OLPC-3':('dist-olpc3','.olpc3','olpc','3'),
+ 'EL-4':('el4','.el4','epel','4'),
+ 'EL-5':('el5','.el5','epel','5'),
+ 'FC-1':('fc1','.fc1','fedora','1'),
+ 'FC-2':('fc2','.fc2','fedora','2'),
+ 'FC-3':('fc3','.fc3','fedora','3'),
+ 'FC-4':('fc4','.fc4','fedora','4'),
+ 'FC-5':('fc5','.fc5','fedora','5'),
+ 'FC-6':('fc6','.fc6','fedora','6'),
+ 'F-7':('dist-fc7','.fc7','fedora','7'),
+ 'F-8':('dist-f8','.fc8','fedora','8'),
+ 'F-9':('dist-f9','.fc9','fedora','9'),
+ 'F-10':('dist-f10','.fc10','fedora','10'),
+ 'F-11':('dist-f11','.fc11','fedora','11'),
+ 'devel':('dist-devel','.devel','fedora','10')}]
+
+# this class is temporary, it's only for mimickng CVS for now
+# later we'll come up with a better way to do custom profiles
+class Profile(object):
+ def __init__(self, branch):
+ self.branch = branch
+ self.distro = distro[branch]
+
+ @property
+ def dist_defines(self):
+ d = self.distro
+ return dist_defines(d[DIST], d[DISTVAR], d[DISTVAL])
+
+ @property
+ def mock_cfg(self):
+ d = self.distro
+ # TODO: buildarchs need to be handled somehow
+ # yes i'm lame and i did this i386 only for now
+ return get_mock_cfg(d[DISTVAR], d[DISTVAL], 'i386')
+
+ @property
+ def config_dir(self):
+ return '/etc/mock'
+
+ @property
+ def result_dir(self):
+ return FEDORA_DIR
+
+
+def main():
+ print distdef('.fc9')
+ print ver_rel('ghc-X11.spec', '')
+
+if __name__ == '__main__':
+ main()
+
+__all__ = ['TARGET', 'DISTVAR', 'distdef', 'DISTVAL', 'head_branch',
+ 'DIST', 'join_defines', 'ver_rel', 'define',
+ 'dir_defines', 'get_mock_cfg', 'dist_defines',
+ 'Profile'] \ No newline at end of file
diff --git a/base/rpm_utils.py b/base/rpm_utils.py
new file mode 100644
index 0000000..bfdae46
--- /dev/null
+++ b/base/rpm_utils.py
@@ -0,0 +1,33 @@
+from __future__ import with_statement
+
+import re
+import rpm
+
+from contextlib import contextmanager
+from base import log
+
+class RPMSpec(object):
+ def __init__(self, spec_file):
+ self.contents = [x for x in file(spec_file)]
+
+ def version(self):
+ ver_line = [x for x in self.contents if x.startswith('Version:')][0]
+ ver_re = re.search(r'Version: (.*)', ver_line)
+ return ver_re.groups()[0]
+
+ def rel(self):
+ rel_line = [x for x in self.contents if x.startswith('Release:')][0]
+ rel_re = re.search(r'Release: (.*)', rel_line)
+ return rel_re.groups()[0]
+
+@contextmanager
+def rpm_macros(**keys):
+ for key, value in keys.iteritems():
+ log.debug('setting...')
+ log.debug(key + ' ' + value)
+ rpm.addMacro(key, value)
+ yield
+ for key, value in keys.iteritems():
+ rpm.delMacro(key)
+
+__all__ = ['rpm_macros', 'RPMSpec'] \ No newline at end of file