fix(clippy): appease the paperclip

This commit is contained in:
Kat Marchán 2021-09-15 19:57:58 -07:00
parent 97890872d5
commit 8d08e45298
No known key found for this signature in database
GPG Key ID: AEB529C08A3C7E9E
9 changed files with 64 additions and 74 deletions

View File

@ -2,9 +2,9 @@ use async_std::{fs as afs, task};
use std::fs::{self, File}; use std::fs::{self, File};
use std::io::prelude::*; use std::io::prelude::*;
use cacache;
use criterion::{black_box, criterion_group, criterion_main, Criterion}; use criterion::{black_box, criterion_group, criterion_main, Criterion};
use tempfile;
const NUM_REPEATS: usize = 10; const NUM_REPEATS: usize = 10;
@ -97,7 +97,7 @@ fn read_hash_many_sync(c: &mut Criterion) {
c.bench_function("get::data_hash_many_sync", move |b| { c.bench_function("get::data_hash_many_sync", move |b| {
b.iter(|| { b.iter(|| {
for sri in sris.iter() { for sri in sris.iter() {
cacache::read_hash_sync(black_box(&cache), black_box(&sri)).unwrap(); cacache::read_hash_sync(black_box(&cache), black_box(sri)).unwrap();
} }
}) })
}); });
@ -138,7 +138,7 @@ fn read_hash_many_async(c: &mut Criterion) {
b.iter(|| { b.iter(|| {
let tasks = sris let tasks = sris
.iter() .iter()
.map(|sri| cacache::read_hash(black_box(&cache), black_box(&sri))); .map(|sri| cacache::read_hash(black_box(&cache), black_box(sri)));
task::block_on(futures::future::join_all(tasks)); task::block_on(futures::future::join_all(tasks));
}) })
}); });

View File

