|
14 | 14 | //! or contains "invocation-specific". |
15 | 15 |
|
16 | 16 | use std::cell::RefCell; |
17 | | -use std::ffi::OsString; |
| 17 | +use std::ffi::{OsStr, OsString}; |
18 | 18 | use std::fs::File; |
19 | 19 | use std::io::{self, Write as _}; |
20 | 20 | use std::iter::once; |
@@ -83,9 +83,11 @@ pub(crate) fn write_shared( |
83 | 83 | }; |
84 | 84 |
|
85 | 85 | if let Some(parts_out_dir) = &opt.parts_out_dir { |
86 | | - create_parents(&parts_out_dir.0)?; |
| 86 | + let mut parts_out_file = parts_out_dir.0.clone(); |
| 87 | + parts_out_file.push(&format!("{crate_name}.json")); |
| 88 | + create_parents(&parts_out_file)?; |
87 | 89 | try_err!( |
88 | | - fs::write(&parts_out_dir.0, serde_json::to_string(&info).unwrap()), |
| 90 | + fs::write(&parts_out_file, serde_json::to_string(&info).unwrap()), |
89 | 91 | &parts_out_dir.0 |
90 | 92 | ); |
91 | 93 | } |
@@ -237,13 +239,25 @@ impl CrateInfo { |
237 | 239 | pub(crate) fn read_many(parts_paths: &[PathToParts]) -> Result<Vec<Self>, Error> { |
238 | 240 | parts_paths |
239 | 241 | .iter() |
240 | | - .map(|parts_path| { |
241 | | - let path = &parts_path.0; |
242 | | - let parts = try_err!(fs::read(path), &path); |
243 | | - let parts: CrateInfo = try_err!(serde_json::from_slice(&parts), &path); |
244 | | - Ok::<_, Error>(parts) |
| 242 | + .fold(Ok(Vec::new()), |acc, parts_path| { |
| 243 | + let mut acc = acc?; |
| 244 | + let dir = &parts_path.0; |
| 245 | + acc.append(&mut try_err!(std::fs::read_dir(dir), dir.as_path()) |
| 246 | + .filter_map(|file| { |
| 247 | + let to_crate_info = |file: Result<std::fs::DirEntry, std::io::Error>| -> Result<Option<CrateInfo>, Error> { |
| 248 | + let file = try_err!(file, dir.as_path()); |
| 249 | + if file.path().extension() != Some(OsStr::new("json")) { |
| 250 | + return Ok(None); |
| 251 | + } |
| 252 | + let parts = try_err!(fs::read(file.path()), file.path()); |
| 253 | + let parts: CrateInfo = try_err!(serde_json::from_slice(&parts), file.path()); |
| 254 | + Ok(Some(parts)) |
| 255 | + }; |
| 256 | + to_crate_info(file).transpose() |
| 257 | + }) |
| 258 | + .collect::<Result<Vec<CrateInfo>, Error>>()?); |
| 259 | + Ok(acc) |
245 | 260 | }) |
246 | | - .collect::<Result<Vec<CrateInfo>, Error>>() |
247 | 261 | } |
248 | 262 | } |
249 | 263 |
|
|
0 commit comments