diff options
-rw-r--r-- | pym/cache/template.py | 19 | ||||
-rw-r--r-- | pym/eclass_cache.py | 12 |
2 files changed, 23 insertions, 8 deletions
diff --git a/pym/cache/template.py b/pym/cache/template.py index ff2bbeacf..547490e29 100644 --- a/pym/cache/template.py +++ b/pym/cache/template.py @@ -157,7 +157,8 @@ class database(object): def serialize_eclasses(eclass_dict): """takes a dict, returns a string representing said dict""" - return "\t".join(["%s\t%s\t%s" % (k, v[0], str(v[1])) for k,v in eclass_dict.items()]) + return "\t".join(["%s\t%s" % (k, str(v)) \ + for k, v in eclass_dict.iteritems()]) def reconstruct_eclasses(cpv, eclass_string): """returns a dict when handed a string generated by serialize_eclasses""" @@ -165,10 +166,20 @@ def reconstruct_eclasses(cpv, eclass_string): if eclasses == [""]: # occasionally this occurs in the fs backends. they suck. return {} - if len(eclasses) % 3 != 0: + + if len(eclasses) % 2 != 0 and len(eclasses) % 3 != 0: raise cache_errors.CacheCorruption(cpv, "_eclasses_ was of invalid len %i" % len(eclasses)) d={} - for x in range(0, len(eclasses), 3): - d[eclasses[x]] = (eclasses[x + 1], long(eclasses[x + 2])) + has_paths = False + try: + long(eclasses[1]) + except ValueError: + has_paths = True + if has_paths: + for x in range(0, len(eclasses), 3): + d[eclasses[x]] = long(eclasses[x + 2]) + else: + for x in range(0, len(eclasses), 2): + d[eclasses[x]] = long(eclasses[x + 1]) del eclasses return d diff --git a/pym/eclass_cache.py b/pym/eclass_cache.py index 8d2a2bb81..904e63261 100644 --- a/pym/eclass_cache.py +++ b/pym/eclass_cache.py @@ -15,6 +15,7 @@ class cache: self.porttree_root = porttree_root self.eclasses = {} # {"Name": ("location","_mtime_")} + self._eclass_locations = {} # screw with the porttree ordering, w/out having bash inherit match it, and I'll hurt you. # ~harring @@ -38,6 +39,7 @@ class cache: def update_eclasses(self): self.eclasses = {} + self._eclass_locations = {} eclass_len = len(".eclass") for x in [normalize_path(os.path.join(y,"eclass")) for y in self.porttrees]: if not os.path.isdir(x): @@ -48,13 +50,14 @@ class cache: except OSError: continue ys=y[:-eclass_len] - self.eclasses[ys] = (x, long(mtime)) + self.eclasses[ys] = long(mtime) + self._eclass_locations[ys] = x def is_eclass_data_valid(self, 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]: + for eclass, mtime in ec_dict.iteritems(): + if eclass not in self.eclasses or mtime != self.eclasses[eclass]: return False return True @@ -68,7 +71,8 @@ class cache: print "ec=",ec_dict print "inherits=",inherits raise - if from_master_only and self.eclasses[x][0] != self._master_eclass_root: + if from_master_only and \ + self._eclass_locations[x] != self._master_eclass_root: return None return ec_dict |