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::lock::{try_with_lock_no_wait, LockError}; |
8 use crate::lock::{try_with_lock_no_wait, LockError}; |
314 self.dirstate_parents.set(docket.parents()); |
313 self.dirstate_parents.set(docket.parents()); |
315 self.dirstate_data_file_uuid |
314 self.dirstate_data_file_uuid |
316 .set(Some(docket.uuid.to_owned())); |
315 .set(Some(docket.uuid.to_owned())); |
317 let data_size = docket.data_size(); |
316 let data_size = docket.data_size(); |
318 let metadata = docket.tree_metadata(); |
317 let metadata = docket.tree_metadata(); |
319 let mut map = if let Some(data_mmap) = self |
318 if let Some(data_mmap) = self |
320 .hg_vfs() |
319 .hg_vfs() |
321 .mmap_open(docket.data_filename()) |
320 .mmap_open(docket.data_filename()) |
322 .io_not_found_as_none()? |
321 .io_not_found_as_none()? |
323 { |
322 { |
324 OwningDirstateMap::new_empty(data_mmap) |
323 OwningDirstateMap::new_v2(data_mmap, data_size, metadata) |
325 } else { |
324 } else { |
326 OwningDirstateMap::new_empty(Vec::new()) |
325 OwningDirstateMap::new_v2(Vec::new(), data_size, metadata) |
327 }; |
326 } |
328 let (on_disk, placeholder) = map.get_pair_mut(); |
327 } else { |
329 *placeholder = DirstateMap::new_v2(on_disk, data_size, metadata)?; |
328 let (map, parents) = |
330 Ok(map) |
329 OwningDirstateMap::new_v1(dirstate_file_contents)?; |
331 } else { |
330 self.dirstate_parents.set(parents); |
332 let mut map = OwningDirstateMap::new_empty(dirstate_file_contents); |
|
333 let (on_disk, placeholder) = map.get_pair_mut(); |
|
334 let (inner, parents) = DirstateMap::new_v1(on_disk)?; |
|
335 self.dirstate_parents |
|
336 .set(parents.unwrap_or(DirstateParents::NULL)); |
|
337 *placeholder = inner; |
|
338 Ok(map) |
331 Ok(map) |
339 } |
332 } |
340 } |
333 } |
341 |
334 |
342 pub fn dirstate_map( |
335 pub fn dirstate_map( |