_ => return,
};
- let mut data = tools::file_get_json(&path).unwrap_or(json!({}));
+ let mut data = tools::file_get_json(&path, None).unwrap_or(json!({}));
let repo = repo.to_string();
_ => return result,
};
- let data = tools::file_get_json(&path).unwrap_or(json!({}));
+ let data = tools::file_get_json(&path, None).unwrap_or(json!({}));
if let Some(map) = data.as_object() {
for (repo, _count) in map {
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0600);
- let mut data = tools::file_get_json(&path).unwrap_or(json!({}));
+ let mut data = tools::file_get_json(&path, Some(json!({})))?;
let now = Utc::now().timestamp();
_ => return None,
};
- let data = tools::file_get_json(&path).unwrap_or(json!({}));
+ let data = match tools::file_get_json(&path, None) {
+ Ok(v) => v,
+ _ => return None,
+ };
let now = Utc::now().timestamp();
}).map_err(|err| format_err!("unable to read {:?} - {}", path, err))
}
-pub fn file_get_json<P: AsRef<Path>>(path: P) -> Result<Value, Error> {
+pub fn file_get_json<P: AsRef<Path>>(path: P, default: Option<Value>) -> Result<Value, Error> {
let path = path.as_ref();
- let raw = file_get_contents(path)?;
+ let raw = match std::fs::read(path) {
+ Ok(v) => v,
+ Err(err) => {
+ if err.kind() == std::io::ErrorKind::NotFound {
+ if let Some(v) = default {
+ return Ok(v);
+ }
+ }
+ bail!("unable to read json {:?} - {}", path, err);
+ }
+ };
try_block!({
let data = String::from_utf8(raw)?;
let json = serde_json::from_str(&data)?;
Ok(json)
- }).map_err(|err: Error| format_err!("unable to read json from {:?} - {}", path, err))
+ }).map_err(|err: Error| format_err!("unable to parse json from {:?} - {}", path, err))
}
/// Atomically write a file. We first create a temporary file, which