diff --git a/lib/maptool/pmtiles_builder.rb b/lib/maptool/pmtiles_builder.rb index 7abe4bb..52720b9 100644 --- a/lib/maptool/pmtiles_builder.rb +++ b/lib/maptool/pmtiles_builder.rb @@ -506,25 +506,33 @@ module Maptool ENV.fetch("PLANETILER_JAR", "/usr/local/lib/planetiler.jar") end + # Some CLI tools (go-pmtiles included) write their actual error to + # stdout rather than stderr — combine both rather than risk raising a + # BuildError with nothing useful in it. + def self.command_output(stdout, stderr) + [stdout, stderr].map(&:strip).reject(&:empty?).join("\n") + end + private_class_method :command_output + def self.run_pmtiles!(*args) - _stdout, stderr, status = Open3.capture3(pmtiles_bin, *args) - raise BuildError, "pmtiles exited with status #{status.exitstatus}: #{stderr.strip}" unless status.success? + stdout, stderr, status = Open3.capture3(pmtiles_bin, *args) + raise BuildError, "pmtiles exited with status #{status.exitstatus}: #{command_output(stdout, stderr)}" unless status.success? rescue Errno::ENOENT, Errno::EACCES => e raise BuildError, "could not run '#{pmtiles_bin}' (#{e.message}) — is go-pmtiles installed and on PATH? See docs/development.adoc." end private_class_method :run_pmtiles! def self.run_osmium!(*args) - _stdout, stderr, status = Open3.capture3(osmium_bin, *args) - raise BuildError, "osmium exited with status #{status.exitstatus}: #{stderr.strip}" unless status.success? + stdout, stderr, status = Open3.capture3(osmium_bin, *args) + raise BuildError, "osmium exited with status #{status.exitstatus}: #{command_output(stdout, stderr)}" unless status.success? rescue Errno::ENOENT, Errno::EACCES => e raise BuildError, "could not run '#{osmium_bin}' (#{e.message}) — is osmium-tool installed and on PATH? See docs/development.adoc." end private_class_method :run_osmium! def self.run_planetiler!(*args) - _stdout, stderr, status = Open3.capture3(java_bin, "-jar", planetiler_jar, *args) - raise BuildError, "planetiler exited with status #{status.exitstatus}: #{stderr.strip}" unless status.success? + stdout, stderr, status = Open3.capture3(java_bin, "-jar", planetiler_jar, *args) + raise BuildError, "planetiler exited with status #{status.exitstatus}: #{command_output(stdout, stderr)}" unless status.success? rescue Errno::ENOENT, Errno::EACCES => e raise BuildError, "could not run '#{java_bin} -jar #{planetiler_jar}' (#{e.message}) — is Java and planetiler.jar installed? See docs/development.adoc." end