Merge 15165:15373 from trunk.
This commit is contained in:
parent
e9bea64bf6
commit
3d906fe8c6
25 changed files with 191 additions and 110 deletions
|
@ -25,7 +25,7 @@ class OldRelation < ActiveRecord::Base
|
|||
save!
|
||||
clear_aggregation_cache
|
||||
clear_association_cache
|
||||
@attributes.update(OldRelation.find(:first, :conditions => ['id = ? AND timestamp = ?', self.id, self.timestamp]).instance_variable_get('@attributes'))
|
||||
@attributes.update(OldRelation.find(:first, :conditions => ['id = ? AND timestamp = ?', self.id, self.timestamp], :order => "version desc").instance_variable_get('@attributes'))
|
||||
|
||||
# ok, you can touch from here on
|
||||
|
||||
|
@ -81,7 +81,7 @@ class OldRelation < ActiveRecord::Base
|
|||
# has_many :relation_tags, :class_name => 'OldRelationTag', :foreign_key => 'id'
|
||||
|
||||
def old_members
|
||||
OldRelationMember.find(:all, :conditions => ['id = ? AND version = ?', self.id, self.version])
|
||||
OldRelationMember.find(:all, :conditions => ['id = ? AND version = ?', self.id, self.version], :order => "sequence_id")
|
||||
end
|
||||
|
||||
def old_tags
|
||||
|
|
|
@ -30,7 +30,7 @@ class OldWay < ActiveRecord::Base
|
|||
save!
|
||||
clear_aggregation_cache
|
||||
clear_association_cache
|
||||
@attributes.update(OldWay.find(:first, :conditions => ['id = ? AND timestamp = ?', self.id, self.timestamp]).instance_variable_get('@attributes'))
|
||||
@attributes.update(OldWay.find(:first, :conditions => ['id = ? AND timestamp = ?', self.id, self.timestamp], :order => "version desc").instance_variable_get('@attributes'))
|
||||
|
||||
# ok, you can touch from here on
|
||||
|
||||
|
|
|
@ -208,7 +208,7 @@ class Relation < ActiveRecord::Base
|
|||
|
||||
def add_member(type,id,role)
|
||||
@members = Array.new unless @members
|
||||
@members += [[type,id,role]]
|
||||
@members += [[type,id.to_i,role]]
|
||||
end
|
||||
|
||||
def add_tag_keyval(k, v)
|
||||
|
@ -385,21 +385,18 @@ class Relation < ActiveRecord::Base
|
|||
# changed members in an array, as the bounding box updates for
|
||||
# elements are per-element, not blanked on/off like for tags.
|
||||
changed_members = Array.new
|
||||
members = Hash.new
|
||||
self.members.each do |m|
|
||||
# should be: h[[m.id, m.type]] = m.role, but someone prefers arrays
|
||||
members[[m[1], m[0]]] = m[2]
|
||||
end
|
||||
relation_members.each do |old_member|
|
||||
key = [old_member.member_id.to_s, old_member.member_type]
|
||||
if members.has_key? key
|
||||
members.delete key
|
||||
else
|
||||
members = self.members.clone
|
||||
self.relation_members.each do |old_member|
|
||||
key = [old_member.member_type, old_member.member_id, old_member.member_role]
|
||||
i = members.index key
|
||||
if i.nil?
|
||||
changed_members << key
|
||||
else
|
||||
members.delete_at i
|
||||
end
|
||||
end
|
||||
# any remaining members must be new additions
|
||||
changed_members += members.keys
|
||||
changed_members += members
|
||||
|
||||
# update the members. first delete all the old members, as the new
|
||||
# members may be in a different order and i don't feel like implementing
|
||||
|
@ -433,21 +430,17 @@ class Relation < ActiveRecord::Base
|
|||
changed_members.collect { |id,type| type == "relation" }.
|
||||
inject(false) { |b,s| b or s }
|
||||
|
||||
if tags_changed or any_relations
|
||||
# add all non-relation bounding boxes to the changeset
|
||||
# FIXME: check for tag changes along with element deletions and
|
||||
# make sure that the deleted element's bounding box is hit.
|
||||
self.members.each do |type, id, role|
|
||||
if type != "Relation"
|
||||
update_changeset_element(type, id)
|
||||
end
|
||||
end
|
||||
else
|
||||
# add only changed members to the changeset
|
||||
changed_members.each do |id, type|
|
||||
if type != "Relation"
|
||||
update_changeset_element(type, id)
|
||||
end
|
||||
update_members = if tags_changed or any_relations
|
||||
# add all non-relation bounding boxes to the changeset
|
||||
# FIXME: check for tag changes along with element deletions and
|
||||
# make sure that the deleted element's bounding box is hit.
|
||||
self.members
|
||||
else
|
||||
changed_members
|
||||
end
|
||||
update_members.each do |type, id, role|
|
||||
if type != "Relation"
|
||||
update_changeset_element(type, id)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue