1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import tarfile
from os import makedirs, getcwd, chdir
from shutil import copyfileobj, copytree
from os.path import abspath, join, split, splitext, basename
from base.module import Module
from base.base import log
from base.exceptions import ExecutionException
#TODO: Find universal library for parsing URLs and PATHs alike
class Package(Module):
def __init__(self, name=None):
if not name:
#detect name somehow
pass
# TODO: the following
#check location
#determine type of package
# to configure commands
self.name = name
def create(self, name):
if not self.name:
makedirs(join(getcwd(), name))
def add_spec(self, spec_file, name=None):
log.debug('spec_file is %s' % spec_file)
log.debug('name might be %s' % name)
if self.name:
name = self.name
log.debug('spec_file_name is %s' % name + '.spec')
try:
# we're using copyfileobj so later we can do this from a URL
src = file(spec_file, 'rb')
dst = file(join(getcwd(), name, name + '.spec'), 'wb')
copyfileobj(src, dst)
src.close()
dst.close()
except IOError, e:
log.error(str(e))
raise ExecutionException(e, 'spec-file could not be added')
def add_sourceball(self, sourceball_name, name=None, extract_dir=None):
if self.name:
name = self.name
#TODO: this is temporary
else:
log.debug(abspath(name))
chdir(abspath(name))
try:
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)
orig_extract_dir = extract_dir + '_orig'
sourceball.extractall()
copytree(abspath(extract_dir), abspath(orig_extract_dir))
finally:
#TODO: figure out what exceptions TarFile will throw
pass
|