# HG changeset patch # User Simon Sapin # Date 2021-05-22 15:35:54 # Node ID 1760de72a99201897fe0b73d9af89432fa463fc3 # Parent 62225f9da938bbe5a2df2b30aef646d1989e950d rhg: A missing .hg/dirstate file is not an error Instead treat it as like an empty file Differential Revision: https://phab.mercurial-scm.org/D10766 diff --git a/rust/rhg/src/commands/status.rs b/rust/rhg/src/commands/status.rs --- a/rust/rhg/src/commands/status.rs +++ b/rust/rhg/src/commands/status.rs @@ -9,6 +9,7 @@ use crate::error::CommandError; use crate::ui::Ui; use clap::{Arg, SubCommand}; use hg; +use hg::errors::HgResultExt; use hg::errors::IoResultExt; use hg::matchers::AlwaysMatcher; use hg::operations::cat; @@ -164,8 +165,13 @@ pub fn run(invocation: &crate::CliInvoca let repo = invocation.repo?; let mut dmap = DirstateMap::new(); - let dirstate_data = repo.hg_vfs().mmap_open("dirstate")?; - let parents = dmap.read(&dirstate_data)?; + let dirstate_data = + repo.hg_vfs().mmap_open("dirstate").io_not_found_as_none()?; + let dirstate_data = match &dirstate_data { + Some(mmap) => &**mmap, + None => b"", + }; + let parents = dmap.read(dirstate_data)?; let options = StatusOptions { // TODO should be provided by the dirstate parsing and // hence be stored on dmap. Using a value that assumes we aren't