rust/hg-core/src/dirstate_tree/on_disk.rs
branchstable
changeset 49337 6cd249556e20
parent 49156 09984dc70352
child 49365 79b2c98ab7b4
equal deleted inserted replaced
49320:3d3d7fc6035a 49337:6cd249556e20
     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 {