diff options
| author | Yaakov M. Nemoy <loupgaroublond@gmail.com> | 2008-12-29 23:11:55 -0500 |
|---|---|---|
| committer | Yaakov M. Nemoy <loupgaroublond@gmail.com> | 2008-12-29 23:11:55 -0500 |
| commit | 0cb6e545b308e79a5d4aa6c36b7366f2b0fc30fd (patch) | |
| tree | 8c30624c6191a3d7a138b8229ef829a8406b9aa0 /modules/package.py | |
| parent | 3d02771f3e2376cd459e9a4d0edf2ff0c0f22b2c (diff) | |
| download | fedora-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 'modules/package.py')
| -rw-r--r-- | modules/package.py | 111 |
1 files changed, 81 insertions, 30 deletions
diff --git a/modules/package.py b/modules/package.py index 8072938..18e4dde 100644 --- a/modules/package.py +++ b/modules/package.py @@ -1,43 +1,75 @@ from __future__ import with_statement import tarfile -from os import makedirs, getcwd, chdir +from os import makedirs, getcwd, chdir, listdir from shutil import copyfileobj, copytree -from os.path import abspath, join, split, splitext, basename +from os.path import abspath, join, split, splitext, basename, exists from configobj import ConfigObj - +from subprocess import Popen, PIPE +from urllib import urlretrieve from base.module import Module from base.base import log from base.exceptions import ExecutionException from base.util import pwd, copy +from base.profiles import ver_rel #TODO: Find universal library for parsing URLs and PATHs alike class Package(Module): def __init__(self, name=None): if not name: - log.debug(split(getcwd())) + log.debug('no name with package') + cwd = getcwd() + log.debug(split(cwd)) + if self.is_dir_pkg(cwd): + self.load_pkg(cwd) + else: + self.make_pkg(cwd) name = split(getcwd())[1] + self.code_dir = getcwd() #detect name somehow else: + log.debug('package.init with name ' + name) + dir = abspath(name) + if not exists(dir): + makedirs(dir) + if self.is_dir_pkg(dir): + self.load_pkg(dir) + else: + self.make_pkg(dir) + + def is_dir_pkg(self, dir): + with pwd(dir): + cfg = ConfigObj('.devshell') try: - cfg = ConfigObj('.devshell') if cfg['type'] == 'package': - self.code_dir = getcwd() - except: - self.code_dir = abspath(name) - with pwd(self.code_dir): - self.pkg_cfg = ConfigObj('.devshell') - if not self.pkg_cfg['type'] == 'package': - raise ExecutionException('invalid package directory') - self.name = name - - def create(self, name): - if not self.name: - makedirs(join(getcwd(), name)) - + log.debug('is type package') + return True + else: + return False + except KeyError, e: + return False + + def load_pkg(self, dir): + log.debug('package.load_pkg') + with pwd(dir): + self.cfg = ConfigObj('.devshell') + self.name = self.cfg['name'] + self.code_dir = self.cfg['code_dir'] + + def make_pkg(self, dir): + log.debug('package.make_pkg') + with pwd(dir): + code_dir = dir + name = split(getcwd())[1] + self.cfg = ConfigObj('.devshell') + self.cfg['type'] = 'package' + self.cfg['name'] = self.name = name + self.cfg['code_dir'] = self.code_dir = code_dir + self.cfg.write() + def add_spec(self, spec_file): log.debug('spec_file is %s' % spec_file) log.debug('spec_file_name is %s' % self.name + '.spec') @@ -47,21 +79,28 @@ class Package(Module): except IOError, e: log.error(str(e)) raise ExecutionException(e, 'spec-file could not be added') - + + def orig_dir(self, dir): + return dir + '_orig' + def add_sourceball(self, sourceball_name, extract_dir=None): + log.debug('addincg sourceball with code_dir ' + self.code_dir) with pwd(self.code_dir): try: - copy(sourceball_name, split(sourceball_name)[1]) - sourceball_name = split(sourceball_name)[1] - - self.pkg_cfg['sourceball'] = sourceball_name + sourceball_name = urlretrieve(sourceball_name, + split(sourceball_name)[1])[0] + + self.cfg['sourceball'] = sourceball_name sourceball = tarfile.open(sourceball_name) if not extract_dir: extract_dir = min([(x.name, x) for x in sourceball])[0] extract_dir = basename(abspath(extract_dir)) - log.debug('extract_dir is %s' % extract_dir) - self.pkg_cfg['source'] = extract_dir - orig_extract_dir = extract_dir + '_orig' + log.debug('extract_dir is %s' % extract_dir) + log.debug('config is of ' + str(self.cfg)) + self.cfg['source'] = extract_dir + log.debug('cfg[\'source\'] is ' + self.cfg['source']) + log.debug('set source') + orig_extract_dir = self.orig_dir(extract_dir) sourceball.extractall() copytree(abspath(extract_dir), abspath(orig_extract_dir)) except OSError, e: @@ -69,8 +108,20 @@ class Package(Module): #Chances are the _orig dir already exists raise ExecutionException(e, 'something went wrong') #TODO: figure out what exceptions TarFile will throw - + def close(self): - self.pkg_cfg.write() - -__all__ = ['Package']
\ No newline at end of file + log.debug('writing self.cfg for package') + with pwd(self.code_dir): + self.cfg.write() + + @property + def spec_file(self): + return self.name + '.spec' + + def get_srpm_name(self, profile): + with pwd(self.code_dir): + ver, rel = ver_rel(self.spec_file, profile.dist_defines()) + return '%s-%s-%s.src.rpm' % (self.name, ver, rel) + + +__all__ = ['Package'] |
