7063: endless loop in probably_alive_range

Port from gramps34 branch my fix after retest by the bug submitter.

    Add a hack protection for descendants like we already have
    for ancestors, and add a debug printout.

svn: r23161
This commit is contained in:
Vassilii Khachaturov 2013-09-18 14:48:13 +00:00
parent 2741628972
commit 6df93d7182

View File

@ -338,13 +338,15 @@ class ProbablyAlive(object):
date1, date2, explain, other = descendants_too_old(person, self.AVG_GENERATION_GAP)
except RuntimeError:
raise DatabaseError(
_("Database error: %s is defined as his or her own ancestor") %
_("Database error: loop in %s's descendants") %
name_displayer.display(person))
if date1 and date2:
return (date1, date2, explain, other)
def ancestors_too_old(person, year):
LOG.debug("ancestors_too_old('{}', {})".format(
name_displayer.display(person), year) )
family_handle = person.get_main_parents_family_handle()
if family_handle:
family = self.db.get_family_from_handle(family_handle)
@ -446,9 +448,14 @@ class ProbablyAlive(object):
return (None, None, "", None)
# If there are ancestors that would be too old in the current year
# then assume our person must be dead too.
date1, date2, explain, other = ancestors_too_old (person, - self.AVG_GENERATION_GAP)
try:
# If there are ancestors that would be too old in the current year
# then assume our person must be dead too.
date1, date2, explain, other = ancestors_too_old (person, - self.AVG_GENERATION_GAP)
except RuntimeError:
raise Errors.DatabaseError(
_("Database error: loop in %s's ancestors") %
name_displayer.display(person))
if date1 and date2:
return (date1, date2, explain, other)