Mercurial > public > mercurial-scm > hg-stable
diff rust/hg-core/src/revlog/revlog.rs @ 48211:9d0e5629cfbf
rhg: do not fail when the repo is empty
Differential Revision: https://phab.mercurial-scm.org/D11651
author | Arseniy Alekseyev <aalekseyev@janestreet.com> |
---|---|
date | Wed, 13 Oct 2021 10:17:27 -0700 |
parents | 61ce70fd420e |
children | 5e77bdc29d56 |
line wrap: on
line diff
--- a/rust/hg-core/src/revlog/revlog.rs Tue Oct 12 19:43:51 2021 +0100 +++ b/rust/hg-core/src/revlog/revlog.rs Wed Oct 13 10:17:27 2021 -0700 @@ -70,15 +70,21 @@ data_path: Option<&Path>, ) -> Result<Self, HgError> { let index_path = index_path.as_ref(); - let index_mmap = repo.store_vfs().mmap_open(&index_path)?; + let index = { + match repo.store_vfs().mmap_open_opt(&index_path)? { + None => Index::new(Box::new(vec![])), + Some(index_mmap) => { + let version = get_version(&index_mmap)?; + if version != 1 { + // A proper new version should have had a repo/store requirement. + return Err(HgError::corrupted("corrupted revlog")); + } - let version = get_version(&index_mmap)?; - if version != 1 { - // A proper new version should have had a repo/store requirement. - return Err(HgError::corrupted("corrupted revlog")); - } - - let index = Index::new(Box::new(index_mmap))?; + let index = Index::new(Box::new(index_mmap))?; + Ok(index) + } + } + }?; let default_data_path = index_path.with_extension("d"); @@ -418,6 +424,6 @@ .with_version(1) .build(); - assert_eq!(get_version(&bytes), 1) + assert_eq!(get_version(&bytes).map_err(|_err|()), Ok(1)) } }