X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/d92fc6e526c90ffb2e2f4536f1e8f931bb450ee4..316ce7b4e94cf92ee4e231417f5ef741a1619119:/app/controllers/api/changesets_controller.rb?ds=inline diff --git a/app/controllers/api/changesets_controller.rb b/app/controllers/api/changesets_controller.rb index 77d3d7824..517cff473 100644 --- a/app/controllers/api/changesets_controller.rb +++ b/app/controllers/api/changesets_controller.rb @@ -32,7 +32,7 @@ module Api changesets = conditions_bbox(changesets, bbox) changesets = conditions_user(changesets, params["user"], params["display_name"]) changesets = conditions_time(changesets, params["time"]) - changesets = conditions_from_to(changesets, params["from"], params["to"]) + changesets = query_conditions_time(changesets) changesets = conditions_open(changesets, params["open"]) changesets = conditions_closed(changesets, params["closed"]) changesets = conditions_ids(changesets, params["changesets"]) @@ -130,58 +130,6 @@ module Api end end - ## - # download the changeset as an osmChange document. - # - # to make it easier to revert diffs it would be better if the osmChange - # format were reversible, i.e: contained both old and new versions of - # modified elements. but it doesn't at the moment... - # - # this method cannot order the database changes fully (i.e: timestamp and - # version number may be too coarse) so the resulting diff may not apply - # to a different database. however since changesets are not atomic this - # behaviour cannot be guaranteed anyway and is the result of a design - # choice. - def download - changeset = Changeset.find(params[:id]) - - # get all the elements in the changeset which haven't been redacted - # and stick them in a big array. - elements = [changeset.old_nodes.unredacted, - changeset.old_ways.unredacted, - changeset.old_relations.unredacted].flatten - - # sort the elements by timestamp and version number, as this is the - # almost sensible ordering available. this would be much nicer if - # global (SVN-style) versioning were used - then that would be - # unambiguous. - elements.sort_by! { |e| [e.timestamp, e.version] } - - # generate an output element for each operation. note: we avoid looking - # at the history because it is simpler - but it would be more correct to - # check these assertions. - @created = [] - @modified = [] - @deleted = [] - - elements.each do |elt| - if elt.version == 1 - # first version, so it must be newly-created. - @created << elt - elsif elt.visible - # must be a modify - @modified << elt - else - # if the element isn't visible then it must have been deleted - @deleted << elt - end - end - - respond_to do |format| - format.xml - end - end - ## # updates a changeset's tags. none of the changeset's attributes are # user-modifiable, so they will be ignored. @@ -339,33 +287,6 @@ module Api raise OSM::APIBadUserInput, e.message.to_s end - ## - # restrict changesets to those opened during a particular time period - # works similar to from..to of notes controller, including the requirement of 'from' when specifying 'to' - def conditions_from_to(changesets, from, to) - if from - begin - from = Time.parse(from).utc - rescue ArgumentError - raise OSM::APIBadUserInput, "Date #{from} is in a wrong format" - end - - begin - to = if to - Time.parse(to).utc - else - Time.now.utc - end - rescue ArgumentError - raise OSM::APIBadUserInput, "Date #{to} is in a wrong format" - end - - changesets.where(:created_at => from..to) - else - changesets - end - end - ## # return changesets which are open (haven't been closed yet) # we do this by seeing if the 'closed at' time is in the future. Also if we've