Commit phoenix asap to fix a bug and simplify code in merge code

svn: r16937
This commit is contained in:
Michiel Nauta 2011-03-26 18:51:29 +00:00
parent ab4f16b12e
commit 5dadd0c866
8 changed files with 33 additions and 29 deletions

View File

@ -212,26 +212,24 @@ class MergeEventQuery(object):
self.phoenix.merge(self.titanic)
with DbTxn(_("Merge Event Objects"), self.database) as trans:
self.database.commit_event(self.phoenix, trans)
for person in self.database.iter_people():
if person.has_handle_reference("Event", old_handle):
bri = person.birth_ref_index
dri = person.death_ref_index
person.replace_handle_reference("Event", old_handle, new_handle)
if person.birth_ref_index != bri and person.birth_ref_index==-1:
person.replace_handle_reference("Event", old_handle,
new_handle)
if person.birth_ref_index != bri and \
person.birth_ref_index == -1:
for index, ref in enumerate(person.get_event_ref_list()):
if ref.ref == new_handle:
event = self.phoenix
else:
event = self.database.get_event_from_handle(ref.ref)
event = self.database.get_event_from_handle(ref.ref)
if event.type.is_birth() and ref.role.is_primary():
person.birth_ref_index = index
break
if person.death_ref_index != dri and person.death_ref_index==-1:
if person.death_ref_index != dri and \
person.death_ref_index == -1:
for index, ref in enumerate(person.get_event_ref_list()):
if ref.ref == new_handle:
event = self.phoenix
else:
event = self.database.get_event_from_handle(ref.ref)
event = self.database.get_event_from_handle(ref.ref)
if event.type.is_death() and ref.role.is_primary():
person.death_ref_index = index
break
@ -239,8 +237,8 @@ class MergeEventQuery(object):
for family in self.database.iter_families():
if family.has_handle_reference("Event", old_handle):
family.replace_handle_reference("Event", old_handle, new_handle)
family.replace_handle_reference("Event", old_handle,
new_handle)
self.database.commit_family(family, trans)
self.database.remove_event(old_handle, trans)
self.database.commit_event(self.phoenix, trans)

View File

@ -230,11 +230,20 @@ class MergeFamilyQuery(object):
"""
Create database query to merge two families.
"""
def __init__(self, database, phoenix, titanic, phoenix_fh, phoenix_mh):
def __init__(self, database, phoenix, titanic, phoenix_fh=None,
phoenix_mh=None):
self.database = database
self.phoenix = phoenix
self.titanic = titanic
self.phoenix_fh = phoenix_fh
if phoenix_fh is None:
self.phoenix_fh = self.phoenix.get_father_handle()
else:
self.phoenix_fh = phoenix_fh
if phoenix_mh is None:
self.phoenix_mh = self.phoenix.get_mother_handle()
else:
self.phoenix_mh = phoenix_mh
if self.phoenix.get_father_handle() == self.phoenix_fh:
self.titanic_fh = self.titanic.get_father_handle()
self.father_swapped = False
@ -242,7 +251,6 @@ class MergeFamilyQuery(object):
assert self.phoenix_fh == self.titanic.get_father_handle()
self.titanic_fh = self.phoenix.get_father_handle()
self.father_swapped = True
self.phoenix_mh = phoenix_mh
if self.phoenix.get_mother_handle() == self.phoenix_mh:
self.titanic_mh = self.titanic.get_mother_handle()
self.mother_swapped = False
@ -326,6 +334,7 @@ class MergeFamilyQuery(object):
self.phoenix = self.database.get_family_from_handle(new_handle)
self.titanic = self.database.get_family_from_handle(old_handle)
self.phoenix.merge(self.titanic)
self.database.commit_family(self.phoenix, trans)
for childref in self.titanic.get_child_ref_list():
child = self.database.get_person_from_handle(
childref.get_reference_handle())
@ -348,4 +357,3 @@ class MergeFamilyQuery(object):
person.replace_handle_reference('Family', old_handle,new_handle)
self.database.commit_person(person, trans)
self.database.remove_family(old_handle, trans)
self.database.commit_family(self.phoenix, trans)

View File

@ -186,6 +186,7 @@ class MergeMediaQuery(object):
self.phoenix.merge(self.titanic)
with DbTxn(_("Merge Media Objects"), self.database) as trans:
self.database.commit_media_object(self.phoenix, trans)
for person in self.database.iter_people():
if person.has_media_reference(old_handle):
person.replace_media_references(old_handle, new_handle)
@ -212,4 +213,3 @@ class MergeMediaQuery(object):
self.database.commit_place(place, trans)
self.database.remove_object(old_handle, trans)
self.database.commit_media_object(self.phoenix, trans)

