equal
deleted
inserted
replaced
1 //! The "version 2" disk representation of the dirstate |
1 //! The "version 2" disk representation of the dirstate |
2 //! |
2 //! |
3 //! See `mercurial/helptext/internals/dirstate-v2.txt` |
3 //! See `mercurial/helptext/internals/dirstate-v2.txt` |
4 |
4 |
5 use crate::dirstate::TruncatedTimestamp; |
5 use crate::dirstate::TruncatedTimestamp; |
|
6 use crate::dirstate_tree::dirstate_map::DirstateVersion; |
6 use crate::dirstate_tree::dirstate_map::{self, DirstateMap, NodeRef}; |
7 use crate::dirstate_tree::dirstate_map::{self, DirstateMap, NodeRef}; |
7 use crate::dirstate_tree::path_with_basename::WithBasename; |
8 use crate::dirstate_tree::path_with_basename::WithBasename; |
8 use crate::errors::HgError; |
9 use crate::errors::HgError; |
9 use crate::utils::hg_path::HgPath; |
10 use crate::utils::hg_path::HgPath; |
10 use crate::DirstateEntry; |
11 use crate::DirstateEntry; |
274 pub(super) fn read<'on_disk>( |
275 pub(super) fn read<'on_disk>( |
275 on_disk: &'on_disk [u8], |
276 on_disk: &'on_disk [u8], |
276 metadata: &[u8], |
277 metadata: &[u8], |
277 ) -> Result<DirstateMap<'on_disk>, DirstateV2ParseError> { |
278 ) -> Result<DirstateMap<'on_disk>, DirstateV2ParseError> { |
278 if on_disk.is_empty() { |
279 if on_disk.is_empty() { |
279 return Ok(DirstateMap::empty(on_disk)); |
280 let mut map = DirstateMap::empty(on_disk); |
|
281 map.dirstate_version = DirstateVersion::V2; |
|
282 return Ok(map); |
280 } |
283 } |
281 let (meta, _) = TreeMetadata::from_bytes(metadata) |
284 let (meta, _) = TreeMetadata::from_bytes(metadata) |
282 .map_err(|_| DirstateV2ParseError)?; |
285 .map_err(|_| DirstateV2ParseError)?; |
283 let dirstate_map = DirstateMap { |
286 let dirstate_map = DirstateMap { |
284 on_disk, |
287 on_disk, |
289 nodes_with_entry_count: meta.nodes_with_entry_count.get(), |
292 nodes_with_entry_count: meta.nodes_with_entry_count.get(), |
290 nodes_with_copy_source_count: meta.nodes_with_copy_source_count.get(), |
293 nodes_with_copy_source_count: meta.nodes_with_copy_source_count.get(), |
291 ignore_patterns_hash: meta.ignore_patterns_hash, |
294 ignore_patterns_hash: meta.ignore_patterns_hash, |
292 unreachable_bytes: meta.unreachable_bytes.get(), |
295 unreachable_bytes: meta.unreachable_bytes.get(), |
293 old_data_size: on_disk.len(), |
296 old_data_size: on_disk.len(), |
|
297 dirstate_version: DirstateVersion::V2, |
294 }; |
298 }; |
295 Ok(dirstate_map) |
299 Ok(dirstate_map) |
296 } |
300 } |
297 |
301 |
298 impl Node { |
302 impl Node { |