diff --git a/src/repository/backup.rs b/src/repository/backup.rs index 56f0513..227be97 100644 --- a/src/repository/backup.rs +++ b/src/repository/backup.rs @@ -232,7 +232,7 @@ impl Repository { if self.dirty { return Err(RepositoryError::Dirty) } - self.dirty = true; + try!(self.set_dirty()); let reference_inode = reference.and_then(|b| self.get_inode(&b.root).ok()); let mut backup = Backup::default(); backup.config = self.config.clone(); diff --git a/src/repository/info.rs b/src/repository/info.rs index ec503ec..439550f 100644 --- a/src/repository/info.rs +++ b/src/repository/info.rs @@ -64,7 +64,7 @@ impl Repository { if self.dirty { return Err(RepositoryError::Dirty) } - self.dirty = true; + try!(self.set_dirty()); let mut usage = HashMap::new(); for (id, bundle) in self.bundle_map.bundles() { let bundle = try!(self.bundles.get_bundle_info(&bundle).ok_or_else(|| IntegrityError::MissingBundle(bundle))); diff --git a/src/repository/mod.rs b/src/repository/mod.rs index 0f8c5e1..9fee7af 100644 --- a/src/repository/mod.rs +++ b/src/repository/mod.rs @@ -217,6 +217,15 @@ impl Repository { id } + pub fn set_dirty(&mut self) -> Result<(), RepositoryError> { + self.dirty = true; + let dirtyfile = self.layout.dirtyfile_path(); + if !dirtyfile.exists() { + try!(File::create(&dirtyfile)); + } + Ok(()) + } + pub fn flush(&mut self) -> Result<(), RepositoryError> { let dirtyfile = self.layout.dirtyfile_path(); if self.dirty && !dirtyfile.exists() { diff --git a/src/repository/tarfile.rs b/src/repository/tarfile.rs index de3480f..2944bd1 100644 --- a/src/repository/tarfile.rs +++ b/src/repository/tarfile.rs @@ -159,7 +159,7 @@ impl Repository { if self.dirty { return Err(RepositoryError::Dirty) } - self.dirty = true; + try!(self.set_dirty()); let mut backup = Backup::default(); backup.config = self.config.clone(); backup.host = get_hostname().unwrap_or_else(|_| "".to_string()); diff --git a/src/repository/vacuum.rs b/src/repository/vacuum.rs index d428a65..73338f6 100644 --- a/src/repository/vacuum.rs +++ b/src/repository/vacuum.rs @@ -21,7 +21,7 @@ impl Repository { if self.dirty { return Err(RepositoryError::Dirty) } - self.dirty = true; + try!(self.set_dirty()); info!("Analyzing chunk usage"); let usage = try!(self.analyze_usage()); let mut data_total = 0;