add some debugging output to dependencies calculation function

This commit is contained in:
Fabio Erculiani
2009-06-10 12:25:35 +02:00
parent fa5a7b948c
commit d5b78d880a
+137 -16
View File
@@ -699,77 +699,149 @@ class CalculatorsMixin:
while mydep:
const_debug_write(__name__,
"generate_dependency_tree analyzing => %s" % (
mydep,))
dep_level, dep_atom = mydep
# already analyzed in this call
if dep_atom in treecache:
const_debug_write(__name__,
"generate_dependency_tree already in treecache => %s" % (
dep_atom,))
mydep = mybuffer.pop()
const_debug_write(__name__, "---")
continue
treecache.add(dep_atom)
if dep_atom == None: # corrupted entry
if dep_atom is None: # corrupted entry
const_debug_write(__name__,
"generate_dependency_tree broken entry in DB => %s" % (
mydep,))
mydep = mybuffer.pop()
const_debug_write(__name__, "---")
continue
# conflicts
if dep_atom[0] == "!":
c_idpackage, xst = cdb_atom_match(dep_atom[1:])
if c_idpackage != -1:
myreplacement = lookup_conflict_replacement(dep_atom[1:], c_idpackage, deep_deps = deep_deps)
myreplacement = lookup_conflict_replacement(dep_atom[1:],
c_idpackage, deep_deps = deep_deps)
const_debug_write(__name__,
"generate_dependency_tree conflict replacement => %s" % (
myreplacement,))
if (myreplacement != None) and (myreplacement not in treecache):
mybuffer.push((dep_level+1,myreplacement))
else:
conflicts.add(c_idpackage)
mydep = mybuffer.pop()
const_debug_write(__name__, "---")
continue
# atom found?
if virgin:
virgin = False
m_idpackage, m_repo = matched_atom
dbconn = open_repo(m_repo)
myidpackage, idreason = dbconn.idpackageValidator(m_idpackage)
if myidpackage == -1: m_idpackage = -1
const_debug_write(__name__,
"generate_dependency_tree virgin match masked? => %s - %s" % (
myidpackage, idreason,))
if myidpackage == -1:
m_idpackage = -1
else:
m_idpackage, m_repo = atom_match(dep_atom)
const_debug_write(__name__,
"generate_dependency_tree matching %s => (%s, %s)" % (
dep_atom, m_idpackage, m_repo,))
if m_idpackage == -1:
const_debug_write(__name__,
"generate_dependency_tree dep not found => %s" % (
dep_atom,))
deps_not_found.add(dep_atom)
mydep = mybuffer.pop()
const_debug_write(__name__, "---")
continue
# check if atom has been already pulled in
matchdb = open_repo(m_repo)
matchatom = matchdb.retrieveAtom(m_idpackage)
matchkey, matchslot = matchdb.retrieveKeySlot(m_idpackage)
const_debug_write(__name__,
"generate_dependency_tree idpackage %s => %s - %s:%s" % (
m_idpackage, matchatom, matchkey, matchslot))
if (dep_atom != matchatom) and (matchatom in treecache):
mydep = mybuffer.pop()
const_debug_write(__name__,
"generate_dependency_tree matchatom %s already in cache" % (
matchatom,))
const_debug_write(__name__, "---")
continue
treecache.add(matchatom)
const_debug_write(__name__,
"generate_dependency_tree check if key + slot cache => %s" % (
(matchslot, matchkey),))
# check if key + slot has been already pulled in
if (matchslot,matchkey) in keyslotcache:
if (matchslot, matchkey) in keyslotcache:
mydep = mybuffer.pop()
const_debug_write(__name__, "---")
continue
else:
keyslotcache.add((matchslot,matchkey))
keyslotcache.add((matchslot, matchkey))
const_debug_write(__name__,
"generate_dependency_tree not in key + slot cache => %s" % (
(matchslot, matchkey),))
match = (m_idpackage, m_repo,)
# result already analyzed?
if match in matchfilter:
mydep = mybuffer.pop()
const_debug_write(__name__, "---")
continue
const_debug_write(__name__,
"generate_dependency_tree match NOT already analyzed => %s" % (
match,))
# all checks passed, well done
matchfilter.add(match)
treedepth = dep_level+1
deptree.add((dep_level,match)) # add match
# extra hooks
cm_idpackage, cm_result = cdb_atom_match(matchkey, matchSlot = matchslot)
cm_idpackage, cm_result = cdb_atom_match(matchkey,
matchSlot = matchslot)
if cm_idpackage != -1:
broken_atoms = lookup_library_breakages(match, (cm_idpackage, cm_result,), deep_deps = deep_deps)
inverse_deps = lookup_inverse_dependencies(match, (cm_idpackage, cm_result,))
broken_atoms = lookup_library_breakages(match,
(cm_idpackage, cm_result,), deep_deps = deep_deps)
const_debug_write(__name__,
"generate_dependency_tree lib broken atoms for %s => %s" % (
matchkey+":"+matchslot, broken_atoms,))
inverse_deps = lookup_inverse_dependencies(match,
(cm_idpackage, cm_result,))
const_debug_write(__name__,
"generate_dependency_tree inverse deps for %s => %s" % (
matchkey+":"+matchslot, inverse_deps,))
if inverse_deps:
deptree.remove((dep_level,match))
for ikey,islot in inverse_deps:
@@ -779,24 +851,67 @@ class CalculatorsMixin:
keyslotcache.add((ikey,islot))
deptree.add((treedepth,match))
treedepth += 1
for x in broken_atoms:
if (tuple(x.split(":")) not in keyslotcache) and (x not in treecache):
mybuffer.push((treedepth,x))
myundeps = filter(my_dep_filter,matchdb.retrieveDependenciesList(m_idpackage))
m_deplist = matchdb.retrieveDependenciesList(m_idpackage)
const_debug_write(__name__,
"generate_dependency_tree dependency list for %s => %s" % (
m_idpackage, m_deplist,))
myundeps = filter(my_dep_filter, m_deplist)
const_debug_write(__name__,
"generate_dependency_tree filtered dependency list => %s" % (
myundeps,))
if not empty_deps:
myundeps = filter(my_dep_filter,get_unsatisfied_deps(myundeps, deep_deps, depcache = filter_unsat_cache))
m_unsat_deplist = get_unsatisfied_deps(myundeps, deep_deps,
depcache = filter_unsat_cache)
const_debug_write(__name__,
"generate_dependency_tree unsatisfied dependencies (deep: %s) => %s" % (
deep_deps, m_unsat_deplist,))
myundeps = filter(my_dep_filter, m_unsat_deplist)
const_debug_write(__name__,
"generate_dependency_tree filtered UNSATISFIED dependencies => %s" % (
myundeps,))
# PDEPENDs support
if myundeps:
post_deps = [x for x in matchdb.retrievePostDependencies(m_idpackage) if x in myundeps]
if post_deps:
# only filter if post_deps contains something
myundeps = [x for x in myundeps if x not in post_deps]
for x in post_deps: mybuffer.push((-1,x)) # always after the package itself
for x in myundeps: mybuffer.push((treedepth,x))
post_deps = [x for x in \
matchdb.retrievePostDependencies(m_idpackage) if x \
in myundeps]
const_debug_write(__name__,
"generate_dependency_tree POST dependencies => %s" % (
post_deps,))
if post_deps:
# do some filtering
# it is correct to not use my_dep_filter here
myundeps = [x for x in myundeps if x not in post_deps]
const_debug_write(__name__,
"generate_dependency_tree POST dependencies ADDED => %s" % (
myundeps,))
for x in post_deps:
mybuffer.push((-1, x)) # always after the package itself
for x in myundeps:
mybuffer.push((treedepth, x))
mydep = mybuffer.pop()
const_debug_write(__name__, "---")
if deps_not_found:
return list(deps_not_found),-2
@@ -1025,6 +1140,8 @@ class CalculatorsMixin:
keyslotcache = set()
matchfilter = set()
for matched_atom in matched_atoms:
const_debug_write(__name__,
"get_required_packages matched_atom => %s" % (matched_atom,))
if not quiet:
count += 1
@@ -1040,6 +1157,10 @@ class CalculatorsMixin:
keyslotcache = keyslotcache
)
const_debug_write(__name__,
"get_required_packages deptree => %s -- %s" % (
newtree, result,))
if result == -2: # deps not found
error_generated = -2
error_tree |= set(newtree) # it is a list, we convert it into set and update error_tree