When auto-hinting, also try a "minimal" package set

The minimal set is comprised of only the first level of (reverse)
dependencies, before any further iterations of packages are added to
the set.  In some cases, the result of the full iteration will contain
packages which cause problems when migrated but the minimal set,
although possibly a less optimal solution, may be able to migrate
successfully.

It is assumed that migrating the larger set of packages will be
preferred if possible, so minimal sets are tried later.

Signed-off-by: Adam D. Barratt <adam@adam-barratt.org.uk>
master
Adam D. Barratt 13 years ago
parent 4235b92460
commit b9ac7af03b

@ -2593,6 +2593,7 @@ class Britney:
# loop on them # loop on them
candidates = [] candidates = []
mincands = []
for e in excuses: for e in excuses:
excuse = excuses[e] excuse = excuses[e]
if e in self.sources['testing'] and self.sources['testing'][e][VERSION] == excuse.ver[1]: if e in self.sources['testing'] and self.sources['testing'][e][VERSION] == excuse.ver[1]:
@ -2603,29 +2604,34 @@ class Britney:
candidates.append(hint.items()) candidates.append(hint.items())
else: else:
items = [ (e, excuse.ver[1]) ] items = [ (e, excuse.ver[1]) ]
looped = False
for item, ver in items: for item, ver in items:
# excuses which depend on "item" or are depended on by it # excuses which depend on "item" or are depended on by it
items.extend( [ (x, excuses[x].ver[1]) for x in excuses if \ items.extend( [ (x, excuses[x].ver[1]) for x in excuses if \
(item in excuses[x].deps or x in excuses[item].deps) \ (item in excuses[x].deps or x in excuses[item].deps) \
and (x, excuses[x].ver[1]) not in items ] ) and (x, excuses[x].ver[1]) not in items ] )
if not looped and len(items) > 1:
mincands.append(items[:])
looped = True
if len(items) > 1: if len(items) > 1:
candidates.append(items) candidates.append(items)
to_skip = [] for l in [ candidates, mincands ]:
for i in range(len(candidates)): to_skip = []
for j in range(i+1, len(candidates)): for i in range(len(l)):
if i in to_skip or j in to_skip: for j in range(i+1, len(l)):
# we already know this list isn't interesting if i in to_skip or j in to_skip:
continue # we already know this list isn't interesting
elif frozenset(candidates[i]) >= frozenset(candidates[j]): continue
# j is a subset of i; ignore it elif frozenset(l[i]) >= frozenset(l[j]):
to_skip.append(j) # j is a subset of i; ignore it
elif frozenset(candidates[i]) <= frozenset(candidates[j]): to_skip.append(j)
# i is a subset of j; ignore it elif frozenset(l[i]) <= frozenset(l[j]):
to_skip.append(i) # i is a subset of j; ignore it
for i in range(len(candidates)): to_skip.append(i)
if i not in to_skip: for i in range(len(l)):
self.do_hint("easy", "autohinter", candidates[i]) if i not in to_skip:
self.do_hint("easy", "autohinter", l[i])
def old_libraries(self): def old_libraries(self):
"""Detect old libraries left in testing for smooth transitions """Detect old libraries left in testing for smooth transitions

Loading…
Cancel
Save