Fix index loading problems
This commit is contained in:
parent
14490bbe78
commit
f397c99659
4 changed files with 22 additions and 10 deletions
|
@ -18,7 +18,7 @@ pub enum BakareError {
|
||||||
#[fail(display = "corrupted repository - cannot find file")]
|
#[fail(display = "corrupted repository - cannot find file")]
|
||||||
CorruptedRepoNoFile,
|
CorruptedRepoNoFile,
|
||||||
#[fail(display = "index loading error")]
|
#[fail(display = "index loading error")]
|
||||||
IndexLoadingError,
|
IndexLoadingError(Option<serde_cbor::Error>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<io::Error> for BakareError {
|
impl From<io::Error> for BakareError {
|
||||||
|
@ -40,7 +40,7 @@ impl From<StripPrefixError> for BakareError {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<serde_cbor::Error> for BakareError {
|
impl From<serde_cbor::Error> for BakareError {
|
||||||
fn from(_: serde_cbor::Error) -> Self {
|
fn from(e: serde_cbor::Error) -> Self {
|
||||||
BakareError::IndexLoadingError
|
BakareError::IndexLoadingError(Some(e))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
15
src/index.rs
15
src/index.rs
|
@ -2,7 +2,9 @@ use std::path::Path;
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::error::BakareError;
|
||||||
use crate::repository_item::RepositoryItem;
|
use crate::repository_item::RepositoryItem;
|
||||||
|
use std::fs::File;
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialOrd, PartialEq, Ord, Eq, Serialize, Deserialize)]
|
#[derive(Clone, Debug, PartialOrd, PartialEq, Ord, Eq, Serialize, Deserialize)]
|
||||||
pub struct IndexItem {
|
pub struct IndexItem {
|
||||||
|
@ -27,6 +29,19 @@ impl Index {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn load(path: &Path) -> Result<Self, BakareError> {
|
||||||
|
let index_file_path = path.join("index");
|
||||||
|
let index_file = File::open(index_file_path)?;
|
||||||
|
let index: Index = serde_cbor::from_reader(index_file)?;
|
||||||
|
Ok(index)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn save(&self) -> Result<(), BakareError> {
|
||||||
|
let index_file = File::create(self.index_file_path())?;
|
||||||
|
serde_cbor::to_writer(index_file, &self)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn index_file_path(&self) -> &Path {
|
pub fn index_file_path(&self) -> &Path {
|
||||||
Path::new(&self.index_path)
|
Path::new(&self.index_path)
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,8 +34,7 @@ impl<'a> Iterator for RepositoryIterator<'a> {
|
||||||
impl<'a> Repository<'a> {
|
impl<'a> Repository<'a> {
|
||||||
pub fn init(path: &Path) -> Result<(), BakareError> {
|
pub fn init(path: &Path) -> Result<(), BakareError> {
|
||||||
let index = Index::new(path);
|
let index = Index::new(path);
|
||||||
let index_file = File::create(index.index_file_path())?;
|
index.save()?;
|
||||||
serde_cbor::to_writer(index_file, &index)?;
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,10 +43,7 @@ impl<'a> Repository<'a> {
|
||||||
return Err(BakareError::RepositoryPathNotAbsolute);
|
return Err(BakareError::RepositoryPathNotAbsolute);
|
||||||
}
|
}
|
||||||
|
|
||||||
let index_file_path = path.join("index");
|
let index = Index::load(path)?;
|
||||||
let index_file = File::open(index_file_path)?;
|
|
||||||
let index: Index = serde_cbor::from_reader(index_file)?;
|
|
||||||
|
|
||||||
Ok(Repository { path, index })
|
Ok(Repository { path, index })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,6 +78,7 @@ impl<'a> Repository<'a> {
|
||||||
destination_path.strip_prefix(self.path)?,
|
destination_path.strip_prefix(self.path)?,
|
||||||
version,
|
version,
|
||||||
));
|
));
|
||||||
|
self.index.save()?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ impl<'a> Engine<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn restore(&self, item: &RepositoryItem) -> Result<(), BakareError> {
|
fn restore(&self, item: &RepositoryItem) -> Result<(), BakareError> {
|
||||||
println!("restoring {:#?}", item);
|
println!("restoring {}", item);
|
||||||
item.save(self.target_path)?;
|
item.save(self.target_path)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue