Merge pull request #15 from aplanas/master

Fix ghost cycles problem.
This commit is contained in:
Stephan Kulow 2013-08-28 06:04:11 -07:00
commit 86659f8514

View File

@ -103,8 +103,6 @@ class Graph(dict):
"""Get the adjancent list for a vertex"""
return sorted(self.adj[v]) if v in self else set()
def cycles(self):
"""Detect cycles using Tarjan algorithm."""
index = [0]
@ -190,7 +188,7 @@ class Package(object):
self.subs = set(e.text for e in element.findall('subpkg'))
def __repr__(self):
return 'PKG: %s\nSRC: %s\nDEPS: %s\n SUBS:%s'%(self.pkg, self.src, self.deps, self.subs)
return 'PKG: %s\nSRC: %s\nDEPS: %s\n SUBS: %s'%(self.pkg, self.src, self.deps, self.subs)
def memoize(ttl=None):
@ -869,14 +867,14 @@ def _check_repo_group(self, id_, reqs, opts):
continue
# Update the currect graph and see if we have different cycles
if p.spackage in current_graph:
current_graph[p.spackage] = pkg
current_graph.remove_edges_from(set((pkg.pkg, subpkgs[p_]) for p_ in pkg.deps if p_ in subpkgs))
if pkg.pkg in current_graph:
current_graph[pkg.pkg] = pkg
current_graph.remove_edges_from(set((pkg.pkg, p_) for p_ in current_graph.edges(pkg.pkg)))
else:
current_graph.add_node(pkg.pkg, pkg)
current_graph.add_edges_from((pkg.pkg, subpkgs[p_]) for p_ in pkg.deps if p_ in subpkgs)
subpkgs.update(dict((p_, pkg.pkg) for p_ in pkg.deps))
subpkgs.update(dict((p_, pkg.pkg) for p_ in pkg.subs))
for cycle in current_graph.cycles():
if cycle not in factory_cycles:
@ -885,6 +883,8 @@ def _check_repo_group(self, id_, reqs, opts):
factory_edges = set((u, v) for u in cycle for v in factory_graph.edges(u) if v in cycle)
current_edges = set((u, v) for u in cycle for v in current_graph.edges(u) if v in cycle)
print 'New edjes:', sorted(current_edges - factory_edges)
print 'xml-commons-apis-bootstrap', current_graph.edges('xml-commons-apis-bootstrap')
print 'xml-commons', current_graph.edges('xml-commons')
# Exit if cycle found
return