diff --git a/gdn/src/data.rs b/gdn/src/data.rs index 29fcd14..a405bee 100644 --- a/gdn/src/data.rs +++ b/gdn/src/data.rs @@ -15,10 +15,12 @@ pub use self::{ fn migrate(dir: &LockedDataDir) -> anyhow::Result<()> { loop { - match dir.read_version()? { - 0 => v0::migrate(dir)?, + let version = dir.read_version().context("failed to migrate data dir")?; + match version { + 0 => v0::migrate(dir), _ => break Ok(()), } + .with_context(|| format!("failed to migrate data dir from version {version}"))?; } } diff --git a/gdn/src/data/datadir.rs b/gdn/src/data/datadir.rs index 6b23866..c4ee5bf 100644 --- a/gdn/src/data/datadir.rs +++ b/gdn/src/data/datadir.rs @@ -104,6 +104,7 @@ impl UnlockedDataDir { pub(super) fn read_version(&self) -> anyhow::Result { let path = self.version_file(); match self.read_string_optional(&path)? { + None if self.path.exists() => Err(anyhow!("found data dir without version number")), None => Ok(0), Some(string) => Ok(string.trim().parse().with_context(|| { format!("failed to parse {} as version number", path.display())