Skip to content

Commit 209db39

Browse files
committed
Open output files earlier in several commands
So we get error message earlier if there are any problems. Needs libosmium version 2.20.0.
1 parent 5543e7c commit 209db39

File tree

8 files changed

+47
-57
lines changed

8 files changed

+47
-57
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ This project adheres to [Semantic Versioning](https://semver.org/).
1414

1515
### Changed
1616

17+
- Needs at least libosmium version 2.20.0.
1718
- Switch from RapidJSON to NLohman JSON. RapidJSON hasn't seen an update in
1819
a long time, so we are using a different JSON library.
1920
- Removed "spaten" output format.
20-
- Open writer in getid command earlier, so see potential errors earlier.
21+
- Open writer in some commands earlier, so we see potential errors earlier.
2122
- Lots of small code cleanups.
2223

2324
### Fixed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ option(RUN_TESTS_WITH_BINARY_COMPARE "Run tests that do binary comparisons" ON)
4848
find_package(Boost 1.55.0 REQUIRED COMPONENTS program_options)
4949
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
5050

51-
find_package(Osmium 2.17.0 REQUIRED COMPONENTS io)
51+
find_package(Osmium 2.20.0 REQUIRED COMPONENTS io)
5252
include_directories(SYSTEM ${OSMIUM_INCLUDE_DIRS})
5353

5454
find_package(nlohmann_json)

src/command_add_locations_to_ways.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,9 @@ void CommandAddLocationsToWays::find_member_nodes() {
176176
}
177177

178178
bool CommandAddLocationsToWays::run() {
179+
m_output_file.set("locations_on_ways");
180+
osmium::io::Writer writer{m_output_file, m_output_overwrite, m_fsync};
181+
179182
if (m_keep_member_nodes) {
180183
m_vout << "Getting all nodes referenced from relations...\n";
181184
find_member_nodes();
@@ -191,14 +194,12 @@ bool CommandAddLocationsToWays::run() {
191194
location_handler.ignore_errors();
192195
}
193196

194-
m_output_file.set("locations_on_ways");
195-
196197
if (m_input_files.size() == 1) { // single input file
197198
m_vout << "Copying input file '" << m_input_files[0].filename() << "'...\n";
198199
osmium::io::Reader reader{m_input_files[0]};
199200
osmium::io::Header header{reader.header()};
200201
setup_header(header);
201-
osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
202+
writer.set_header(header);
202203

203204
osmium::ProgressBar progress_bar{reader.file_size(), display_progress()};
204205
copy_data(progress_bar, reader, writer, location_handler);
@@ -209,7 +210,7 @@ bool CommandAddLocationsToWays::run() {
209210
} else { // multiple input files
210211
osmium::io::Header header;
211212
setup_header(header);
212-
osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
213+
writer.set_header(header);
213214

214215
osmium::ProgressBar progress_bar{file_size_sum(m_input_files), display_progress()};
215216
for (const auto& input_file : m_input_files) {

src/command_apply_changes.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,13 @@ void CommandApplyChanges::apply_changes_and_write(osmium::ObjectPointerCollectio
275275
}
276276

277277
bool CommandApplyChanges::run() {
278+
if (m_locations_on_ways) {
279+
m_output_file.set("locations_on_ways");
280+
}
281+
282+
m_vout << "Opening output file...\n";
283+
osmium::io::Writer writer{m_output_file, m_output_overwrite, m_fsync};
284+
278285
std::vector<osmium::memory::Buffer> changes;
279286
osmium::ObjectPointerCollection objects;
280287

@@ -302,13 +309,7 @@ bool CommandApplyChanges::run() {
302309
if (m_with_history) {
303310
header.set_has_multiple_object_versions(true);
304311
}
305-
306-
if (m_locations_on_ways) {
307-
m_output_file.set("locations_on_ways");
308-
}
309-
310-
m_vout << "Opening output file...\n";
311-
osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
312+
writer.set_header(header);
312313

313314
if (m_with_history) {
314315
// For history files this is a straightforward sort of the change

src/command_derive_changes.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,12 @@ void CommandDeriveChanges::write_deleted(osmium::io::Writer& writer, osmium::OSM
151151
}
152152

153153
bool CommandDeriveChanges::run() {
154+
m_vout << "Opening output file...\n";
155+
if (m_output_file.format() != osmium::io::file_format::xml || !m_output_file.is_true("xml_change_format")) {
156+
warning("Output format chosen is not the XML change format. Use .osc(.gz|bz2) as suffix or -f option.\n");
157+
}
158+
osmium::io::Writer writer{m_output_file, m_output_overwrite, m_fsync};
159+
154160
m_vout << "Opening input files...\n";
155161
osmium::io::Reader reader1{m_input_files[0], osmium::osm_entity_bits::object};
156162
osmium::io::ReaderWithProgressBar reader2{display_progress(), m_input_files[1], osmium::osm_entity_bits::object};
@@ -161,16 +167,9 @@ bool CommandDeriveChanges::run() {
161167
auto end1 = in1.end();
162168
auto end2 = in2.end();
163169

164-
reader2.progress_bar().remove();
165-
m_vout << "Opening output file...\n";
166-
if (m_output_file.format() != osmium::io::file_format::xml || !m_output_file.is_true("xml_change_format")) {
167-
warning("Output format chosen is not the XML change format. Use .osc(.gz|bz2) as suffix or -f option.\n");
168-
}
169-
170170
osmium::io::Header header;
171171
setup_header(header);
172-
173-
osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
172+
writer.set_header(header);
174173

175174
reader2.progress_bar().remove();
176175
m_vout << "Deriving changes...\n";

src/command_getid.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -333,18 +333,19 @@ void CommandGetId::find_referenced_objects() {
333333
}
334334

335335
bool CommandGetId::run() {
336+
m_vout << "Opening output file...\n";
337+
osmium::io::Writer writer{m_output_file, m_output_overwrite, m_fsync};
338+
336339
if (m_add_referenced_objects) {
337340
find_referenced_objects();
338341
}
339342

340343
m_vout << "Opening input file...\n";
341344
osmium::io::Reader reader{m_input_file, get_needed_types()};
342345

343-
m_vout << "Opening output file...\n";
344346
osmium::io::Header header{reader.header()};
345347
setup_header(header);
346-
347-
osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
348+
writer.set_header(header);
348349

349350
m_vout << "Copying matching objects to output file...\n";
350351
osmium::ProgressBar progress_bar{reader.file_size(), display_progress()};

src/command_sort.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ void CommandSort::show_arguments() {
104104
}
105105

106106
bool CommandSort::run_single_pass() {
107+
osmium::io::Writer writer{m_output_file, m_output_overwrite, m_fsync};
108+
107109
std::vector<osmium::memory::Buffer> data;
108110
osmium::ObjectPointerCollection objects;
109111

@@ -149,8 +151,7 @@ bool CommandSort::run_single_pass() {
149151
if (bounding_box) {
150152
header.add_box(bounding_box);
151153
}
152-
153-
osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
154+
writer.set_header(header);
154155

155156
m_vout << "Sorting data...\n";
156157
objects.sort(osmium::object_order_type_id_version());
@@ -169,6 +170,8 @@ bool CommandSort::run_single_pass() {
169170
}
170171

171172
bool CommandSort::run_multi_pass() {
173+
osmium::io::Writer writer{m_output_file, m_output_overwrite, m_fsync};
174+
172175
osmium::Box bounding_box;
173176

174177
m_vout << "Reading input file headers...\n";
@@ -185,8 +188,7 @@ bool CommandSort::run_multi_pass() {
185188
if (bounding_box) {
186189
header.add_box(bounding_box);
187190
}
188-
189-
osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
191+
writer.set_header(header);
190192

191193
osmium::ProgressBar progress_bar{file_size_sum(m_input_files) * 3, display_progress()};
192194

src/command_tags_filter.cpp

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -363,44 +363,29 @@ void CommandTagsFilter::copy_matching_objects(osmium::io::Reader& reader, osmium
363363
}
364364
}
365365
progress_bar.done();
366-
367-
m_vout << "Closing output file...\n";
368-
writer.close();
369-
370-
m_vout << "Closing input file...\n";
371-
reader.close();
372366
}
373367

374368
bool CommandTagsFilter::run() {
375-
if (m_add_referenced_objects) {
376-
m_vout << "Opening input file to get header...\n";
377-
osmium::io::Reader reader_only_for_header{m_input_file, osmium::osm_entity_bits::nothing};
378-
379-
m_vout << "Opening output file...\n";
380-
osmium::io::Header header{reader_only_for_header.header()};
381-
setup_header(header);
382-
reader_only_for_header.close();
383-
384-
osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
369+
m_vout << "Opening output file...\n";
370+
osmium::io::Writer writer{m_output_file, m_output_overwrite, m_fsync};
385371

372+
if (m_add_referenced_objects) {
386373
find_referenced_objects();
374+
}
387375

388-
m_vout << "Opening input file...\n";
389-
osmium::io::Reader reader{m_input_file, get_needed_types()};
390-
391-
copy_matching_objects(reader, writer);
392-
} else {
393-
m_vout << "Opening input file...\n";
394-
osmium::io::Reader reader{m_input_file, get_needed_types()};
376+
m_vout << "Opening input file...\n";
377+
osmium::io::Reader reader{m_input_file, get_needed_types()};
378+
osmium::io::Header header{reader.header()};
379+
setup_header(header);
380+
writer.set_header(header);
395381

396-
m_vout << "Opening output file...\n";
397-
osmium::io::Header header{reader.header()};
398-
setup_header(header);
382+
copy_matching_objects(reader, writer);
399383

400-
osmium::io::Writer writer{m_output_file, header, m_output_overwrite, m_fsync};
384+
m_vout << "Closing output file...\n";
385+
writer.close();
401386

402-
copy_matching_objects(reader, writer);
403-
}
387+
m_vout << "Closing input file...\n";
388+
reader.close();
404389

405390
show_memory_used();
406391

0 commit comments

Comments
 (0)