Better error management, Utf8Paths & other stuff.
This commit is contained in:
@@ -14,10 +14,10 @@
|
||||
// along with cdb. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
use std::path::{PathBuf};
|
||||
use camino::{Utf8PathBuf};
|
||||
|
||||
use cas_core::{
|
||||
Error, ObjectId, Result, Writer,
|
||||
err, Error, ObjectId, Result, Writer,
|
||||
};
|
||||
|
||||
use crate::utils::{obj_path, tmp_dir};
|
||||
@@ -25,13 +25,13 @@ use crate::utils::{obj_path, tmp_dir};
|
||||
|
||||
pub struct WFile {
|
||||
file: tempfile::NamedTempFile,
|
||||
db_path: PathBuf,
|
||||
db_path: Utf8PathBuf,
|
||||
}
|
||||
|
||||
impl WFile {
|
||||
pub fn new(db_path: PathBuf) -> Result<Self> {
|
||||
pub fn new(db_path: Utf8PathBuf) -> Result<Self> {
|
||||
let file = tempfile::NamedTempFile::new_in(tmp_dir(&db_path)).or_else(|err|
|
||||
Err(Error::error(format!("failed to create_file: {}", err))))?;
|
||||
err!("failed to create_file: {}", err))?;
|
||||
Ok(WFile {
|
||||
file,
|
||||
db_path,
|
||||
@@ -51,7 +51,7 @@ impl std::io::Write for WFile {
|
||||
|
||||
impl Writer for WFile {
|
||||
fn finalize(self: Box<Self>) -> Result<ObjectId> {
|
||||
Err(Error::error("reader pipline has no digest step"))
|
||||
err!("reader pipline has no digest step")
|
||||
}
|
||||
|
||||
fn _finalize(self: Box<Self>, oid: ObjectId) -> Result<ObjectId> {
|
||||
@@ -59,9 +59,9 @@ impl Writer for WFile {
|
||||
std::fs::create_dir_all(
|
||||
path.parent().expect("cannot access to object parent directory")
|
||||
).or_else(|err|
|
||||
Err(Error::error(format!("failed to create object dir: {}", err))))?;
|
||||
err!("failed to create object dir: {}", err))?;
|
||||
self.file.persist(path).or_else(|err|
|
||||
Err(Error::error(format!("failed to persist file: {}", err))))?;
|
||||
err!("failed to persist file: {}", err))?;
|
||||
Ok(oid)
|
||||
}
|
||||
}
|
||||
@@ -86,18 +86,18 @@ mod tests {
|
||||
let dir = tempfile::TempDir::new()
|
||||
.expect("failed to create tmp dir");
|
||||
|
||||
std::fs::create_dir(tmp_dir(dir.path())).expect("failed to create db/obj dir");
|
||||
std::fs::create_dir(obj_dir(dir.path())).expect("failed to create db/tmp dir");
|
||||
std::fs::create_dir(tmp_dir(dir.path().try_into().unwrap())).expect("failed to create db/obj dir");
|
||||
std::fs::create_dir(obj_dir(dir.path().try_into().unwrap())).expect("failed to create db/tmp dir");
|
||||
|
||||
{
|
||||
let mut writer = Box::new(WFile::new(dir.path().to_path_buf()).expect("failed to create WFile"));
|
||||
let mut writer = Box::new(WFile::new(dir.path().to_path_buf().try_into().unwrap()).expect("failed to create WFile"));
|
||||
writer.write(data).expect("failed to write to WFile");
|
||||
let oid2 = writer._finalize(oid.clone()).expect("failed to finalize WFile");
|
||||
|
||||
assert_eq!(oid2, oid);
|
||||
}
|
||||
|
||||
let mut file = std::fs::File::open(obj_path(dir.path(), &oid)).expect("failed to open object file");
|
||||
let mut file = std::fs::File::open(obj_path(dir.path().try_into().unwrap(), &oid)).expect("failed to open object file");
|
||||
let mut buf = Vec::new();
|
||||
file.read_to_end(&mut buf).expect("failed to read object file");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user