1 use crate::changelog::Changelog; |
1 use crate::changelog::Changelog; |
2 use crate::config::{Config, ConfigError, ConfigParseError}; |
2 use crate::config::{Config, ConfigError, ConfigParseError}; |
3 use crate::dirstate::DirstateParents; |
3 use crate::dirstate::DirstateParents; |
4 use crate::dirstate_tree::dirstate_map::DirstateMap; |
|
5 use crate::dirstate_tree::on_disk::Docket as DirstateDocket; |
4 use crate::dirstate_tree::on_disk::Docket as DirstateDocket; |
6 use crate::dirstate_tree::owning::OwningDirstateMap; |
5 use crate::dirstate_tree::owning::OwningDirstateMap; |
7 use crate::errors::HgResultExt; |
6 use crate::errors::HgResultExt; |
8 use crate::errors::{HgError, IoResultExt}; |
7 use crate::errors::{HgError, IoResultExt}; |
9 use crate::exit_codes; |
8 use crate::exit_codes; |
338 self.dirstate_parents.set(docket.parents()); |
337 self.dirstate_parents.set(docket.parents()); |
339 self.dirstate_data_file_uuid |
338 self.dirstate_data_file_uuid |
340 .set(Some(docket.uuid.to_owned())); |
339 .set(Some(docket.uuid.to_owned())); |
341 let data_size = docket.data_size(); |
340 let data_size = docket.data_size(); |
342 let metadata = docket.tree_metadata(); |
341 let metadata = docket.tree_metadata(); |
343 let mut map = if let Some(data_mmap) = self |
342 if let Some(data_mmap) = self |
344 .hg_vfs() |
343 .hg_vfs() |
345 .mmap_open(docket.data_filename()) |
344 .mmap_open(docket.data_filename()) |
346 .io_not_found_as_none()? |
345 .io_not_found_as_none()? |
347 { |
346 { |
348 OwningDirstateMap::new_empty(data_mmap) |
347 OwningDirstateMap::new_v2(data_mmap, data_size, metadata) |
349 } else { |
348 } else { |
350 OwningDirstateMap::new_empty(Vec::new()) |
349 OwningDirstateMap::new_v2(Vec::new(), data_size, metadata) |
351 }; |
350 } |
352 let (on_disk, placeholder) = map.get_pair_mut(); |
351 } else { |
353 *placeholder = DirstateMap::new_v2(on_disk, data_size, metadata)?; |
352 let (map, parents) = |
354 Ok(map) |
353 OwningDirstateMap::new_v1(dirstate_file_contents)?; |
355 } else { |
354 self.dirstate_parents.set(parents); |
356 let mut map = OwningDirstateMap::new_empty(dirstate_file_contents); |
|
357 let (on_disk, placeholder) = map.get_pair_mut(); |
|
358 let (inner, parents) = DirstateMap::new_v1(on_disk)?; |
|
359 self.dirstate_parents |
|
360 .set(parents.unwrap_or(DirstateParents::NULL)); |
|
361 *placeholder = inner; |
|
362 Ok(map) |
355 Ok(map) |
363 } |
356 } |
364 } |
357 } |
365 |
358 |
366 pub fn dirstate_map( |
359 pub fn dirstate_map( |