summaryrefslogtreecommitdiffstats
path: root/modules/package.py
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 /modules/package.py
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 'modules/package.py')
-rw-r--r--modules/package.py111
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']