X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/33d32bf7377150a85aa8027bfda3fc70b76f119b..fe13e13d16e3f2f8c770a02e06bf25e173df1b77:/app/controllers/amf_controller.rb diff --git a/app/controllers/amf_controller.rb b/app/controllers/amf_controller.rb index c175212e2..24093cd09 100644 --- a/app/controllers/amf_controller.rb +++ b/app/controllers/amf_controller.rb @@ -26,6 +26,7 @@ # Any method that returns a status code (0 for ok) can also send: # return(-1,"message") <-- just puts up a dialogue # return(-2,"message") <-- also asks the user to e-mail me +# return(-3,'type',id) <-- version conflict # # To write to the Rails log, use logger.info("message"). @@ -362,7 +363,7 @@ class AmfController < ApplicationController waycreated=revdates[0] revdates.uniq! revdates.sort! - revdates.reverse! + revdates.reverse! # Remove any dates (from nodes) before first revision date of way revdates.delete_if { |d| d ex return [-1, "The changeset #{ex.changeset.id} was closed at #{ex.changeset.closed_at}."] rescue OSM::APIVersionMismatchError => ex - # Really need to check to see whether this is a server load issue, and the - # last version was in the same changeset, or belongs to the same user, then - # we can return something different return [-3, "Sorry, someone else has changed this relation since you started editing. Please click the 'Edit' tab to reload the area. The server said: #{ex}"] rescue OSM::APIAlreadyDeletedError => ex return [-1, "The relation has already been deleted."] @@ -594,6 +594,7 @@ class AmfController < ApplicationController else # We're updating an existing node previous=Node.find(id) + node.id=id previous.update_from(node, user) nodeversions[previous.id] = previous.version end @@ -615,6 +616,7 @@ class AmfController < ApplicationController else way = Way.find(originalway) if way.tags!=attributes or way.nds!=pointlist or !way.visible? + new_way.id=originalway way.update_from(new_way, user) end end @@ -626,6 +628,7 @@ class AmfController < ApplicationController new_node = Node.new new_node.changeset_id = changeset_id new_node.version = v.to_i + new_node.id = id.to_i begin node.delete_with_history!(new_node, user) rescue OSM::APIPreconditionFailedError => ex @@ -640,9 +643,6 @@ class AmfController < ApplicationController rescue OSM::APIChangesetAlreadyClosedError => ex return [-2, "Sorry, your changeset #{ex.changeset.id} has been closed (at #{ex.changeset.closed_at})."] rescue OSM::APIVersionMismatchError => ex - # Really need to check to see whether this is a server load issue, and the - # last version was in the same changeset, or belongs to the same user, then - # we can return something different return [-3, "Sorry, someone else has changed this way since you started editing. Click the 'Edit' tab to reload the area. The server said: #{ex}"] rescue OSM::APITooManyWayNodesError => ex return [-1, "You have tried to upload a really long way with #{ex.provided} points: only #{ex.max} are allowed."] @@ -690,12 +690,15 @@ class AmfController < ApplicationController new_node.create_with_history(user) elsif visible # We're updating the node + new_node.id=id node.update_from(new_node, user) else # We're deleting the node + new_node.id=id node.delete_with_history!(new_node, user) end - end # transaction + + end # transaction if id <= 0 return [0, id, new_node.id, new_node.version] @@ -705,9 +708,6 @@ class AmfController < ApplicationController rescue OSM::APIChangesetAlreadyClosedError => ex return [-1, "The changeset #{ex.changeset.id} was closed at #{ex.changeset.closed_at}"] rescue OSM::APIVersionMismatchError => ex - # Really need to check to see whether this is a server load issue, and the - # last version was in the same changeset, or belongs to the same user, then - # we can return something different return [-3, "Sorry, someone else has changed this point since you started editing. Please click the 'Edit' tab to reload the area. The server said: #{ex}"] rescue OSM::APIAlreadyDeletedError => ex return [-1, "The point has already been deleted"] @@ -759,6 +759,7 @@ class AmfController < ApplicationController delete_way = Way.new delete_way.version = way_version delete_way.changeset_id = changeset_id + delete_way.id = way_id old_way.delete_with_history!(delete_way, user) # -- Delete unwanted nodes @@ -768,6 +769,7 @@ class AmfController < ApplicationController new_node = Node.new new_node.changeset_id = changeset_id new_node.version = v.to_i + new_node.id = id.to_i begin node.delete_with_history!(new_node, user) rescue OSM::APIPreconditionFailedError => ex