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
|
from portage_util import writemsg
import portage_file
import os, sys
from portage_data import portage_gid
class cache:
"""
Maintains the cache information about eclasses used in ebuild.
"""
def __init__(self,porttree_root,overlays=[]):
self.porttree_root = porttree_root
self.eclasses = {} # {"Name": ("location","_mtime_")}
# screw with the porttree ordering, w/out having bash inherit match it, and I'll hurt you.
# ~harring
self.porttrees = [self.porttree_root]+overlays
self.porttrees = tuple(map(portage_file.normpath, self.porttrees))
self._master_eclass_root = os.path.join(self.porttrees[0],"eclass")
self.update_eclasses()
def close_caches(self):
import traceback
traceback.print_stack()
print "%s close_cache is deprecated" % self.__class__
self.eclasses.clear()
def flush_cache(self):
import traceback
traceback.print_stack()
print "%s flush_cache is deprecated" % self.__class__
self.update_eclasses()
def update_eclasses(self):
self.eclasses = {}
eclass_len = len(".eclass")
for x in [portage_file.normpath(os.path.join(y,"eclass")) for y in self.porttrees]:
if not os.path.isdir(x):
continue
for y in [y for y in os.listdir(x) if y.endswith(".eclass")]:
try:
mtime=os.stat(x+"/"+y).st_mtime
except OSError:
continue
ys=y[:-eclass_len]
self.eclasses[ys] = (x, long(mtime))
def is_eclass_data_valid(self, ec_dict):
# print "checking", ec_dict
if not isinstance(ec_dict, dict):
return False
for eclass, tup in ec_dict.iteritems():
if eclass not in self.eclasses or tuple(tup) != self.eclasses[eclass]:
# print "failed"
return False
return True
def get_eclass_data(self, inherits, from_master_only=False):
ec_dict = {}
for x in inherits:
try:
ec_dict[x] = self.eclasses[x]
except:
print "ec=",ec_dict
print "inherits=",inherits
raise
if from_master_only and self.eclasses[x][0] != self._master_eclass_root:
return None
return ec_dict
|