X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/43988beec3fd4da67b2cacad771ca339ef60a8ab..0d16fd57d46a4aaa1c170d79772e549bfadf288a:/app/models/way.rb diff --git a/app/models/way.rb b/app/models/way.rb index f608dccc8..4f988dc9d 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -191,11 +191,6 @@ class Way < ActiveRecord::Base # in the hash to be overwritten. raise OSM::APIDuplicateTagsError.new("way", self.id, k) if @tags.include? k - # check tag size here, as we don't create a WayTag object until - # just before we save... - raise OSM::APIBadUserInput.new("Way #{self.id} has a tag with too long a key, '#{k}'.") if k.length > 255 - raise OSM::APIBadUserInput.new("Way #{self.id} has a tag with too long a value, '#{k}'='#{v}'.") if v.length > 255 - @tags[k] = v end @@ -209,17 +204,20 @@ class Way < ActiveRecord::Base end def update_from(new_way, user) - check_consistency(self, new_way, user) - unless new_way.preconditions_ok?(self.nds) - raise OSM::APIPreconditionFailedError.new("Cannot update way #{self.id}: data is invalid.") + Way.transaction do + self.lock! + check_consistency(self, new_way, user) + unless new_way.preconditions_ok?(self.nds) + raise OSM::APIPreconditionFailedError.new("Cannot update way #{self.id}: data is invalid.") + end + + self.changeset_id = new_way.changeset_id + self.changeset = new_way.changeset + self.tags = new_way.tags + self.nds = new_way.nds + self.visible = true + save_with_history! end - - self.changeset_id = new_way.changeset_id - self.changeset = new_way.changeset - self.tags = new_way.tags - self.nds = new_way.nds - self.visible = true - save_with_history! end def create_with_history(user) @@ -263,6 +261,7 @@ class Way < ActiveRecord::Base # provide repeatable reads for the used-by checks. this means it # shouldn't be possible to get race conditions. Way.transaction do + self.lock! check_consistency(self, new_way, user) rel = RelationMember.find(:first, :joins => :relation, :conditions => [ "visible = ? AND member_type='Way' and member_id=? ", true, self.id])