From 33d32bf7377150a85aa8027bfda3fc70b76f119b Mon Sep 17 00:00:00 2001 From: Shaun McDonald Date: Thu, 30 Apr 2009 15:16:15 +0000 Subject: [PATCH] We don't need an extra method for the amf controller for saving nodes, just catch the exception and do nothing with that exception. --- app/controllers/amf_controller.rb | 14 ++++++++++++-- app/models/node.rb | 24 ------------------------ 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/app/controllers/amf_controller.rb b/app/controllers/amf_controller.rb index 5ff42fdd2..c175212e2 100644 --- a/app/controllers/amf_controller.rb +++ b/app/controllers/amf_controller.rb @@ -626,7 +626,12 @@ class AmfController < ApplicationController new_node = Node.new new_node.changeset_id = changeset_id 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 # transaction @@ -763,7 +768,12 @@ class AmfController < ApplicationController new_node = Node.new new_node.changeset_id = changeset_id 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 # transaction diff --git a/app/models/node.rb b/app/models/node.rb index 987df9b13..d85b22c9b 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -149,30 +149,6 @@ class Node < ActiveRecord::Base 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) check_consistency(self, new_node, user) -- 2.43.2