[osmium-tool] 04/05: Drop patches, applied upstream.

Bas Couwenberg sebastic at debian.org
Sun Nov 20 19:06:46 UTC 2016


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository osmium-tool.

commit a639f2272c331277c55318d222cb4a09ccb300e1
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Sun Nov 20 19:56:35 2016 +0100

    Drop patches, applied upstream.
---
 debian/changelog                      |    1 +
 debian/patches/libosmium-2.10.2.patch | 1336 ---------------------------------
 debian/patches/series                 |    2 -
 debian/patches/spelling-errors.patch  |   47 --
 4 files changed, 1 insertion(+), 1385 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index d6e234e..a5773ae 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
 osmium-tool (1.4.1-1) UNRELEASED; urgency=medium
 
   * New upstream release.
+  * Drop patches, applied upstream.
 
  -- Bas Couwenberg <sebastic at debian.org>  Sun, 20 Nov 2016 19:55:52 +0100
 
diff --git a/debian/patches/libosmium-2.10.2.patch b/debian/patches/libosmium-2.10.2.patch
deleted file mode 100644
index 840b686..0000000
--- a/debian/patches/libosmium-2.10.2.patch
+++ /dev/null
@@ -1,1336 +0,0 @@
-Description: Add support for libosmium 2.10.2.
-Origin: https://github.com/osmcode/osmium-tool
-
---- a/CHANGELOG.md
-+++ b/CHANGELOG.md
-@@ -8,10 +8,28 @@ This project adheres to [Semantic Versio
- 
- ### Added
- 
-+- Add hint to error message about `--overwrite` option when trying to open
-+  an existing file.
-+- Check the required libosmium version in CMake build.
-+
- ### Changed
- 
-+- Add --ignore-missing-nodes to `add-locations-to-ways` subcommand. If this
-+  is not set, the command will now fail if there are missing nodes needed
-+  for ways.
-+- The `check-refs` and `getid` subcommands now use the IdSet class from the
-+  newest libosmium making them more efficient (especially on very large input
-+  files).
-+- Improved error messages for low-level errors.
-+
- ### Fixed
- 
-+- Consistently handle `--output-header` option in all commands that create
-+  standard OSM files.
-+- Handling of some output options was not correct in `diff` command. They
-+  do now what is documented and it is documented what they do.
-+- Progress bar and output from verbose mode will now be kept separate.
-+
- 
- ## [1.4.0] - 2016-09-15
- 
-@@ -27,7 +45,7 @@ This project adheres to [Semantic Versio
-   shown in verbose mode.
- - Added `iwyu` target to CMake config.
- - Progress bars will be shown on some commands. (This is configurable at
--  run time with the --progress and --no-progress options.)
-+  run time with the `--progress` and `--no-progress` options.)
- 
- ### Changed
- 
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -44,7 +44,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- find_package(Boost 1.55.0 REQUIRED COMPONENTS program_options)
- include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
- 
--find_package(Osmium REQUIRED COMPONENTS io)
-+find_package(Osmium 2.10.2 REQUIRED COMPONENTS io)
- include_directories(SYSTEM ${OSMIUM_INCLUDE_DIRS})
- 
- 
---- a/README.md
-+++ b/README.md
-@@ -4,8 +4,8 @@
- A multipurpose command line tool for working with OpenStreetMap data based on
- the Osmium library.
- 
--[![Build Status](https://secure.travis-ci.org/osmcode/osmium-tool.png)](http://travis-ci.org/osmcode/osmium-tool)
--[![Build Status](https://ci.appveyor.com/api/projects/status/ttem4j2gxa64p3w8?svg=true)](https://ci.appveyor.com/project/Mapbox/osmium-tool)
-+[![Build Status](https://secure.travis-ci.org/osmcode/osmium-tool.svg)](http://travis-ci.org/osmcode/osmium-tool)
-+[![Build Status](https://ci.appveyor.com/api/projects/status/github/osmcode/osmium-tool?svg=true)](https://ci.appveyor.com/project/Mapbox/osmium-tool)
- 
- ## Prerequisites
- 
-@@ -14,11 +14,11 @@ later are known to work. It also works o
- 
- You also need the following libraries:
- 
--    Libosmium (>= 2.9.0)
-+    Libosmium (>= 2.10.2)
-         http://osmcode.org/libosmium
-         Debian/Ubuntu: libosmium2-dev
- 
--    Protozero (>= 1.4.0)
-+    Protozero (>= 1.4.4)
-         This is included in the libosmium repository and might or might not
-         have been installed with it. See the libosmium README.
-         https://github.com/mapbox/protozero
-@@ -112,7 +112,7 @@ More extensive tests of the libosmium I/
- 
- ## License
- 
--Copyright (C) 2013-2016  Jochen Topf <jochen at topf.org>
-+Copyright (C) 2013-2016  Jochen Topf (jochen at topf.org)
- 
- This program is available under the GNU GENERAL PUBLIC LICENSE Version 3.
- See the file LICENSE.txt for the complete text of the license.
-@@ -120,5 +120,5 @@ See the file LICENSE.txt for the complet
- 
- ## Authors
- 
--This program was written and is maintained by Jochen Topf <jochen at topf.org>.
-+This program was written and is maintained by Jochen Topf (jochen at topf.org).
- 
---- a/cmake/FindOsmium.cmake
-+++ b/cmake/FindOsmium.cmake
-@@ -2,8 +2,8 @@
- #
- #  FindOsmium.cmake
- #
--#  Find the Libosmium headers and, optionally, several components needed for
--#  different Libosmium functions.
-+#  Find the Libosmium headers and, optionally, several components needed
-+#  for different Libosmium functions.
- #
- #----------------------------------------------------------------------
- #
-@@ -18,9 +18,12 @@
- #
- #    Then add the following in your CMakeLists.txt:
- #
--#      find_package(Osmium REQUIRED COMPONENTS <XXX>)
-+#      find_package(Osmium [version] REQUIRED COMPONENTS <XXX>)
- #      include_directories(SYSTEM ${OSMIUM_INCLUDE_DIRS})
- #
-+#    The version number is optional. If it is not set, any version of
-+#    libosmium will do.
-+#
- #    For the <XXX> substitute a space separated list of one or more of the
- #    following components:
- #
-@@ -51,10 +54,9 @@
- #
- #----------------------------------------------------------------------
- 
--# Look for the header file.
--find_path(OSMIUM_INCLUDE_DIR osmium/osm.hpp
--    PATH_SUFFIXES include
--    PATHS
-+# This is the list of directories where we look for osmium and protozero
-+# includes.
-+set(_osmium_include_path
-         ../libosmium
-         ~/Library/Frameworks
-         /Library/Frameworks
-@@ -62,6 +64,22 @@ find_path(OSMIUM_INCLUDE_DIR osmium/osm.
-         /opt
- )
- 
-+# Look for the header file.
-+find_path(OSMIUM_INCLUDE_DIR osmium/version.hpp
-+    PATH_SUFFIXES include
-+    PATHS ${_osmium_include_path}
-+)
-+
-+# Check libosmium version number
-+if(Osmium_FIND_VERSION)
-+    file(STRINGS "${OSMIUM_INCLUDE_DIR}/osmium/version.hpp" _libosmium_version_define REGEX "#define LIBOSMIUM_VERSION_STRING")
-+    if("${_libosmium_version_define}" MATCHES "#define LIBOSMIUM_VERSION_STRING \"([0-9.]+)\"")
-+        set(_libosmium_version "${CMAKE_MATCH_1}")
-+    else()
-+        set(_libosmium_version "unknown")
-+    endif()
-+endif()
-+
- set(OSMIUM_INCLUDE_DIRS "${OSMIUM_INCLUDE_DIR}")
- 
- #----------------------------------------------------------------------
-@@ -95,17 +113,31 @@ if(Osmium_USE_PBF)
-     find_package(ZLIB)
-     find_package(Threads)
- 
--    list(APPEND OSMIUM_EXTRA_FIND_VARS ZLIB_FOUND Threads_FOUND)
--    if(ZLIB_FOUND AND Threads_FOUND)
-+    message(STATUS "Looking for protozero")
-+    find_path(PROTOZERO_INCLUDE_DIR protozero/version.hpp
-+        PATH_SUFFIXES include
-+        PATHS ${_osmium_include_path}
-+              ${OSMIUM_INCLUDE_DIR}
-+    )
-+    if(PROTOZERO_INCLUDE_DIR)
-+        message(STATUS "Looking for protozero - found")
-+    else()
-+        message(STATUS "Looking for protozero - not found")
-+    endif()
-+
-+    list(APPEND OSMIUM_EXTRA_FIND_VARS ZLIB_FOUND Threads_FOUND PROTOZERO_INCLUDE_DIR)
-+    if(ZLIB_FOUND AND Threads_FOUND AND PROTOZERO_INCLUDE_DIR)
-         list(APPEND OSMIUM_PBF_LIBRARIES
-             ${ZLIB_LIBRARIES}
-             ${CMAKE_THREAD_LIBS_INIT}
-         )
-         if(WIN32)
-+            # This is needed for the ntohl() function
-             list(APPEND OSMIUM_PBF_LIBRARIES ws2_32)
-         endif()
-         list(APPEND OSMIUM_INCLUDE_DIRS
-             ${ZLIB_INCLUDE_DIR}
-+            ${PROTOZERO_INCLUDE_DIR}
-         )
-     else()
-         message(WARNING "Osmium: Can not find some libraries for PBF input/output, please install them or configure the paths.")
-@@ -203,7 +235,7 @@ if(Osmium_USE_SPARSEHASH)
-     if(SPARSEHASH_INCLUDE_DIR)
-         # Find size of sparsetable::size_type. This does not work on older
-         # CMake versions because they can do this check only in C, not in C++.
--        if (NOT CMAKE_VERSION VERSION_LESS 3.0)
-+        if(NOT CMAKE_VERSION VERSION_LESS 3.0)
-            include(CheckTypeSize)
-            set(CMAKE_REQUIRED_INCLUDES ${SPARSEHASH_INCLUDE_DIR})
-            set(CMAKE_EXTRA_INCLUDE_FILES "google/sparsetable")
-@@ -253,13 +285,15 @@ endif()
- #  Check that all required libraries are available
- #
- #----------------------------------------------------------------------
--if (OSMIUM_EXTRA_FIND_VARS)
-+if(OSMIUM_EXTRA_FIND_VARS)
-     list(REMOVE_DUPLICATES OSMIUM_EXTRA_FIND_VARS)
- endif()
--# Handle the QUIETLY and REQUIRED arguments and set OSMIUM_FOUND to TRUE if
--# all listed variables are TRUE.
-+# Handle the QUIETLY and REQUIRED arguments and the optional version check
-+# and set OSMIUM_FOUND to TRUE if all listed variables are TRUE.
- include(FindPackageHandleStandardArgs)
--find_package_handle_standard_args(Osmium REQUIRED_VARS OSMIUM_INCLUDE_DIR ${OSMIUM_EXTRA_FIND_VARS})
-+find_package_handle_standard_args(Osmium
-+                                  REQUIRED_VARS OSMIUM_INCLUDE_DIR ${OSMIUM_EXTRA_FIND_VARS}
-+                                  VERSION_VAR _libosmium_version)
- unset(OSMIUM_EXTRA_FIND_VARS)
- 
- #----------------------------------------------------------------------
---- a/man/osmium-add-locations-to-ways.md
-+++ b/man/osmium-add-locations-to-ways.md
-@@ -16,6 +16,10 @@ IDs of the nodes. This program will copy
- taking the locations from the nodes and adding them to the ways. This makes
- it easier for other programs to assemble the way geometries.
- 
-+The input file must contain all nodes needed for the ways, otherwise there will
-+be an error. You can change this behaviour using the `--ignore-missing-nodes`
-+option.
-+
- Nodes without any tags will not be copied (unless the **--keep-untagged-nodes**,
- **-n** option is used). The size of the output file will be similar or a bit
- smaller than the input file (unless the **--keep-untagged-nodes**,
-@@ -46,6 +50,11 @@ This program will not work on full histo
- -n, --keep-untagged-nodes
- :   Keep the untagged nodes in the output file.
- 
-+--ignore-missing-nodes
-+:   If this is not set a missing node needed for a way results in an error.
-+    If this is set, errors are ignored and the way will have an invalid
-+    location set for the missing node.
-+
- @MAN_COMMON_OPTIONS@
- @MAN_PROGRESS_OPTIONS@
- @MAN_INPUT_OPTIONS@
---- a/man/osmium-getid.md
-+++ b/man/osmium-getid.md
-@@ -58,6 +58,8 @@ If referenced objects are missing from t
- of those objects is written out to *stderr* at the end of the program unless
- the **-H**, **--history** option was given.
- 
-+This command will not work with negative IDs.
-+
- 
- # OPTIONS
- 
---- a/src/cmd.hpp
-+++ b/src/cmd.hpp
-@@ -47,6 +47,10 @@ const char* yes_no(bool choice) noexcept
- void warning(const char* text);
- std::size_t file_size_sum(std::vector<osmium::io::File> files);
- 
-+namespace osmium { namespace io {
-+    class Header;
-+}}
-+
- /**
-  * Virtual base class for commands that can be called from the command line.
-  */
-@@ -62,7 +66,6 @@ class Command {
- 
- protected:
- 
--    bool m_debug {false};
-     osmium::util::VerboseOutput m_vout {false};
- 
- public:
-@@ -175,10 +178,11 @@ public:
- 
- class with_osm_output {
- 
--protected:
--
-     std::string m_generator;
-     std::vector<std::string> m_output_headers;
-+
-+protected:
-+
-     std::string m_output_filename = "-"; // default: stdout
-     std::string m_output_format;
-     osmium::io::File m_output_file;
-@@ -202,13 +206,7 @@ public:
-         return m_output_file;
-     }
- 
--    const std::string& generator() const {
--        return m_generator;
--    }
--
--    const std::vector<std::string>& output_headers() const {
--        return m_output_headers;
--    }
-+    void setup_header(osmium::io::Header& header) const;
- 
-     osmium::io::overwrite output_overwrite() const {
-         return m_output_overwrite;
---- a/src/command_add_locations_to_ways.cpp
-+++ b/src/command_add_locations_to_ways.cpp
-@@ -54,6 +54,7 @@ bool CommandAddLocationsToWays::setup(co
-     ("index-type,i", po::value<std::string>()->default_value(default_index_type), "Index type to use")
-     ("show-index-types,I", "Show available index types")
-     ("keep-untagged-nodes,n", "Keep untagged nodes")
-+    ("ignore-missing-nodes", "Ignore missing nodes")
-     ;
- 
-     po::options_description opts_common{add_common_options()};
-@@ -101,6 +102,10 @@ bool CommandAddLocationsToWays::setup(co
-         m_keep_untagged_nodes = true;
-     }
- 
-+    if (vm.count("ignore-missing-nodes")) {
-+        m_ignore_missing_nodes = true;
-+    }
-+
-     return true;
- }
- 
-@@ -114,13 +119,6 @@ void CommandAddLocationsToWays::show_arg
-     m_vout << "\n";
- }
- 
--void CommandAddLocationsToWays::setup_header(osmium::io::Header& header) const {
--    header.set("generator", m_generator);
--    for (const auto& h : m_output_headers) {
--        header.set(h);
--    }
--}
--
- void CommandAddLocationsToWays::copy_data(osmium::ProgressBar& progress_bar, osmium::io::Reader& reader, osmium::io::Writer& writer, location_handler_type& location_handler) {
-     while (osmium::memory::Buffer buffer = reader.read()) {
-         progress_bar.update(reader.offset());
-@@ -142,7 +140,10 @@ bool CommandAddLocationsToWays::run() {
-     const auto& map_factory = osmium::index::MapFactory<osmium::unsigned_object_id_type, osmium::Location>::instance();
-     auto location_index = map_factory.create_map(m_index_type_name);
-     location_handler_type location_handler(*location_index);
--    location_handler.ignore_errors(); // XXX
-+
-+    if (m_ignore_missing_nodes) {
-+        location_handler.ignore_errors();
-+    }
- 
-     m_output_file.set("locations_on_ways");
- 
-@@ -166,6 +167,7 @@ bool CommandAddLocationsToWays::run() {
- 
-         osmium::ProgressBar progress_bar{file_size_sum(m_input_files), display_progress()};
-         for (const auto& input_file : m_input_files) {
-+            progress_bar.remove();
-             m_vout << "Copying input file '" << input_file.filename() << "'\n";
-             osmium::io::Reader reader(input_file);
- 
---- a/src/command_add_locations_to_ways.hpp
-+++ b/src/command_add_locations_to_ways.hpp
-@@ -45,11 +45,11 @@ using location_handler_type = osmium::ha
- 
- class CommandAddLocationsToWays : public Command, public with_multiple_osm_inputs, public with_osm_output {
- 
--    void setup_header(osmium::io::Header& header) const;
-     void copy_data(osmium::ProgressBar& progress_bar, osmium::io::Reader& reader, osmium::io::Writer& writer, location_handler_type& location_handler);
- 
-     std::string m_index_type_name;
-     bool m_keep_untagged_nodes = false;
-+    bool m_ignore_missing_nodes = false;
- 
- public:
- 
---- a/src/command_apply_changes.cpp
-+++ b/src/command_apply_changes.cpp
-@@ -169,7 +169,7 @@ bool CommandApplyChanges::run() {
-     osmium::io::Reader reader{m_input_file, osmium::osm_entity_bits::object};
- 
-     osmium::io::Header header{reader.header()};
--    header.set("generator", m_generator);
-+    setup_header(header);
- 
-     m_vout << "Opening output file...\n";
-     osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
---- a/src/command_cat.cpp
-+++ b/src/command_cat.cpp
-@@ -81,13 +81,6 @@ void CommandCat::show_arguments() {
-     show_object_types(m_vout);
- }
- 
--void CommandCat::setup_header(osmium::io::Header& header) const {
--    header.set("generator", m_generator);
--    for (const auto& h : m_output_headers) {
--        header.set(h);
--    }
--}
--
- bool CommandCat::run() {
-     if (m_input_files.size() == 1) { // single input file
-         m_vout << "Copying input file '" << m_input_files[0].filename() << "'\n";
-@@ -112,6 +105,7 @@ bool CommandCat::run() {
- 
-         osmium::ProgressBar progress_bar{file_size_sum(m_input_files), display_progress()};
-         for (const auto& input_file : m_input_files) {
-+            progress_bar.remove();
-             m_vout << "Copying input file '" << input_file.filename() << "'\n";
-             osmium::io::Reader reader{input_file, osm_entity_bits()};
-             while (osmium::memory::Buffer buffer = reader.read()) {
---- a/src/command_cat.hpp
-+++ b/src/command_cat.hpp
-@@ -34,8 +34,6 @@ namespace osmium { namespace io {
- 
- class CommandCat : public Command, public with_multiple_osm_inputs, public with_osm_output {
- 
--    void setup_header(osmium::io::Header& header) const;
--
- public:
- 
-     CommandCat() = default;
---- a/src/command_changeset_filter.cpp
-+++ b/src/command_changeset_filter.cpp
-@@ -205,7 +205,7 @@ bool CommandChangesetFilter::run() {
-     auto input = osmium::io::make_input_iterator_range<osmium::Changeset>(reader);
- 
-     osmium::io::Header header{reader.header()};
--    header.set("generator", m_generator);
-+    setup_header(header);
- 
-     m_vout << "Opening output file...\n";
-     osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
---- a/src/command_check_refs.cpp
-+++ b/src/command_check_refs.cpp
-@@ -31,7 +31,7 @@ along with this program.  If not, see <h
- 
- #include <osmium/handler.hpp>
- #include <osmium/handler/check_order.hpp>
--#include <osmium/index/bool_vector.hpp>
-+#include <osmium/index/id_set.hpp>
- #include <osmium/io/reader.hpp>
- #include <osmium/osm.hpp>
- #include <osmium/util/progress_bar.hpp>
-@@ -92,10 +92,10 @@ void CommandCheckRefs::show_arguments()
- 
- class RefCheckHandler : public osmium::handler::Handler {
- 
--    osmium::index::BoolVector<osmium::unsigned_object_id_type> m_nodes;
--    osmium::index::BoolVector<osmium::unsigned_object_id_type> m_ways;
-+    osmium::index::IdSetDense<osmium::unsigned_object_id_type> m_nodes;
-+    osmium::index::IdSetDense<osmium::unsigned_object_id_type> m_ways;
-+    osmium::index::IdSetDense<osmium::unsigned_object_id_type> m_relations;
- 
--    std::vector<uint32_t> m_relation_ids;
-     std::vector<std::pair<uint32_t, uint32_t>> m_relation_refs;
- 
-     osmium::handler::CheckOrder m_check_order;
-@@ -109,13 +109,15 @@ class RefCheckHandler : public osmium::h
-     uint64_t m_missing_ways_in_relations = 0;
- 
-     osmium::util::VerboseOutput& m_vout;
-+    osmium::ProgressBar& m_progress_bar;
-     bool m_show_ids;
-     bool m_check_relations;
- 
- public:
- 
--    RefCheckHandler(osmium::util::VerboseOutput& vout, bool show_ids, bool check_relations) :
-+    RefCheckHandler(osmium::util::VerboseOutput& vout, osmium::ProgressBar& progress_bar, bool show_ids, bool check_relations) :
-         m_vout(vout),
-+        m_progress_bar(progress_bar),
-         m_show_ids(show_ids),
-         m_check_relations(check_relations) {
-     }
-@@ -153,7 +155,7 @@ public:
- 
-         m_relation_refs.erase(
-             std::remove_if(m_relation_refs.begin(), m_relation_refs.end(), [this](std::pair<uint32_t, uint32_t> refs){
--                return std::binary_search(m_relation_ids.begin(), m_relation_ids.end(), refs.first);
-+                return m_relations.get(refs.first);
-             }),
-             m_relation_refs.end()
-         );
-@@ -170,6 +172,7 @@ public:
-         m_check_order.node(node);
- 
-         if (m_node_count == 0) {
-+            m_progress_bar.remove();
-             m_vout << "Reading nodes...\n";
-         }
-         ++m_node_count;
-@@ -181,6 +184,7 @@ public:
-         m_check_order.way(way);
- 
-         if (m_way_count == 0) {
-+            m_progress_bar.remove();
-             m_vout << "Reading ways...\n";
-         }
-         ++m_way_count;
-@@ -203,12 +207,13 @@ public:
-         m_check_order.relation(relation);
- 
-         if (m_relation_count == 0) {
-+            m_progress_bar.remove();
-             m_vout << "Reading relations...\n";
-         }
-         ++m_relation_count;
- 
-         if (m_check_relations) {
--            m_relation_ids.push_back(uint32_t(relation.id()));
-+            m_relations.set(relation.positive_id());
-             for (const auto& member : relation.members()) {
-                 switch (member.type()) {
-                     case osmium::item_type::node:
-@@ -230,7 +235,7 @@ public:
-                         }
-                         break;
-                     case osmium::item_type::relation:
--                        if (member.ref() > relation.id() || !std::binary_search(m_relation_ids.begin(), m_relation_ids.end(), uint32_t(member.ref()))) {
-+                        if (member.ref() > relation.id() || !m_relations.get(member.positive_ref())) {
-                             m_relation_refs.emplace_back(uint32_t(member.ref()), uint32_t(relation.id()));
-                         }
-                         break;
-@@ -251,9 +256,9 @@ public:
- 
- bool CommandCheckRefs::run() {
-     osmium::io::Reader reader{m_input_file};
--    RefCheckHandler handler{m_vout, m_show_ids, m_check_relations};
--
-     osmium::ProgressBar progress_bar{reader.file_size(), display_progress()};
-+    RefCheckHandler handler{m_vout, progress_bar, m_show_ids, m_check_relations};
-+
-     while (osmium::memory::Buffer buffer = reader.read()) {
-         progress_bar.update(reader.offset());
-         osmium::apply(buffer, handler);
-@@ -270,7 +275,9 @@ bool CommandCheckRefs::run() {
-         }
-     }
- 
--    std::cerr << "There are " << handler.node_count() << " nodes, " << handler.way_count() << " ways, and " << handler.relation_count() << " relations in this file.\n";
-+    std::cerr << "There are " << handler.node_count() << " nodes, "
-+                              << handler.way_count() << " ways, and "
-+                              << handler.relation_count() << " relations in this file.\n";
- 
-     if (m_check_relations) {
-         std::cerr << "Nodes     in ways      missing: " << handler.missing_nodes_in_ways()          << "\n";
---- a/src/command_derive_changes.cpp
-+++ b/src/command_derive_changes.cpp
-@@ -143,8 +143,10 @@ bool CommandDeriveChanges::run() {
-     if (m_output_file.format() != osmium::io::file_format::xml || !m_output_file.is_true("xml_change_format")) {
-         warning("Output format chosen is not the XML change format. Use .osc(.gz|bz2) as suffix or -f option.\n");
-     }
-+
-     osmium::io::Header header;
--    header.set("generator", m_generator);
-+    setup_header(header);
-+
-     osmium::io::Writer writer{m_output_file, header};
- 
-     m_vout << "Deriving changes...\n";
---- a/src/command_diff.cpp
-+++ b/src/command_diff.cpp
-@@ -49,15 +49,17 @@ along with this program.  If not, see <h
- bool CommandDiff::setup(const std::vector<std::string>& arguments) {
-     po::options_description opts_cmd{"COMMAND OPTIONS"};
-     opts_cmd.add_options()
--    ("suppress-common,c", "Suppress common objects")
-+    ("object-type,t", po::value<std::vector<std::string>>(), "Read only objects of given type (node, way, relation)")
-+    ("output,o", po::value<std::string>(), "Output file")
-+    ("output-format,f", po::value<std::string>(), "Format of output file")
-+    ("overwrite,O", "Allow existing output file to be overwritten")
-     ("quiet,q", "Report only when files differ")
-     ("summary,s", "Show summary on STDERR")
--    ("object-type,t", po::value<std::vector<std::string>>(), "Read only objects of given type (node, way, relation)")
-+    ("suppress-common,c", "Suppress common objects")
-     ;
- 
-     po::options_description opts_common{add_common_options()};
-     po::options_description opts_input{add_multiple_inputs_options()};
--    po::options_description opts_output{add_output_options()};
- 
-     po::options_description hidden;
-     hidden.add_options()
-@@ -65,7 +67,7 @@ bool CommandDiff::setup(const std::vecto
-     ;
- 
-     po::options_description desc;
--    desc.add(opts_cmd).add(opts_common).add(opts_input).add(opts_output);
-+    desc.add(opts_cmd).add(opts_common).add(opts_input);
- 
-     po::options_description parsed_options;
-     parsed_options.add(desc).add(hidden);
-@@ -93,24 +95,16 @@ bool CommandDiff::setup(const std::vecto
-         m_output_format = vm["output-format"].as<std::string>();
-     }
- 
--    if (vm.count("output-header")) {
--        m_output_headers = vm["output-header"].as<std::vector<std::string>>();
--    }
--
-     if (vm.count("overwrite")) {
-         m_output_overwrite = osmium::io::overwrite::allow;
-     }
- 
--    if (vm.count("fsync")) {
--        m_fsync = osmium::io::fsync::yes;
--    }
--
-     if (vm.count("summary")) {
-         m_show_summary = true;
-     }
- 
-     if (vm.count("quiet")) {
--        if (vm.count("output") || vm.count("output-format") || vm.count("output-header") || vm.count("overwrite") || vm.count("fsync") || vm.count("suppress-common")) {
-+        if (vm.count("output") || vm.count("output-format") || vm.count("overwrite") || vm.count("suppress-common")) {
-             throw argument_error("Do not use --quiet/-q with any of the output options.");
-         }
-         m_output_action = "none";
-@@ -218,8 +212,8 @@ class OutputActionOSM : public OutputAct
- 
- public:
- 
--    OutputActionOSM(const osmium::io::File& file) :
--        m_writer(file) {
-+    OutputActionOSM(const osmium::io::File& file, osmium::io::overwrite ow) :
-+        m_writer(file, ow) {
-     }
- 
-     void left(osmium::OSMObject& object) override {
-@@ -254,11 +248,11 @@ bool CommandDiff::run() {
-     std::unique_ptr<OutputAction> action;
- 
-     if (m_output_action == "compact") {
--        int fd = osmium::io::detail::open_for_writing(m_output_filename, m_output_overwrite);
-+        const int fd = osmium::io::detail::open_for_writing(m_output_filename, m_output_overwrite);
-         action.reset(new OutputActionCompact{fd});
-     } else if (m_output_action == "osm") {
-         m_output_file.set("diff");
--        action.reset(new OutputActionOSM{m_output_file});
-+        action.reset(new OutputActionOSM{m_output_file, m_output_overwrite});
-     }
- 
-     uint64_t count_left = 0;
---- a/src/command_fileinfo.cpp
-+++ b/src/command_fileinfo.cpp
-@@ -157,7 +157,7 @@ off_t filesize(const std::string& filena
- 
-     struct stat s;
-     if (::stat(filename.c_str(), &s) == -1) {
--        throw std::system_error{errno, std::system_category(), "stat failed"};
-+        throw std::system_error{errno, std::system_category(), std::string{"Could not get file size of file '"} + filename + "'"};
-     }
- 
-     return s.st_size;
---- a/src/command_getid.cpp
-+++ b/src/command_getid.cpp
-@@ -44,17 +44,12 @@ along with this program.  If not, see <h
- #include "command_getid.hpp"
- #include "exception.hpp"
- 
--std::set<osmium::object_id_type>& CommandGetId::ids(osmium::item_type type) noexcept {
--    return m_ids[osmium::item_type_to_nwr_index(type)];
--}
--
--const std::set<osmium::object_id_type>& CommandGetId::ids(osmium::item_type type) const noexcept {
--    return m_ids[osmium::item_type_to_nwr_index(type)];
--}
--
- void CommandGetId::parse_and_add_id(const std::string& s) {
-     auto p = osmium::string_to_object_id(s.c_str(), osmium::osm_entity_bits::nwr, m_default_item_type);
--    ids(p.first).insert(p.second);
-+    if (p.second < 0) {
-+        throw std::runtime_error("osmium-getid does not work with negative IDs");
-+    }
-+    m_ids(p.first).set(p.second);
- }
- 
- void CommandGetId::read_id_file(std::istream& stream) {
-@@ -71,15 +66,15 @@ void CommandGetId::read_id_file(std::ist
- }
- 
- bool CommandGetId::no_ids() const {
--    return ids(osmium::item_type::node).empty() &&
--           ids(osmium::item_type::way).empty() &&
--           ids(osmium::item_type::relation).empty();
-+    return m_ids(osmium::item_type::node).empty() &&
-+           m_ids(osmium::item_type::way).empty() &&
-+           m_ids(osmium::item_type::relation).empty();
- }
- 
- std::size_t CommandGetId::count_ids() const {
--    return ids(osmium::item_type::node).size() +
--           ids(osmium::item_type::way).size() +
--           ids(osmium::item_type::relation).size();
-+    return m_ids(osmium::item_type::node).size() +
-+           m_ids(osmium::item_type::way).size() +
-+           m_ids(osmium::item_type::relation).size();
- }
- 
- bool CommandGetId::setup(const std::vector<std::string>& arguments) {
-@@ -203,37 +198,37 @@ void CommandGetId::show_arguments() {
-     if (m_verbose_ids) {
-         m_vout << "    looking for these ids:\n";
-         m_vout << "      nodes:";
--        for (osmium::object_id_type id : ids(osmium::item_type::node)) {
-+        for (osmium::object_id_type id : m_ids(osmium::item_type::node)) {
-             m_vout << " " << id;
-         }
-         m_vout << "\n";
-         m_vout << "      ways:";
--        for (osmium::object_id_type id : ids(osmium::item_type::way)) {
-+        for (osmium::object_id_type id : m_ids(osmium::item_type::way)) {
-             m_vout << " " << id;
-         }
-         m_vout << "\n";
-         m_vout << "      relations:";
--        for (osmium::object_id_type id : ids(osmium::item_type::relation)) {
-+        for (osmium::object_id_type id : m_ids(osmium::item_type::relation)) {
-             m_vout << " " << id;
-         }
-         m_vout << "\n";
-     } else {
--        m_vout << "    looking for " << ids(osmium::item_type::node).size() << " node ID(s), "
--                                     << ids(osmium::item_type::way).size() << " way ID(s), and "
--                                     << ids(osmium::item_type::relation).size() << " relation ID(s)\n";
-+        m_vout << "    looking for " << m_ids(osmium::item_type::node).size() << " node ID(s), "
-+                                     << m_ids(osmium::item_type::way).size() << " way ID(s), and "
-+                                     << m_ids(osmium::item_type::relation).size() << " relation ID(s)\n";
-     }
- }
- 
- osmium::osm_entity_bits::type CommandGetId::get_needed_types() const {
-     osmium::osm_entity_bits::type types = osmium::osm_entity_bits::nothing;
- 
--    if (! ids(osmium::item_type::node).empty()) {
-+    if (! m_ids(osmium::item_type::node).empty()) {
-         types |= osmium::osm_entity_bits::node;
-     }
--    if (! ids(osmium::item_type::way).empty()) {
-+    if (! m_ids(osmium::item_type::way).empty()) {
-         types |= osmium::osm_entity_bits::way;
-     }
--    if (! ids(osmium::item_type::relation).empty()) {
-+    if (! m_ids(osmium::item_type::relation).empty()) {
-         types |= osmium::osm_entity_bits::relation;
-     }
- 
-@@ -242,17 +237,17 @@ osmium::osm_entity_bits::type CommandGet
- 
- void CommandGetId::add_nodes(const osmium::Way& way) {
-     for (const auto& nr : way.nodes()) {
--        ids(osmium::item_type::node).insert(nr.ref());
-+        m_ids(osmium::item_type::node).set(nr.positive_ref());
-     }
- }
- 
- void CommandGetId::add_members(const osmium::Relation& relation) {
-     for (const auto& member : relation.members()) {
--        ids(member.type()).insert(member.ref());
-+        m_ids(member.type()).set(member.positive_ref());
-     }
- }
- 
--static void print_missing_ids(const char* type, std::set<osmium::object_id_type>& set) {
-+static void print_missing_ids(const char* type, const osmium::index::IdSetDense<osmium::unsigned_object_id_type>& set) {
-     if (set.empty()) {
-         return;
-     }
-@@ -268,7 +263,7 @@ void CommandGetId::read_id_osm_file(cons
-     osmium::io::Reader reader{file_name, osmium::osm_entity_bits::object};
-     while (osmium::memory::Buffer buffer = reader.read()) {
-         for (const auto& object : buffer.select<osmium::OSMObject>()) {
--            ids(object.type()).insert(object.id());
-+            m_ids(object.type()).set(object.positive_id());
-             if (object.type() == osmium::item_type::way) {
-                 add_nodes(static_cast<const osmium::Way&>(object));
-             } else if (object.type() == osmium::item_type::relation) {
-@@ -282,8 +277,7 @@ void CommandGetId::read_id_osm_file(cons
- void CommandGetId::mark_rel_ids(const std::multimap<osmium::object_id_type, osmium::object_id_type>& rel_in_rel, osmium::object_id_type id) {
-     auto range = rel_in_rel.equal_range(id);
-     for (auto it = range.first; it != range.second; ++it) {
--        if (ids(osmium::item_type::relation).count(it->second) == 0) {
--            ids(osmium::item_type::relation).insert(it->second);
-+        if (m_ids(osmium::item_type::relation).check_and_set(it->second)) {
-             mark_rel_ids(rel_in_rel, it->second);
-         }
-     }
-@@ -299,11 +293,11 @@ bool CommandGetId::find_relations_in_rel
-             for (const auto& member : relation.members()) {
-                 if (member.type() == osmium::item_type::relation) {
-                     rel_in_rel.emplace(relation.id(), member.ref());
--                } else if (ids(osmium::item_type::relation).count(relation.id())) {
-+                } else if (m_ids(osmium::item_type::relation).get(relation.positive_id())) {
-                     if (member.type() == osmium::item_type::node) {
--                        ids(osmium::item_type::node).insert(member.ref());
-+                        m_ids(osmium::item_type::node).set(member.positive_ref());
-                     } else if (member.type() == osmium::item_type::way) {
--                        ids(osmium::item_type::way).insert(member.ref());
-+                        m_ids(osmium::item_type::way).set(member.positive_ref());
-                     }
-                 }
-             }
-@@ -315,7 +309,7 @@ bool CommandGetId::find_relations_in_rel
-         return false;
-     }
- 
--    for (const osmium::object_id_type id : ids(osmium::item_type::relation)) {
-+    for (const osmium::unsigned_object_id_type id : m_ids(osmium::item_type::relation)) {
-         mark_rel_ids(rel_in_rel, id);
-     }
- 
-@@ -328,12 +322,12 @@ void CommandGetId::find_nodes_and_ways_i
-     osmium::io::Reader reader{m_input_file, osmium::osm_entity_bits::relation};
-     while (osmium::memory::Buffer buffer = reader.read()) {
-         for (const auto& relation : buffer.select<osmium::Relation>()) {
--            if (ids(osmium::item_type::relation).count(relation.id())) {
-+            if (m_ids(osmium::item_type::relation).get(relation.positive_id())) {
-                 for (const auto& member : relation.members()) {
-                     if (member.type() == osmium::item_type::node) {
--                        ids(osmium::item_type::node).insert(member.ref());
-+                        m_ids(osmium::item_type::node).set(member.positive_ref());
-                     } else if (member.type() == osmium::item_type::way) {
--                        ids(osmium::item_type::way).insert(member.ref());
-+                        m_ids(osmium::item_type::way).set(member.positive_ref());
-                     }
-                 }
-             }
-@@ -348,7 +342,7 @@ void CommandGetId::find_nodes_in_ways()
-     osmium::io::Reader reader{m_input_file, osmium::osm_entity_bits::way};
-     while (osmium::memory::Buffer buffer = reader.read()) {
-         for (const auto& way : buffer.select<osmium::Way>()) {
--            if (ids(osmium::item_type::way).count(way.id())) {
-+            if (m_ids(osmium::item_type::way).get(way.positive_id())) {
-                 add_nodes(way);
-             }
-         }
-@@ -358,7 +352,7 @@ void CommandGetId::find_nodes_in_ways()
- 
- void CommandGetId::find_referenced_objects() {
-     m_vout << "Following references...\n";
--    bool todo = !ids(osmium::item_type::relation).empty();
-+    bool todo = !m_ids(osmium::item_type::relation).empty();
-     if (todo) {
-         todo = find_relations_in_relations();
-     }
-@@ -367,7 +361,7 @@ void CommandGetId::find_referenced_objec
-         find_nodes_and_ways_in_relations();
-     }
- 
--    if (!ids(osmium::item_type::way).empty()) {
-+    if (!m_ids(osmium::item_type::way).empty()) {
-         find_nodes_in_ways();
-     }
-     m_vout << "Done following references.\n";
-@@ -383,7 +377,8 @@ bool CommandGetId::run() {
- 
-     m_vout << "Opening output file...\n";
-     osmium::io::Header header = reader.header();
--    header.set("generator", m_generator);
-+    setup_header(header);
-+
-     osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
- 
-     m_vout << "Copying from source to output file...\n";
-@@ -391,10 +386,9 @@ bool CommandGetId::run() {
-     while (osmium::memory::Buffer buffer = reader.read()) {
-         progress_bar.update(reader.offset());
-         for (const auto& object : buffer.select<osmium::OSMObject>()) {
--            auto& index = ids(object.type());
--            if (index.count(object.id())) {
-+            if (m_ids(object.type()).get(object.positive_id())) {
-                 if (!m_work_with_history) {
--                    index.erase(object.id());
-+                    m_ids(object.type()).unset(object.positive_id());
-                 }
-                 writer(object);
-             }
-@@ -414,9 +408,9 @@ bool CommandGetId::run() {
-         } else {
-             m_vout << "Did not find " << count_ids() << " object(s).\n";
-             if (m_verbose_ids) {
--                print_missing_ids("node",     ids(osmium::item_type::node));
--                print_missing_ids("way",      ids(osmium::item_type::way));
--                print_missing_ids("relation", ids(osmium::item_type::relation));
-+                print_missing_ids("node",     m_ids(osmium::item_type::node));
-+                print_missing_ids("way",      m_ids(osmium::item_type::way));
-+                print_missing_ids("relation", m_ids(osmium::item_type::relation));
-             }
-         }
-     }
---- a/src/command_getid.hpp
-+++ b/src/command_getid.hpp
-@@ -29,6 +29,7 @@ along with this program.  If not, see <h
- #include <vector>
- 
- #include <osmium/fwd.hpp>
-+#include <osmium/index/id_set.hpp>
- #include <osmium/osm/entity_bits.hpp>
- #include <osmium/osm/item_type.hpp>
- #include <osmium/osm/types.hpp>
-@@ -43,10 +44,7 @@ class CommandGetId : public Command, pub
-     bool m_work_with_history = false;
-     bool m_verbose_ids = false;
- 
--    std::set<osmium::object_id_type> m_ids[3];
--
--    std::set<osmium::object_id_type>& ids(osmium::item_type type) noexcept;
--    const std::set<osmium::object_id_type>& ids(osmium::item_type type) const noexcept;
-+    osmium::index::NWRIdSet<osmium::index::IdSetDense> m_ids;
- 
-     void parse_and_add_id(const std::string& s);
- 
---- a/src/command_merge.cpp
-+++ b/src/command_merge.cpp
-@@ -147,7 +147,8 @@ bool operator!=(const QueueElement& lhs,
- bool CommandMerge::run() {
-     m_vout << "Opening output file...\n";
-     osmium::io::Header header;
--    header.set("generator", m_generator);
-+    setup_header(header);
-+
-     osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
- 
-     if (m_input_files.size() == 1) {
---- a/src/command_merge_changes.cpp
-+++ b/src/command_merge_changes.cpp
-@@ -90,7 +90,8 @@ void CommandMergeChanges::show_arguments
- bool CommandMergeChanges::run() {
-     m_vout << "Opening output file...\n";
-     osmium::io::Header header;
--    header.set("generator", m_generator);
-+    setup_header(header);
-+
-     osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
-     auto out = osmium::io::make_output_iterator(writer);
- 
---- a/src/command_renumber.cpp
-+++ b/src/command_renumber.cpp
-@@ -218,7 +218,7 @@ void CommandRenumber::read_index(osmium:
-         if (errno == ENOENT) {
-             return;
-         }
--        throw std::runtime_error{std::string{"Can't open file '"} + f + "': " + std::strerror(errno)};
-+        throw std::runtime_error{std::string{"Could not open file '"} + f + "': " + std::strerror(errno)};
-     }
- #ifdef _WIN32
-     _setmode(fd, _O_BINARY);
-@@ -227,7 +227,7 @@ void CommandRenumber::read_index(osmium:
-     const std::size_t file_size = osmium::util::file_size(fd);
- 
-     if (file_size % sizeof(osmium::object_id_type) != 0) {
--        throw std::runtime_error{std::string{"index file '"} + f + "' has wrong file size"};
-+        throw std::runtime_error{std::string{"Index file '"} + f + "' has wrong file size"};
-     }
- 
-     map(type).read(fd, file_size);
-@@ -243,7 +243,7 @@ void CommandRenumber::write_index(osmium
-     const std::string f{filename(osmium::item_type_to_name(type))};
-     const int fd = ::open(f.c_str(), O_WRONLY | O_CREAT, 0666);
-     if (fd < 0) {
--        throw std::runtime_error{std::string{"Can't open file '"} + f + "': " + std::strerror(errno)};
-+        throw std::runtime_error{std::string{"Could not open file '"} + f + "': " + std::strerror(errno)};
-     }
- #ifdef _WIN32
-     _setmode(fd, _O_BINARY);
-@@ -288,11 +288,9 @@ bool CommandRenumber::run() {
-     osmium::io::Reader reader_pass2{m_input_file};
- 
-     osmium::io::Header header = reader_pass2.header();
--    header.set("generator", m_generator);
-+    setup_header(header);
-     header.set("xml_josm_upload", "false");
--    for (const auto& h : m_output_headers) {
--        header.set(h);
--    }
-+
-     osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
- 
-     osmium::ProgressBar progress_bar{reader_pass2.file_size(), display_progress()};
---- a/src/command_show.cpp
-+++ b/src/command_show.cpp
-@@ -131,12 +131,12 @@ bool CommandShow::setup(const std::vecto
- static int execute_pager(const std::string& pager) {
-     int pipefd[2];
-     if (::pipe(pipefd) < 0) {
--        throw std::system_error{errno, std::system_category(), "opening pipe failed"};
-+        throw std::system_error{errno, std::system_category(), "Could not run pager: pipe() call failed"};
-     }
- 
-     pid_t pid = fork();
-     if (pid < 0) {
--        throw std::system_error{errno, std::system_category(), "fork failed"};
-+        throw std::system_error{errno, std::system_category(), "Could not run pager: fork() call failed"};
-     }
- 
-     if (pid == 0) {
-@@ -159,7 +159,7 @@ static int execute_pager(const std::stri
-     ::close(pipefd[0]); // close read end of the pipe
- 
-     if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
--        throw std::system_error{errno, std::system_category(), "signal call failed"};
-+        throw std::system_error{errno, std::system_category(), "Could not run pager: signal() call failed"};
-     }
- 
-     return pipefd[1];
-@@ -183,7 +183,7 @@ bool CommandShow::run() {
- 
-         ::close(1); // close stdout
-         if (::dup2(fd, 1) < 0) { // put end of pipe as stdout
--            throw std::system_error{errno, std::system_category(), "dup2 failed"};
-+            throw std::system_error{errno, std::system_category(), "Could not run pager: dup2() call failed"};
-         }
- 
-         osmium::io::File file{"-", m_output_format};
-@@ -204,10 +204,10 @@ bool CommandShow::run() {
-         int status = 0;
-         const int pid = ::wait(&status);
-         if (pid < 0) {
--            throw std::system_error{errno, std::system_category(), "wait failed"};
-+            throw std::system_error{errno, std::system_category(), "Could not run pager: wait() call failed"};
-         }
-         if (WIFEXITED(status) && WEXITSTATUS(status) == 1) {
--            throw argument_error{std::string{"Could not execute pager '"} + m_pager + "'"};
-+            throw argument_error{std::string{"Could not run pager '"} + m_pager + "'"};
-         }
- #endif
-     }
---- a/src/command_sort.cpp
-+++ b/src/command_sort.cpp
-@@ -99,10 +99,11 @@ bool CommandSort::run() {
- 
-     m_vout << "Opening output file...\n";
-     osmium::io::Header header;
-+    setup_header(header);
-     if (bounding_box) {
-         header.add_box(bounding_box);
-     }
--    header.set("generator", m_generator);
-+
-     osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
- 
-     m_vout << "Sorting data...\n";
---- a/src/command_time_filter.cpp
-+++ b/src/command_time_filter.cpp
-@@ -126,7 +126,8 @@ bool CommandTimeFilter::run() {
- 
-     m_vout << "Opening output file...\n";
-     osmium::io::Header header{reader.header()};
--    header.set("generator", m_generator);
-+    setup_header(header);
-+
-     osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
- 
-     m_vout << "Filter data while copying it from input to output...\n";
---- a/src/io.cpp
-+++ b/src/io.cpp
-@@ -29,6 +29,7 @@ along with this program.  If not, see <h
- #include <osmium/io/any_input.hpp> // IWYU pragma: keep
- #include <osmium/io/any_output.hpp> // IWYU pragma: keep
- #include <osmium/io/file.hpp>
-+#include <osmium/io/header.hpp>
- #include <osmium/io/writer_options.hpp>
- #include <osmium/util/file.hpp>
- #include <osmium/util/verbose_output.hpp>
-@@ -180,6 +181,13 @@ void with_osm_output::show_output_argume
-     }
- }
- 
-+void with_osm_output::setup_header(osmium::io::Header& header) const {
-+    header.set("generator", m_generator);
-+    for (const auto& h : m_output_headers) {
-+        header.set(h);
-+    }
-+}
-+
- std::size_t file_size_sum(std::vector<osmium::io::File> files) {
-     std::size_t sum = 0;
- 
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -20,6 +20,7 @@ along with this program.  If not, see <h
- 
- */
- 
-+#include <cerrno>
- #include <exception>
- #include <iostream>
- #include <memory>
-@@ -105,10 +106,10 @@ int main(int argc, char *argv[]) {
-             return return_code::okay;
-         }
-     } catch (const boost::program_options::error& e) {
--        std::cerr << "Error parsing command line: " << e.what() << std::endl;
-+        std::cerr << "Error parsing command line: " << e.what() << '\n';
-         return return_code::fatal;
-     } catch (const std::exception& e) {
--        std::cerr << e.what() << std::endl;
-+        std::cerr << e.what() << '\n';
-         return return_code::fatal;
-     }
- 
-@@ -121,11 +122,17 @@ int main(int argc, char *argv[]) {
-     } catch (const std::bad_alloc&) {
-         std::cerr << "Out of memory. Read the MEMORY USAGE section of the osmium(1) manpage.\n";
-     } catch (const osmium::out_of_order_error& e) {
--        std::cerr << e.what() << "\n";
-+        std::cerr << e.what() << '\n';
-         std::cerr << "This command expects the input file to be ordered: First nodes in order of ID,\n"
-                   << "then ways in order of ID, then relations in order of ID.\n";
-+    } catch (const std::system_error& e) {
-+        std::cerr << e.what();
-+        if (e.code().value() == EEXIST) {
-+            std::cerr << ". Try using --overwrite if you are sure you want to overwrite the file.";
-+        }
-+        std::cerr << '\n';
-     } catch (const std::exception& e) {
--        std::cerr << e.what() << "\n";
-+        std::cerr << e.what() << '\n';
-     }
- 
-     return return_code::error;
---- a/test/diff/test_setup.cpp
-+++ b/test/diff/test_setup.cpp
-@@ -7,7 +7,7 @@ TEST_CASE("diff") {
- 
-     CommandDiff cmd;
- 
--    SECTION("no argments - need exactly two arguments") {
-+    SECTION("no arguments - need exactly two arguments") {
-         REQUIRE_THROWS_AS(cmd.setup({}), argument_error);
-     }
- 
-@@ -27,12 +27,8 @@ TEST_CASE("diff") {
-         REQUIRE_THROWS_AS(cmd.setup({"-q", "-f", "opl"}), argument_error);
-     }
- 
--    SECTION("quiet with output parameter --fsync") {
--        REQUIRE_THROWS_AS(cmd.setup({"-q", "--fsync"}), argument_error);
--    }
--
--    SECTION("quiet with output parameter --output-header") {
--        REQUIRE_THROWS_AS(cmd.setup({"-q", "--output-header", "foo"}), argument_error);
-+    SECTION("parameter --fsync") {
-+        REQUIRE_THROWS_AS(cmd.setup({"--fsync"}), boost::program_options::unknown_option);
-     }
- 
-     SECTION("quiet with output parameter -O") {
---- a/test/include/catch.hpp
-+++ b/test/include/catch.hpp
-@@ -1,6 +1,6 @@
- /*
-- *  Catch v1.5.6
-- *  Generated: 2016-06-09 19:20:41.460328
-+ *  Catch v1.5.8
-+ *  Generated: 2016-10-26 12:07:30.938259
-  *  ----------------------------------------------------------
-  *  This file has been merged from multiple headers. Please don't edit it directly
-  *  Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved.
-@@ -3223,10 +3223,11 @@ namespace Catch {
- 
-             bool matches( TestCaseInfo const& testCase ) const {
-                 // All patterns in a filter must match for the filter to be a match
--                for( std::vector<Ptr<Pattern> >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it )
-+                for( std::vector<Ptr<Pattern> >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it ) {
-                     if( !(*it)->matches( testCase ) )
-                         return false;
--                    return true;
-+                }
-+                return true;
-             }
-         };
- 
-@@ -4719,8 +4720,11 @@ namespace Catch {
-         std::string line;
-         while( std::getline( f, line ) ) {
-             line = trim(line);
--            if( !line.empty() && !startsWith( line, "#" ) )
--                addTestOrTags( config, "\"" + line + "\"," );
-+            if( !line.empty() && !startsWith( line, "#" ) ) {
-+                if( !startsWith( line, "\"" ) )
-+                    line = "\"" + line + "\"";
-+                addTestOrTags( config, line + "," );
-+            }
-         }
-     }
- 
-@@ -5368,7 +5372,10 @@ namespace Catch {
-                 ++it ) {
-             matchedTests++;
-             TestCaseInfo const& testCaseInfo = it->getTestCaseInfo();
--            Catch::cout() << testCaseInfo.name << std::endl;
-+            if( startsWith( testCaseInfo.name, "#" ) )
-+               Catch::cout() << "\"" << testCaseInfo.name << "\"" << std::endl;
-+            else
-+               Catch::cout() << testCaseInfo.name << std::endl;
-         }
-         return matchedTests;
-     }
-@@ -6454,7 +6461,7 @@ namespace Catch {
- namespace Catch {
- 
-     struct RandomNumberGenerator {
--        typedef int result_type;
-+        typedef std::ptrdiff_t result_type;
- 
-         result_type operator()( result_type n ) const { return std::rand() % n; }
- 
-@@ -7571,7 +7578,7 @@ namespace Catch {
-         return os;
-     }
- 
--    Version libraryVersion( 1, 5, 6, "", 0 );
-+    Version libraryVersion( 1, 5, 8, "", 0 );
- 
- }
- 
-@@ -7802,8 +7809,11 @@ namespace Catch {
-     bool contains( std::string const& s, std::string const& infix ) {
-         return s.find( infix ) != std::string::npos;
-     }
-+    char toLowerCh(char c) {
-+        return static_cast<char>( ::tolower( c ) );
-+    }
-     void toLowerInPlace( std::string& s ) {
--        std::transform( s.begin(), s.end(), s.begin(), ::tolower );
-+        std::transform( s.begin(), s.end(), s.begin(), toLowerCh );
-     }
-     std::string toLower( std::string const& s ) {
-         std::string lc = s;
-@@ -8951,9 +8961,10 @@ namespace Catch {
-                         break;
- 
-                     default:
--                        // Escape control chars - based on contribution by @espenalb in PR #465
-+                        // Escape control chars - based on contribution by @espenalb in PR #465 and
-+                        // by @mrpi PR #588
-                         if ( ( c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' )
--                            os << "&#x" << std::uppercase << std::hex << static_cast<int>( c );
-+                            os << "&#x" << std::uppercase << std::hex << std::setfill('0') << std::setw(2) << static_cast<int>( c ) << ';';
-                         else
-                             os << c;
-                 }
-@@ -9008,13 +9019,20 @@ namespace Catch {
-         :   m_tagIsOpen( false ),
-             m_needsNewline( false ),
-             m_os( &Catch::cout() )
--        {}
-+        {
-+            // We encode control characters, which requires
-+            // XML 1.1
-+            // see http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0
-+            *m_os << "<?xml version=\"1.1\" encoding=\"UTF-8\"?>\n";
-+        }
- 
-         XmlWriter( std::ostream& os )
-         :   m_tagIsOpen( false ),
-             m_needsNewline( false ),
-             m_os( &os )
--        {}
-+        {
-+            *m_os << "<?xml version=\"1.1\" encoding=\"UTF-8\"?>\n";
-+        }
- 
-         ~XmlWriter() {
-             while( !m_tags.empty() )
-@@ -9181,7 +9199,7 @@ namespace Catch {
- 
-         virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE {
-             StreamingReporterBase::testCaseStarting(testInfo);
--            m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) );
-+            m_xml.startElement( "TestCase" ).writeAttribute( "name", testInfo.name );
- 
-             if ( m_config->showDurations() == ShowDurations::Always )
-                 m_testCaseTimer.start();
-@@ -9243,7 +9261,7 @@ namespace Catch {
-                         .writeText( assertionResult.getMessage() );
-                     break;
-                 case ResultWas::FatalErrorCondition:
--                    m_xml.scopedElement( "Fatal Error Condition" )
-+                    m_xml.scopedElement( "FatalErrorCondition" )
-                         .writeAttribute( "filename", assertionResult.getSourceInfo().file )
-                         .writeAttribute( "line", assertionResult.getSourceInfo().line )
-                         .writeText( assertionResult.getMessage() );
---- a/test/io/Makefile.in
-+++ b/test/io/Makefile.in
-@@ -32,7 +32,8 @@ OSMOSIS := /usr/bin/osmosis
- 
- OSMIUM  := @CMAKE_BINARY_DIR@/src/osmium
- 
--OSMIUM_CMD := $(OSMIUM) cat --overwrite
-+OSMIUM_CMD := $(OSMIUM) cat --overwrite --no-progress
-+OSMIUM_FILEINFO := $(OSMIUM) fileinfo --no-progress -e -g data.crc32
- 
- ifeq ($(suffix $(INPUT)),.pbf)
-     OSMOSIS_READ := $(OSMOSIS) --read-pbf
-@@ -99,7 +100,7 @@ $(DIR)/osmium-DCbmg-fake.osm.opl: $(DIR)
- 	sed -e 's/ v.* T/ v0 dV c0 t i0 u T/' $^ >$@
- 
- $(DIR)/osmium-DCbMG-fake.osm.opl: $(DIR)/osmium-DCbMg.osm.opl
--	grep '^n' $^ | sed -e 's/[0-9][0-9] y/00 y/' -e 's/[0-9][0-9]$$/00/' >$@
-+	grep '^n' $^ | sed -e 's/[0-9][0-9] y/ y/' -e 's/\(.*\) y\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\).*/\1 y\2/' -e 's/0\+$$//' >$@
- 	grep '^[wr]' $^ >>$@
- 
- $(DIR)/report_opl: opl_input opl_files \
-@@ -157,7 +158,7 @@ $(DIR)/report_default: \
- 	echo "Default:" >$@; \
- 	for i in $^; do \
- 	    filename=`basename $$i`; \
--	    crc=`$(OSMIUM) fileinfo -e -g data.crc32 $$i`; \
-+	    crc=`$(OSMIUM_FILEINFO) $$i`; \
- 	    echo $$crc $$filename >>$@; \
- 	done; \
- 	echo >>$@
-@@ -167,7 +168,7 @@ $(DIR)/report_granularity: \
- 	echo "Non-standard granularity:" >$@; \
- 	for i in $^; do \
- 	    filename=`basename $$i`; \
--	    crc=`$(OSMIUM) fileinfo -e -g data.crc32 $$i`; \
-+	    crc=`$(OSMIUM_FILEINFO) $$i`; \
- 	    echo $$crc $$filename >>$@; \
- 	done; \
- 	echo >>$@
-@@ -180,7 +181,7 @@ $(DIR)/report_without_metadata: \
- 	echo "Without metadata:" >$@; \
- 	for i in $^; do \
- 	    filename=`basename $$i`; \
--	    crc=`$(OSMIUM) fileinfo -e -g data.crc32 $$i`; \
-+	    crc=`$(OSMIUM_FILEINFO) $$i`; \
- 	    echo $$crc $$filename >>$@; \
- 	done; \
- 	echo >>$@
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index 5ad459e..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1,2 +0,0 @@
-spelling-errors.patch
-libosmium-2.10.2.patch
diff --git a/debian/patches/spelling-errors.patch b/debian/patches/spelling-errors.patch
deleted file mode 100644
index 6e910ee..0000000
--- a/debian/patches/spelling-errors.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-Description: Fix spelling errors.
- * chnage    -> change
- * preceeded -> preceded
- * noticable -> noticeable
-Author: Bas Couwenberg <sebastic at debian.org>
-Forwarded: https://github.com/osmcode/osmium-tool/pull/35
-Applied-Upstream: https://github.com/osmcode/osmium-tool/commit/6431bcc4b9c23411b08dc69c8e8fda6d73e93a49
-
---- a/man/osmium-derive-changes.md
-+++ b/man/osmium-derive-changes.md
-@@ -18,7 +18,7 @@ applied on *OSM-FILE1* to re-create *OSM
- Objects in both input files must be sorted by type, ID, and version. The first
- input file must be from a point in time before the second input file.
- 
--For this command to create a proper chnage file you have to set the
-+For this command to create a proper change file you have to set the
- **--output** option or **--output-format** option in a way that it will
- generate an .osc file, typically by using something like '-o out.osc.gz'.
- You can create any other OSM file format, but that is usually not what you
---- a/man/osmium-diff.md
-+++ b/man/osmium-diff.md
-@@ -40,12 +40,12 @@ compact
-     file, respectively.
- 
- opl
--:   The usual OPL format with all lines preceeded by space (' '), minus
-+:   The usual OPL format with all lines preceded by space (' '), minus
-     ('-'), or plus ('+') characters depending on whether the object is in both,
-     the first, or the second file.
- 
- debug
--:   The usual debug format with all lines preceeded by space (' '), minus
-+:   The usual debug format with all lines preceded by space (' '), minus
-     ('-'), or plus ('+') characters depending on whether the object is in both,
-     the first, or the second file. Color support can be enabled ('debug,color').
- 
---- a/man/osmium-merge.md
-+++ b/man/osmium-merge.md
-@@ -46,7 +46,7 @@ correctly.
- # MEMORY USAGE
- 
- **osmium merge** doesn't keep a lot of data in memory, but if you are merging
--many files, the buffers might take a noticable amount of memory.
-+many files, the buffers might take a noticeable amount of memory.
- 
- 
- # EXAMPLES

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/osmium-tool.git



More information about the Pkg-grass-devel mailing list