Mercurial > public > mercurial-scm > hg-stable
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 {} |