comparison rust/hg-core/src/repo.rs @ 48005:d1d9510f73f0

rust: Update the memmap2 crate to version 0.4.0 This version: * Optionally implements the `StableDeref` trait, removing the need for a wrapper type doing that * Adds support for mapping empty files, which can routinely happen for dirstate-v2 data files. This was a cause of some failing tests when running with `run-tests.py --rhg --extra-config-opt rhg.status=1` Differential Revision: https://phab.mercurial-scm.org/D11446
author Simon Sapin <simon.sapin@octobus.net>
date Fri, 17 Sep 2021 08:57:12 +0200
parents 87e3f878e65f
children 3d0a9c6e614d
comparison
equal deleted inserted replaced
48004:2018753014be 48005:d1d9510f73f0
288 let mut map = if let Some(data_mmap) = self 288 let mut map = if let Some(data_mmap) = self
289 .hg_vfs() 289 .hg_vfs()
290 .mmap_open(docket.data_filename()) 290 .mmap_open(docket.data_filename())
291 .io_not_found_as_none()? 291 .io_not_found_as_none()?
292 { 292 {
293 OwningDirstateMap::new_empty(MmapWrapper(data_mmap)) 293 OwningDirstateMap::new_empty(data_mmap)
294 } else { 294 } else {
295 OwningDirstateMap::new_empty(Vec::new()) 295 OwningDirstateMap::new_empty(Vec::new())
296 }; 296 };
297 let (on_disk, placeholder) = map.get_mut_pair(); 297 let (on_disk, placeholder) = map.get_mut_pair();
298 *placeholder = DirstateMap::new_v2(on_disk, data_size, metadata)?; 298 *placeholder = DirstateMap::new_v2(on_disk, data_size, metadata)?;
405 *borrowed = Some((self.init)(repo)?); 405 *borrowed = Some((self.init)(repo)?);
406 } 406 }
407 Ok(RefMut::map(borrowed, |option| option.as_mut().unwrap())) 407 Ok(RefMut::map(borrowed, |option| option.as_mut().unwrap()))
408 } 408 }
409 } 409 }
410
411 // TODO: remove this when https://github.com/RazrFalcon/memmap2-rs/pull/22 is on crates.io
412 struct MmapWrapper(memmap2::Mmap);
413
414 impl std::ops::Deref for MmapWrapper {
415 type Target = [u8];
416
417 fn deref(&self) -> &[u8] {
418 self.0.deref()
419 }
420 }
421
422 unsafe impl stable_deref_trait::StableDeref for MmapWrapper {}