make the importer depend less on external unix commands for #119. still need to handle unzip and curl.

This commit is contained in:
Dustin Carlino 2020-07-22 22:51:45 -07:00
parent 29bebbc883
commit 0f0860b4b5

View File

@ -32,13 +32,13 @@ pub fn download(output: &str, url: &str) {
}; };
println!("- Unzipping into {}", unzip_to); println!("- Unzipping into {}", unzip_to);
run(Command::new("unzip").arg(tmp).arg("-d").arg(unzip_to)); run(Command::new("unzip").arg(tmp).arg("-d").arg(unzip_to));
rm(tmp); std::fs::remove_file(tmp).unwrap();
} else if url.ends_with(".gz") { } else if url.ends_with(".gz") {
println!("- Gunzipping"); println!("- Gunzipping");
run(Command::new("mv").arg(tmp).arg(format!("{}.gz", output))); std::fs::rename(tmp, format!("{}.gz", output)).unwrap();
run(Command::new("gunzip").arg(format!("{}.gz", output))); run(Command::new("gunzip").arg(format!("{}.gz", output)));
} else { } else {
run(Command::new("mv").arg(tmp).arg(output)); std::fs::rename(tmp, output).unwrap();
} }
} }
@ -62,9 +62,7 @@ pub fn download_kml(
let tmp = "tmp_output"; let tmp = "tmp_output";
if Path::new(&output.replace(".bin", ".kml")).exists() { if Path::new(&output.replace(".bin", ".kml")).exists() {
run(Command::new("cp") std::fs::copy(output.replace(".bin", ".kml"), tmp).unwrap();
.arg(output.replace(".bin", ".kml"))
.arg(tmp));
} else { } else {
println!("- Missing {}, so downloading {}", output, url); println!("- Missing {}, so downloading {}", output, url);
run(Command::new("curl") run(Command::new("curl")
@ -87,9 +85,7 @@ pub fn download_kml(
abstutil::write_binary(output.clone(), &shapes); abstutil::write_binary(output.clone(), &shapes);
// Keep the intermediate file; otherwise we inadvertently grab new upstream data when // Keep the intermediate file; otherwise we inadvertently grab new upstream data when
// changing some binary formats // changing some binary formats
run(Command::new("mv") std::fs::rename(tmp, output.replace(".bin", ".kml")).unwrap();
.arg(tmp)
.arg(output.replace(".bin", ".kml")));
} }
// Uses osmconvert to clip the input .osm (or .pbf) against a polygon and produce some output. // Uses osmconvert to clip the input .osm (or .pbf) against a polygon and produce some output.
@ -112,13 +108,6 @@ pub fn osmconvert(input: &str, clipping_polygon: String, output: String) {
.arg(format!("-o={}", output))); .arg(format!("-o={}", output)));
} }
// Removes files. Be careful!
pub fn rm<I: Into<String>>(path: I) {
let path = path.into();
println!("- Removing {}", path);
run(Command::new("rm").arg("-rfv").arg(path));
}
// Runs a command, asserts success. STDOUT and STDERR aren't touched. // Runs a command, asserts success. STDOUT and STDERR aren't touched.
fn run(cmd: &mut Command) { fn run(cmd: &mut Command) {
println!("- Running {:?}", cmd); println!("- Running {:?}", cmd);