We don't need an extra method for the amf controller for saving nodes, just catch the exception and do nothing with that exception.

This commit is contained in:
Shaun McDonald 2009-04-30 15:16:15 +00:00
parent 088b4ae1e2
commit 33d32bf737
2 changed files with 12 additions and 26 deletions

View file

@ -626,7 +626,12 @@ class AmfController < ApplicationController
new_node = Node.new new_node = Node.new
new_node.changeset_id = changeset_id new_node.changeset_id = changeset_id
new_node.version = v.to_i new_node.version = v.to_i
node.delete_with_history_unless_used!(new_node, user) begin
node.delete_with_history!(new_node, user)
rescue OSM::APIPreconditionFailedError => ex
# We don't do anything here as the node is being used elsewhere
# and we don't want to delete it
end
end end
end # transaction end # transaction
@ -763,7 +768,12 @@ class AmfController < ApplicationController
new_node = Node.new new_node = Node.new
new_node.changeset_id = changeset_id new_node.changeset_id = changeset_id
new_node.version = v.to_i new_node.version = v.to_i
node.delete_with_history_unless_used!(new_node, user) begin
node.delete_with_history!(new_node, user)
rescue OSM::APIPreconditionFailedError => ex
# We don't do anything with the exception as the node is in use
# elsewhere and we don't want to delete it
end
end end
end # transaction end # transaction

View file

@ -149,30 +149,6 @@ class Node < ActiveRecord::Base
end end
end end
# As above but doesn't throw an error if node is used elsewhere - instead, just silently
# returns without deleting the node. Potlatch needs this in case you ask to delete an
# off-screen node while deleting a way - it doesn't know whether the node is used
# elsewhere or not.
def delete_with_history_unless_used!(new_node, user)
unless self.visible
raise OSM::APIAlreadyDeletedError.new("node", new_node.id)
end
Node.transaction do
check_consistency(self, new_node, user)
way = WayNode.find(:first, :joins => "INNER JOIN current_ways ON current_ways.id = current_way_nodes.id",
:conditions => [ "current_ways.visible = ? AND current_way_nodes.node_id = ?", true, self.id ])
rel = RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id",
:conditions => [ "visible = ? AND member_type='Node' and member_id=? ", true, self.id])
if way.nil? and rel.nil?
self.changeset_id = new_node.changeset_id
self.visible = false
changeset.update_bbox!(bbox)
save_with_history!
end
end
end
def update_from(new_node, user) def update_from(new_node, user)
check_consistency(self, new_node, user) check_consistency(self, new_node, user)