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