@ -53,7 +53,7 @@ impl AsyncReader {
} }
pub fn open(cache: &Path, sri: Integrity) -> Result<Reader> { pub fn open(cache: &Path, sri: Integrity) -> Result<Reader> {
let cpath = path::content_path(&cache, &sri); let cpath = path::content_path(cache, &sri);
Ok(Reader { Ok(Reader {
fd: File::open(cpath).to_internal()?, fd: File::open(cpath).to_internal()?,
checker: IntegrityChecker::new(sri), checker: IntegrityChecker::new(sri),
@ -61,7 +61,7 @@ pub fn open(cache: &Path, sri: Integrity) -> Result<Reader> {
} }
pub async fn open_async(cache: &Path, sri: Integrity) -> Result<AsyncReader> { pub async fn open_async(cache: &Path, sri: Integrity) -> Result<AsyncReader> {
let cpath = path::content_path(&cache, &sri); let cpath = path::content_path(cache, &sri);
Ok(AsyncReader { Ok(AsyncReader {
fd: async_std::fs::File::open(cpath).await.to_internal()?, fd: async_std::fs::File::open(cpath).await.to_internal()?,
checker: IntegrityChecker::new(sri), checker: IntegrityChecker::new(sri),
@ -69,21 +69,21 @@ pub async fn open_async(cache: &Path, sri: Integrity) -> Result<AsyncReader> {
} }
pub fn read(cache: &Path, sri: &Integrity) -> Result<Vec<u8>> { pub fn read(cache: &Path, sri: &Integrity) -> Result<Vec<u8>> {
let cpath = path::content_path(&cache, &sri); let cpath = path::content_path(cache, sri);
let ret = fs::read(&cpath).to_internal()?; let ret = fs::read(&cpath).to_internal()?;
sri.check(&ret)?; sri.check(&ret)?;
Ok(ret) Ok(ret)
} }
pub async fn read_async<'a>(cache: &'a Path, sri: &'a Integrity) -> Result<Vec<u8>> { pub async fn read_async<'a>(cache: &'a Path, sri: &'a Integrity) -> Result<Vec<u8>> {
let cpath = path::content_path(&cache, &sri); let cpath = path::content_path(cache, sri);
let ret = async_std::fs::read(&cpath).await.to_internal()?; let ret = async_std::fs::read(&cpath).await.to_internal()?;
sri.check(&ret)?; sri.check(&ret)?;
Ok(ret) Ok(ret)
} }
pub fn copy(cache: &Path, sri: &Integrity, to: &Path) -> Result<u64> { pub fn copy(cache: &Path, sri: &Integrity, to: &Path) -> Result<u64> {
let cpath = path::content_path(&cache, &sri); let cpath = path::content_path(cache, sri);
let ret = fs::copy(&cpath, to).to_internal()?; let ret = fs::copy(&cpath, to).to_internal()?;
let data = fs::read(cpath).to_internal()?; let data = fs::read(cpath).to_internal()?;
sri.check(data)?; sri.check(data)?;
@ -91,7 +91,7 @@ pub fn copy(cache: &Path, sri: &Integrity, to: &Path) -> Result<u64> {
} }
pub async fn copy_async<'a>(cache: &'a Path, sri: &'a Integrity, to: &'a Path) -> Result<u64> { pub async fn copy_async<'a>(cache: &'a Path, sri: &'a Integrity, to: &'a Path) -> Result<u64> {
let cpath = path::content_path(&cache, &sri); let cpath = path::content_path(cache, sri);
let ret = async_std::fs::copy(&cpath, to).await.to_internal()?; let ret = async_std::fs::copy(&cpath, to).await.to_internal()?;
let data = async_std::fs::read(cpath).await.to_internal()?; let data = async_std::fs::read(cpath).await.to_internal()?;
sri.check(data)?; sri.check(data)?;
@ -99,7 +99,7 @@ pub async fn copy_async<'a>(cache: &'a Path, sri: &'a Integrity, to: &'a Path) -
} }
pub fn has_content(cache: &Path, sri: &Integrity) -> Option<Integrity> { pub fn has_content(cache: &Path, sri: &Integrity) -> Option<Integrity> {
if path::content_path(&cache, &sri).exists() { if path::content_path(cache, sri).exists() {
Some(sri.clone()) Some(sri.clone())
} else { } else {
None None
@ -107,7 +107,7 @@ pub fn has_content(cache: &Path, sri: &Integrity) -> Option<Integrity> {
} }
pub async fn has_content_async(cache: &Path, sri: &Integrity) -> Option<Integrity> { pub async fn has_content_async(cache: &Path, sri: &Integrity) -> Option<Integrity> {
if async_std::fs::metadata(path::content_path(&cache, &sri)) if async_std::fs::metadata(path::content_path(cache, sri))
.await .await
.is_ok() .is_ok()
{ {

View File

@ -8,12 +8,12 @@ use crate::content::path;
use crate::errors::{Internal, Result}; use crate::errors::{Internal, Result};
pub fn rm(cache: &Path, sri: &Integrity) -> Result<()> { pub fn rm(cache: &Path, sri: &Integrity) -> Result<()> {
fs::remove_file(path::content_path(&cache, &sri)).to_internal()?; fs::remove_file(path::content_path(cache, sri)).to_internal()?;
Ok(()) Ok(())
} }
pub async fn rm_async(cache: &Path, sri: &Integrity) -> Result<()> { pub async fn rm_async(cache: &Path, sri: &Integrity) -> Result<()> {
afs::remove_file(path::content_path(&cache, &sri)) afs::remove_file(path::content_path(cache, sri))
.await .await
.to_internal()?; .to_internal()?;
Ok(()) Ok(())

View File

@ -16,7 +16,7 @@ use tempfile::NamedTempFile;
use crate::content::path; use crate::content::path;
use crate::errors::{Internal, Result}; use crate::errors::{Internal, Result};
pub const MAX_MMAP_SIZE: usize = 1 * 1024 * 1024; pub const MAX_MMAP_SIZE: usize = 1024 * 1024;
pub struct Writer { pub struct Writer {
cache: PathBuf, cache: PathBuf,
@ -73,12 +73,12 @@ impl Writer {
impl Write for Writer { impl Write for Writer {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> { fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
self.builder.input(&buf); self.builder.input(buf);
if let Some(mmap) = &mut self.mmap { if let Some(mmap) = &mut self.mmap {
mmap.copy_from_slice(&buf); mmap.copy_from_slice(buf);
Ok(buf.len()) Ok(buf.len())
} else { } else {
self.tmpfile.write(&buf) self.tmpfile.write(buf)
} }
} }
@ -216,7 +216,7 @@ impl AsyncWriter {
impl AsyncWrite for AsyncWriter { impl AsyncWrite for AsyncWriter {
fn poll_write( fn poll_write(
mut self: Pin<&mut Self>, self: Pin<&mut Self>,
cx: &mut Context<'_>, cx: &mut Context<'_>,
buf: &[u8], buf: &[u8],
) -> Poll<std::io::Result<usize>> { ) -> Poll<std::io::Result<usize>> {
@ -273,7 +273,7 @@ impl AsyncWrite for AsyncWriter {
} }
} }
fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<std::io::Result<()>> { fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<std::io::Result<()>> {
let state = &mut *self.0.lock().unwrap(); let state = &mut *self.0.lock().unwrap();
loop { loop {
@ -313,7 +313,7 @@ impl AsyncWrite for AsyncWriter {
} }
} }
fn poll_close(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<std::io::Result<()>> { fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<std::io::Result<()>> {
let state = &mut *self.0.lock().unwrap(); let state = &mut *self.0.lock().unwrap();
loop { loop {

View File

@ -86,10 +86,10 @@ impl Reader {
if let Some(entry) = index::find_async(cache.as_ref(), key.as_ref()).await? { if let Some(entry) = index::find_async(cache.as_ref(), key.as_ref()).await? {
Reader::open_hash(cache, entry.integrity).await Reader::open_hash(cache, entry.integrity).await
} else { } else {
Err(Error::EntryNotFound( return Err(Error::EntryNotFound(
cache.as_ref().to_path_buf(), cache.as_ref().to_path_buf(),
key.as_ref().into(), key.as_ref().into(),
))? ))
} }
} }
@ -143,10 +143,10 @@ where
if let Some(entry) = index::find_async(cache.as_ref(), key.as_ref()).await? { if let Some(entry) = index::find_async(cache.as_ref(), key.as_ref()).await? {
read_hash(cache, &entry.integrity).await read_hash(cache, &entry.integrity).await
} else { } else {
Err(Error::EntryNotFound( return Err(Error::EntryNotFound(
cache.as_ref().to_path_buf(), cache.as_ref().to_path_buf(),
key.as_ref().into(), key.as_ref().into(),
))? ))
} }
} }
@ -195,10 +195,10 @@ where
if let Some(entry) = index::find_async(cache.as_ref(), key.as_ref()).await? { if let Some(entry) = index::find_async(cache.as_ref(), key.as_ref()).await? {
copy_hash(cache, &entry.integrity, to).await copy_hash(cache, &entry.integrity, to).await
} else { } else {
Err(Error::EntryNotFound( return Err(Error::EntryNotFound(
cache.as_ref().to_path_buf(), cache.as_ref().to_path_buf(),
key.as_ref().into(), key.as_ref().into(),
))? ))
} }
} }
@ -240,7 +240,7 @@ where
/// Returns true if the given hash exists in the cache. /// Returns true if the given hash exists in the cache.
pub async fn exists<P: AsRef<Path>>(cache: P, sri: &Integrity) -> bool { pub async fn exists<P: AsRef<Path>>(cache: P, sri: &Integrity) -> bool {
read::has_content_async(cache.as_ref(), &sri) read::has_content_async(cache.as_ref(), sri)
.await .await
.is_some() .is_some()
} }
@ -310,10 +310,10 @@ impl SyncReader {
if let Some(entry) = index::find(cache.as_ref(), key.as_ref())? { if let Some(entry) = index::find(cache.as_ref(), key.as_ref())? {
SyncReader::open_hash(cache, entry.integrity) SyncReader::open_hash(cache, entry.integrity)
} else { } else {
Err(Error::EntryNotFound( return Err(Error::EntryNotFound(
cache.as_ref().to_path_buf(), cache.as_ref().to_path_buf(),
key.as_ref().into(), key.as_ref().into(),
))? ))
} }
} }
@ -363,10 +363,10 @@ where
if let Some(entry) = index::find(cache.as_ref(), key.as_ref())? { if let Some(entry) = index::find(cache.as_ref(), key.as_ref())? {
read_hash_sync(cache, &entry.integrity) read_hash_sync(cache, &entry.integrity)
} else { } else {
Err(Error::EntryNotFound( return Err(Error::EntryNotFound(
cache.as_ref().to_path_buf(), cache.as_ref().to_path_buf(),
key.as_ref().into(), key.as_ref().into(),
))? ))
} }
} }
@ -387,7 +387,7 @@ pub fn read_hash_sync<P>(cache: P, sri: &Integrity) -> Result<Vec<u8>>
where where
P: AsRef<Path>, P: AsRef<Path>,
{ {
Ok(read::read(cache.as_ref(), sri)?) read::read(cache.as_ref(), sri)
} }
/// Copies a cache entry by key to a specified location. Returns the number of /// Copies a cache entry by key to a specified location. Returns the number of
@ -411,10 +411,10 @@ where
if let Some(entry) = index::find(cache.as_ref(), key.as_ref())? { if let Some(entry) = index::find(cache.as_ref(), key.as_ref())? {
copy_hash_sync(cache, &entry.integrity, to) copy_hash_sync(cache, &entry.integrity, to)
} else { } else {
Err(Error::EntryNotFound( return Err(Error::EntryNotFound(
cache.as_ref().to_path_buf(), cache.as_ref().to_path_buf(),
key.as_ref().into(), key.as_ref().into(),
))? ))
} }
} }
@ -449,21 +449,19 @@ where
P: AsRef<Path>, P: AsRef<Path>,
K: AsRef<str>, K: AsRef<str>,
{ {
Ok(index::find(cache.as_ref(), key.as_ref())?) index::find(cache.as_ref(), key.as_ref())
} }
/// Returns true if the given hash exists in the cache. /// Returns true if the given hash exists in the cache.
pub fn exists_sync<P: AsRef<Path>>(cache: P, sri: &Integrity) -> bool { pub fn exists_sync<P: AsRef<Path>>(cache: P, sri: &Integrity) -> bool {
read::has_content(cache.as_ref(), &sri).is_some() read::has_content(cache.as_ref(), sri).is_some()
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use async_attributes;
use async_std::fs as afs; use async_std::fs as afs;
use async_std::prelude::*; use async_std::prelude::*;
use std::fs; use std::fs;
use tempfile;
#[async_attributes::test] #[async_attributes::test]
async fn test_open() { async fn test_open() {

View File

@ -11,9 +11,8 @@ use digest::Digest;
use either::{Left, Right}; use either::{Left, Right};
use futures::io::{AsyncBufReadExt, AsyncWriteExt}; use futures::io::{AsyncBufReadExt, AsyncWriteExt};
use futures::stream::StreamExt; use futures::stream::StreamExt;
use hex;
use serde_derive::{Deserialize, Serialize}; use serde_derive::{Deserialize, Serialize};
use serde_json::{json, Value}; use serde_json::Value;
use sha1::Sha1; use sha1::Sha1;
use sha2::Sha256; use sha2::Sha256;
use ssri::Integrity; use ssri::Integrity;
@ -63,7 +62,7 @@ impl Hash for SerializableMetadata {
} }
pub fn insert(cache: &Path, key: &str, opts: WriteOpts) -> Result<Integrity> { pub fn insert(cache: &Path, key: &str, opts: WriteOpts) -> Result<Integrity> {
let bucket = bucket_path(&cache, &key); let bucket = bucket_path(cache, key);
fs::create_dir_all(bucket.parent().unwrap()).with_context(|| { fs::create_dir_all(bucket.parent().unwrap()).with_context(|| {
format!( format!(
"Failed to create index bucket directory: {:?}", "Failed to create index bucket directory: {:?}",
@ -75,7 +74,7 @@ pub fn insert(cache: &Path, key: &str, opts: WriteOpts) -> Result<Integrity> {
integrity: opts.sri.clone().map(|x| x.to_string()), integrity: opts.sri.clone().map(|x| x.to_string()),
time: opts.time.unwrap_or_else(now), time: opts.time.unwrap_or_else(now),
size: opts.size.unwrap_or(0), size: opts.size.unwrap_or(0),
metadata: opts.metadata.unwrap_or_else(|| json!(null)), metadata: opts.metadata.unwrap_or(serde_json::Value::Null),
}) })
.with_context(|| format!("Failed to serialize entry with key `{}`", key))?; .with_context(|| format!("Failed to serialize entry with key `{}`", key))?;
@ -97,7 +96,7 @@ pub fn insert(cache: &Path, key: &str, opts: WriteOpts) -> Result<Integrity> {
} }
pub async fn insert_async<'a>(cache: &'a Path, key: &'a str, opts: WriteOpts) -> Result<Integrity> { pub async fn insert_async<'a>(cache: &'a Path, key: &'a str, opts: WriteOpts) -> Result<Integrity> {
let bucket = bucket_path(&cache, &key); let bucket = bucket_path(cache, key);
afs::create_dir_all(bucket.parent().unwrap()) afs::create_dir_all(bucket.parent().unwrap())
.await .await
.with_context(|| { .with_context(|| {
@ -111,7 +110,7 @@ pub async fn insert_async<'a>(cache: &'a Path, key: &'a str, opts: WriteOpts) ->
integrity: opts.sri.clone().map(|x| x.to_string()), integrity: opts.sri.clone().map(|x| x.to_string()),
time: opts.time.unwrap_or_else(now), time: opts.time.unwrap_or_else(now),
size: opts.size.unwrap_or(0), size: opts.size.unwrap_or(0),
metadata: opts.metadata.unwrap_or_else(|| json!(null)), metadata: opts.metadata.unwrap_or(serde_json::Value::Null),
}) })
.with_context(|| format!("Failed to serialize entry with key `{}`", key))?; .with_context(|| format!("Failed to serialize entry with key `{}`", key))?;
@ -136,7 +135,7 @@ pub async fn insert_async<'a>(cache: &'a Path, key: &'a str, opts: WriteOpts) ->
} }
pub fn find(cache: &Path, key: &str) -> Result<Option<Metadata>> { pub fn find(cache: &Path, key: &str) -> Result<Option<Metadata>> {
let bucket = bucket_path(cache, &key); let bucket = bucket_path(cache, key);
Ok(bucket_entries(&bucket) Ok(bucket_entries(&bucket)
.with_context(|| format!("Failed to read index bucket entries from {:?}", bucket))? .with_context(|| format!("Failed to read index bucket entries from {:?}", bucket))?
.into_iter() .into_iter()
@ -164,7 +163,7 @@ pub fn find(cache: &Path, key: &str) -> Result<Option<Metadata>> {
} }
pub async fn find_async(cache: &Path, key: &str) -> Result<Option<Metadata>> { pub async fn find_async(cache: &Path, key: &str) -> Result<Option<Metadata>> {
let bucket = bucket_path(cache, &key); let bucket = bucket_path(cache, key);
Ok(bucket_entries_async(&bucket) Ok(bucket_entries_async(&bucket)
.await .await
.with_context(|| format!("Failed to read index bucket entries from {:?}", bucket))? .with_context(|| format!("Failed to read index bucket entries from {:?}", bucket))?
@ -258,7 +257,7 @@ pub fn ls(cache: &Path) -> impl Iterator<Item = Result<Metadata>> {
} }
fn bucket_path(cache: &Path, key: &str) -> PathBuf { fn bucket_path(cache: &Path, key: &str) -> PathBuf {
let hashed = hash_key(&key); let hashed = hash_key(key);
cache cache
.join(format!("index-v{}", INDEX_VERSION)) .join(format!("index-v{}", INDEX_VERSION))
.join(&hashed[0..2]) .join(&hashed[0..2])
@ -343,7 +342,7 @@ async fn bucket_entries_async(bucket: &Path) -> InternalResult<Vec<SerializableM
mod tests { mod tests {
use super::*; use super::*;
use async_std::task; use async_std::task;
use tempfile; use serde_json::json;
const MOCK_ENTRY: &str = "\n251d18a2b33264ea8655695fd23c88bd874cdea2c3dc9d8f9b7596717ad30fec\t{\"key\":\"hello\",\"integrity\":\"sha1-deadbeef\",\"time\":1234567,\"size\":0,\"metadata\":null}"; const MOCK_ENTRY: &str = "\n251d18a2b33264ea8655695fd23c88bd874cdea2c3dc9d8f9b7596717ad30fec\t{\"key\":\"hello\",\"integrity\":\"sha1-deadbeef\",\"time\":1234567,\"size\":0,\"metadata\":null}";

View File

@ -12,7 +12,6 @@ pub fn list_sync<P: AsRef<Path>>(cache: P) -> impl Iterator<Item = Result<index:
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use tempfile;
#[test] #[test]
fn test_list_sync() { fn test_list_sync() {

View File

@ -144,7 +144,7 @@ impl Writer {
let writer_sri = self.writer.close().await?; let writer_sri = self.writer.close().await?;
if let Some(sri) = &self.opts.sri { if let Some(sri) = &self.opts.sri {
if sri.matches(&writer_sri).is_none() { if sri.matches(&writer_sri).is_none() {
return Err(ssri::Error::IntegrityCheckError(sri.clone(), writer_sri))?; return Err(ssri::Error::IntegrityCheckError(sri.clone(), writer_sri).into());
} }
} else { } else {
self.opts.sri = Some(writer_sri.clone()); self.opts.sri = Some(writer_sri.clone());
@ -403,14 +403,14 @@ impl SyncWriter {
let writer_sri = self.writer.close()?; let writer_sri = self.writer.close()?;
if let Some(sri) = &self.opts.sri { if let Some(sri) = &self.opts.sri {
if sri.matches(&writer_sri).is_none() { if sri.matches(&writer_sri).is_none() {
return Err(ssri::Error::IntegrityCheckError(sri.clone(), writer_sri))?; return Err(ssri::Error::IntegrityCheckError(sri.clone(), writer_sri).into());
} }
} else { } else {
self.opts.sri = Some(writer_sri.clone()); self.opts.sri = Some(writer_sri.clone());
} }
if let Some(size) = self.opts.size { if let Some(size) = self.opts.size {
if size != self.written { if size != self.written {
return Err(Error::SizeError(size, self.written))?; return Err(Error::SizeError(size, self.written));
} }
} }
if let Some(key) = self.key { if let Some(key) = self.key {
@ -423,8 +423,6 @@ impl SyncWriter {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use async_attributes;
#[async_attributes::test] #[async_attributes::test]
async fn round_trip() { async fn round_trip() {
let tmp = tempfile::tempdir().unwrap(); let tmp = tempfile::tempdir().unwrap();

View File

@ -66,7 +66,7 @@ where
/// } /// }
/// ``` /// ```
pub async fn remove_hash<P: AsRef<Path>>(cache: P, sri: &Integrity) -> Result<()> { pub async fn remove_hash<P: AsRef<Path>>(cache: P, sri: &Integrity) -> Result<()> {
Ok(rm::rm_async(cache.as_ref(), &sri).await?) Ok(rm::rm_async(cache.as_ref(), sri).await?)
} }
/// Removes entire contents of the cache, including temporary files, the entry /// Removes entire contents of the cache, including temporary files, the entry
@ -92,10 +92,8 @@ pub async fn remove_hash<P: AsRef<Path>>(cache: P, sri: &Integrity) -> Result<()
/// } /// }
/// ``` /// ```
pub async fn clear<P: AsRef<Path>>(cache: P) -> Result<()> { pub async fn clear<P: AsRef<Path>>(cache: P) -> Result<()> {
for entry in cache.as_ref().read_dir().to_internal()? { for entry in (cache.as_ref().read_dir().to_internal()?).flatten() {
if let Ok(entry) = entry { afs::remove_dir_all(entry.path()).await.to_internal()?;
afs::remove_dir_all(entry.path()).await.to_internal()?;
}
} }
Ok(()) Ok(())
} }
@ -152,7 +150,7 @@ where
/// } /// }
/// ``` /// ```
pub fn remove_hash_sync<P: AsRef<Path>>(cache: P, sri: &Integrity) -> Result<()> { pub fn remove_hash_sync<P: AsRef<Path>>(cache: P, sri: &Integrity) -> Result<()> {
Ok(rm::rm(cache.as_ref(), &sri)?) rm::rm(cache.as_ref(), sri)
} }
/// Removes entire contents of the cache synchronously, including temporary /// Removes entire contents of the cache synchronously, including temporary
@ -176,10 +174,8 @@ pub fn remove_hash_sync<P: AsRef<Path>>(cache: P, sri: &Integrity) -> Result<()>
/// } /// }
/// ``` /// ```
pub fn clear_sync<P: AsRef<Path>>(cache: P) -> Result<()> { pub fn clear_sync<P: AsRef<Path>>(cache: P) -> Result<()> {
for entry in cache.as_ref().read_dir().to_internal()? { for entry in (cache.as_ref().read_dir().to_internal()?).flatten() {
if let Ok(entry) = entry { fs::remove_dir_all(entry.path()).to_internal()?;
fs::remove_dir_all(entry.path()).to_internal()?;
}
} }
Ok(()) Ok(())
} }
@ -201,7 +197,7 @@ mod tests {
assert_eq!(entry, None); assert_eq!(entry, None);
let data_exists = crate::exists(&dir, &sri).await; let data_exists = crate::exists(&dir, &sri).await;
assert_eq!(data_exists, true); assert!(data_exists);
}); });
} }
@ -215,10 +211,10 @@ mod tests {
crate::remove_hash(&dir, &sri).await.unwrap(); crate::remove_hash(&dir, &sri).await.unwrap();
let entry = crate::metadata(&dir, "key").await.unwrap(); let entry = crate::metadata(&dir, "key").await.unwrap();
assert_eq!(entry.is_some(), true); assert!(entry.is_some());
let data_exists = crate::exists(&dir, &sri).await; let data_exists = crate::exists(&dir, &sri).await;
assert_eq!(data_exists, false); assert!(data_exists);
}); });
} }
@ -232,10 +228,10 @@ mod tests {
crate::clear(&dir).await.unwrap(); crate::clear(&dir).await.unwrap();
let entry = crate::metadata(&dir, "key").await.unwrap(); let entry = crate::metadata(&dir, "key").await.unwrap();
assert_eq!(entry.is_some(), false); assert!(entry.is_some());
let data_exists = crate::exists(&dir, &sri).await; let data_exists = crate::exists(&dir, &sri).await;
assert_eq!(data_exists, false); assert!(data_exists);
}); });
} }
@ -251,7 +247,7 @@ mod tests {
assert_eq!(new_entry, None); assert_eq!(new_entry, None);
let data_exists = crate::exists_sync(&dir, &sri); let data_exists = crate::exists_sync(&dir, &sri);
assert_eq!(data_exists, true); assert!(data_exists);
} }
#[test] #[test]
@ -263,10 +259,10 @@ mod tests {
crate::remove_hash_sync(&dir, &sri).unwrap(); crate::remove_hash_sync(&dir, &sri).unwrap();
let entry = crate::metadata_sync(&dir, "key").unwrap(); let entry = crate::metadata_sync(&dir, "key").unwrap();
assert_eq!(entry.is_some(), true); assert!(entry.is_some());
let data_exists = crate::exists_sync(&dir, &sri); let data_exists = crate::exists_sync(&dir, &sri);
assert_eq!(data_exists, false); assert!(data_exists);
} }
#[test] #[test]
@ -281,6 +277,6 @@ mod tests {
assert_eq!(entry, None); assert_eq!(entry, None);
let data_exists = crate::exists_sync(&dir, &sri); let data_exists = crate::exists_sync(&dir, &sri);
assert_eq!(data_exists, false); assert!(data_exists);
} }
} }