diff --git a/src/repo.rs b/src/repo.rs index 6f8d06d..680e334 100644 --- a/src/repo.rs +++ b/src/repo.rs @@ -243,15 +243,15 @@ impl Repo { return Ok(()); } - tracing::warn!("Migrating Database from 0.3 layout to 0.4 layout"); + if let Some(old) = self::old::Old::open(path)? { + tracing::warn!("Migrating Database from 0.3 layout to 0.4 layout"); - let old = self::old::Old::open(path)?; - - for hash in old.hashes() { - match self { - Self::Sled(repo) => { - if let Err(e) = migrate_hash(repo, &old, hash).await { - tracing::error!("Failed to migrate hash: {}", e); + for hash in old.hashes() { + match self { + Self::Sled(repo) => { + if let Err(e) = migrate_hash(repo, &old, hash).await { + tracing::error!("Failed to migrate hash: {}", e); + } } } } diff --git a/src/repo/old.rs b/src/repo/old.rs index c555a17..3f892b2 100644 --- a/src/repo/old.rs +++ b/src/repo/old.rs @@ -44,18 +44,20 @@ pub(super) struct Old { } impl Old { - pub(super) fn open(path: PathBuf) -> color_eyre::Result { - let db = migrate::LatestDb::exists(path).migrate()?; - - Ok(Self { - alias_tree: db.open_tree("alias")?, - filename_tree: db.open_tree("filename")?, - main_tree: db.open_tree("main")?, - details_tree: db.open_tree("details")?, - settings_tree: db.open_tree("settings")?, - identifier_tree: db.open_tree("path")?, - _db: db, - }) + pub(super) fn open(path: PathBuf) -> color_eyre::Result> { + if let Some(db) = migrate::LatestDb::exists(path).migrate()? { + Ok(Some(Self { + alias_tree: db.open_tree("alias")?, + filename_tree: db.open_tree("filename")?, + main_tree: db.open_tree("main")?, + details_tree: db.open_tree("details")?, + settings_tree: db.open_tree("settings")?, + identifier_tree: db.open_tree("path")?, + _db: db, + })) + } else { + Ok(None) + } } pub(super) fn setting(&self, key: &[u8]) -> color_eyre::Result> { diff --git a/src/repo/old/migrate.rs b/src/repo/old/migrate.rs index 5548340..ab37156 100644 --- a/src/repo/old/migrate.rs +++ b/src/repo/old/migrate.rs @@ -60,7 +60,7 @@ impl LatestDb { LatestDb { root_dir, version } } - pub(crate) fn migrate(self) -> Result { + pub(crate) fn migrate(self) -> Result, Error> { let LatestDb { root_dir, version } = self; loop { @@ -89,9 +89,10 @@ impl DbVersion { DbVersion::Fresh } - fn migrate(self, root: PathBuf) -> Result { + fn migrate(self, root: PathBuf) -> Result, Error> { match self { - DbVersion::Sled034 | DbVersion::Fresh => s034::open(root), + DbVersion::Sled034 => Some(s034::open(root)).transpose(), + DbVersion::Fresh => Ok(None), } } }