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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# R Overlay -- ebuild creation, <?>
# Copyright 2006-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import logging
from roverlay.ebuild import depres, ebuilder, evars
#from roverlay.ebuild.construction import EbuildConstruction
from roverlay.rpackage.descriptionreader import DescriptionReader
LOGGER = logging.getLogger ( 'EbuildCreation' )
class EbuildCreation ( object ):
def __init__ ( self, package_info ):
self.package_info = package_info
self.logger = LOGGER.getChild ( package_info ['name'] )
# > 0 busy/working; 0 == done,success; < 0 done,fail
self.status = 1
self.package_info.set_readonly()
# --- end of __init__ (...) ---
def done ( self ) : return self.status < 1
def busy ( self ) : return self.status > 0
def success ( self ) : return self.status == 0
def fail ( self ) : return self.status < 0
def run ( self ):
if self.status < 1:
raise Exception ( "Cannot run again." )
try:
self._lazyimport_desc_data()
self.package_info.set_readonly()
if self._make_ebuild():
self.logger.debug ( "Ebuild is ready." )
self.status = 0
else:
self.logger.info ( "Cannot create an ebuild for this package." )
self.status = -1
except Exception as e:
# log this and set status to fail
self.status = -10
self.logger.exception ( e )
# --- end of run (...) ---
def _lazyimport_desc_data ( self ):
if self.package_info.get ( 'desc_data',
fallback_value=None, do_fallback=True ) is None:
logging.warning ( 'Reading description data now.' )
reader = DescriptionReader (
self.package_info,
logger=self.logger,
read_now=True
)
self.package_info.set_writeable()
self.package_info.update (
desc_data=reader.get_desc ( run_if_unset=False )
)
del reader
# --- end of _lazyimport_desc_data (...) ---
def _make_ebuild ( self ):
desc = self.package_info ['desc_data']
if desc is None:
self.logger (
'desc empty- cannot create an ebuild for this package.'
)
return False
ebuild = ebuilder.Ebuilder()
_dep_resolution = depres.EbuildDepRes (
self.package_info, self.logger,
create_iuse=True, run_now=True
)
if not _dep_resolution.success():
# log here?
return False
dep_result = _dep_resolution.get_result()
# add *DEPEND, IUSE to the ebuild
ebuild.use ( *dep_result [1] )
description = None
if 'Title' in desc:
description = desc ['Title']
if 'Description' in desc:
if description is None:
description = desc ['Description']
else:
description += '// ' + desc ['Description']
if description is not None:
ebuild.use ( evars.DESCRIPTION ( description ) )
ebuild.use ( evars.SRC_URI ( self.package_info ['SRC_URI'] ) )
ebuild_text = ebuild.to_str()
self.package_info.update_now (
ebuild=ebuild_text,
depres_result=dep_result
)
return True
|