comparison rust/hg-core/src/repo.rs @ 48809:1d5fd9def5ac

rhg: simplify the handling of share-safe config mismatch Differential Revision: https://phab.mercurial-scm.org/D12213
author Arseniy Alekseyev <aalekseyev@janestreet.com>
date Mon, 21 Feb 2022 19:51:23 +0000
parents 7f633432ca92
children 12adf8c695ed
comparison
equal deleted inserted replaced
48808:db023e33b652 48809:1d5fd9def5ac
4 use crate::dirstate_tree::dirstate_map::DirstateMap; 4 use crate::dirstate_tree::dirstate_map::DirstateMap;
5 use crate::dirstate_tree::on_disk::Docket as DirstateDocket; 5 use crate::dirstate_tree::on_disk::Docket as DirstateDocket;
6 use crate::dirstate_tree::owning::OwningDirstateMap; 6 use crate::dirstate_tree::owning::OwningDirstateMap;
7 use crate::errors::HgResultExt; 7 use crate::errors::HgResultExt;
8 use crate::errors::{HgError, IoResultExt}; 8 use crate::errors::{HgError, IoResultExt};
9 use crate::exit_codes;
10 use crate::lock::{try_with_lock_no_wait, LockError}; 9 use crate::lock::{try_with_lock_no_wait, LockError};
11 use crate::manifest::{Manifest, Manifestlog}; 10 use crate::manifest::{Manifest, Manifestlog};
12 use crate::revlog::filelog::Filelog; 11 use crate::revlog::filelog::Filelog;
13 use crate::revlog::revlog::RevlogError; 12 use crate::revlog::revlog::RevlogError;
14 use crate::utils::files::get_path_from_bytes; 13 use crate::utils::files::get_path_from_bytes;
158 157
159 let source_is_share_safe = 158 let source_is_share_safe =
160 requirements::load(Vfs { base: &shared_path })? 159 requirements::load(Vfs { base: &shared_path })?
161 .contains(requirements::SHARESAFE_REQUIREMENT); 160 .contains(requirements::SHARESAFE_REQUIREMENT);
162 161
163 if share_safe && !source_is_share_safe { 162 if share_safe != source_is_share_safe {
164 return Err(match config 163 return Err(HgError::unsupported("share-safe mismatch").into());
165 .get(b"share", b"safe-mismatch.source-not-safe")
166 {
167 Some(b"abort") | None => HgError::abort(
168 "abort: share source does not support share-safe requirement\n\
169 (see `hg help config.format.use-share-safe` for more information)",
170 exit_codes::ABORT,
171 ),
172 _ => HgError::unsupported("share-safe downgrade"),
173 }
174 .into());
175 } else if source_is_share_safe && !share_safe {
176 return Err(
177 match config.get(b"share", b"safe-mismatch.source-safe") {
178 Some(b"abort") | None => HgError::abort(
179 "abort: version mismatch: source uses share-safe \
180 functionality while the current share does not\n\
181 (see `hg help config.format.use-share-safe` for more information)",
182 exit_codes::ABORT,
183 ),
184 _ => HgError::unsupported("share-safe upgrade"),
185 }
186 .into(),
187 );
188 } 164 }
189 165
190 if share_safe { 166 if share_safe {
191 repo_config_files.insert(0, shared_path.join("hgrc")) 167 repo_config_files.insert(0, shared_path.join("hgrc"))
192 } 168 }