View File

@ -198,6 +198,7 @@ class MergeNoteQuery(object):
old_handle = self.titanic.get_handle()
self.phoenix.merge(self.titanic)
with DbTxn(_("Merge Notes"), self.database) as trans:
self.database.commit_note(self.phoenix, trans)
for person in self.database.iter_people():
if person.has_note_reference(old_handle):
@ -235,4 +236,3 @@ class MergeNoteQuery(object):
self.database.commit_repository(repo, trans)
self.database.remove_note(old_handle, trans)
self.database.commit_note(self.phoenix, trans)

View File

@ -346,7 +346,7 @@ class MergePersonQuery(object):
if self.check_for_child(self.phoenix, self.titanic):
raise MergeError(_("A parent and child cannot be merged. To merge "
"these people, you must first break the relationship between "
"them"))
"them."))
def check_for_spouse(self, person1, person2):
"""Return if person1 and person2 are spouses of eachother."""
@ -382,6 +382,7 @@ class MergePersonQuery(object):
self.database.commit_person(child, trans)
if self.phoenix:
self.phoenix.remove_family_handle(family_handle)
self.database.commit_person(self.phoenix, trans)
family_father_handle = family.get_father_handle()
spouse_handle = family.get_mother_handle() if \
new_handle == family_father_handle else family_father_handle
@ -397,8 +398,7 @@ class MergePersonQuery(object):
person = self.database.get_person_from_handle(person_handle)
person.replace_handle_reference('Family', family_handle,
main_family_handle)
if person_handle != new_handle and person_handle != old_handle:
self.database.commit_person(person, trans)
self.database.commit_person(person, trans)
self.database.remove_family(family_handle, trans)
self.database.commit_family(main_family, trans)
@ -420,16 +420,15 @@ class MergePersonQuery(object):
old_handle = self.titanic.get_handle()
self.phoenix.merge(self.titanic)
self.database.commit_person(self.phoenix, trans)
for (dummy, person_handle) in self.database.find_backlink_handles(
old_handle, ['Person']):
person = self.database.get_person_from_handle(person_handle)
assert person.has_handle_reference('Person', old_handle)
person.replace_handle_reference('Person', old_handle, new_handle)
if person_handle != new_handle and person_handle != old_handle:
if person_handle != old_handle:
self.database.commit_person(person, trans)
# phoenix changed and can't be determined from database nor transaction
self.phoenix.replace_handle_reference('Person', old_handle, new_handle)
for family_handle in self.phoenix.get_parent_family_handle_list():
family = self.database.get_family_from_handle(family_handle)
@ -469,4 +468,3 @@ class MergePersonQuery(object):
parent_list.append(parents)
self.database.remove_person(old_handle, trans)
self.database.commit_person(self.phoenix, trans)

View File

@ -212,6 +212,7 @@ class MergePlaceQuery(object):
self.phoenix.merge(self.titanic)
with DbTxn(_("Merge Places"), self.database) as trans:
self.database.commit_place(self.phoenix, trans)
for person in self.database.iter_people():
if person.has_handle_reference('Place', old_handle):
person.replace_handle_reference('Place', old_handle,
@ -231,4 +232,3 @@ class MergePlaceQuery(object):
self.database.commit_event(event, trans)
self.database.remove_place(old_handle, trans)
self.database.commit_place(self.phoenix, trans)

View File

@ -173,9 +173,9 @@ class MergeRepoQuery(object):
self.phoenix.merge(self.titanic)
with DbTxn(_("Merge Repositories"), self.database) as trans:
self.database.commit_repository(self.phoenix, trans)
for source in self.database.iter_sources():
if source.has_repo_reference(old_handle):
source.replace_repo_references(old_handle, new_handle)
self.database.commit_source(source, trans)
self.database.remove_repository(old_handle, trans)
self.database.commit_repository(self.phoenix, trans)

View File

@ -199,6 +199,7 @@ class MergeSourceQuery(object):
self.phoenix.merge(self.titanic)
with DbTxn(_("Merge Source"), self.database) as trans:
self.database.commit_source(self.phoenix, trans)
for person in self.database.iter_people():
if person.has_source_reference(old_handle):
person.replace_source_references(old_handle, new_handle)
@ -235,4 +236,3 @@ class MergeSourceQuery(object):
self.database.commit_repository(repo, trans)
self.database.remove_source(old_handle, trans)
self.database.commit_source(self.phoenix, trans)