rust/hg-core/src/copy_tracing.rs
changeset 46585 60b2b7ecf9cb
parent 46584 aa19d60ac974
child 46586 435d9fc72646
equal deleted inserted replaced
46584:aa19d60ac974 46585:60b2b7ecf9cb
     4 use crate::NULL_REVISION;
     4 use crate::NULL_REVISION;
     5 
     5 
     6 use im_rc::ordmap::DiffItem;
     6 use im_rc::ordmap::DiffItem;
     7 use im_rc::ordmap::Entry;
     7 use im_rc::ordmap::Entry;
     8 use im_rc::ordmap::OrdMap;
     8 use im_rc::ordmap::OrdMap;
       
     9 use im_rc::OrdSet;
     9 
    10 
    10 use std::cmp::Ordering;
    11 use std::cmp::Ordering;
    11 use std::collections::HashMap;
    12 use std::collections::HashMap;
    12 use std::collections::HashSet;
       
    13 use std::convert::TryInto;
    13 use std::convert::TryInto;
    14 
    14 
    15 pub type PathCopies = HashMap<HgPathBuf, HgPathBuf>;
    15 pub type PathCopies = HashMap<HgPathBuf, HgPathBuf>;
    16 
    16 
    17 type PathToken = usize;
    17 type PathToken = usize;
    23     /// the copy source, (Set to None in case of deletion of the associated
    23     /// the copy source, (Set to None in case of deletion of the associated
    24     /// key)
    24     /// key)
    25     path: Option<PathToken>,
    25     path: Option<PathToken>,
    26     /// a set of previous `CopySource.rev` value directly or indirectly
    26     /// a set of previous `CopySource.rev` value directly or indirectly
    27     /// overwritten by this one.
    27     /// overwritten by this one.
    28     overwritten: HashSet<Revision>,
    28     overwritten: OrdSet<Revision>,
    29 }
    29 }
    30 
    30 
    31 impl CopySource {
    31 impl CopySource {
    32     /// create a new CopySource
    32     /// create a new CopySource
    33     ///
    33     ///
    34     /// Use this when no previous copy source existed.
    34     /// Use this when no previous copy source existed.
    35     fn new(rev: Revision, path: Option<PathToken>) -> Self {
    35     fn new(rev: Revision, path: Option<PathToken>) -> Self {
    36         Self {
    36         Self {
    37             rev,
    37             rev,
    38             path,
    38             path,
    39             overwritten: HashSet::new(),
    39             overwritten: OrdSet::new(),
    40         }
    40         }
    41     }
    41     }
    42 
    42 
    43     /// create a new CopySource from merging two others
    43     /// create a new CopySource from merging two others
    44     ///
    44     ///
    45     /// Use this when merging two InternalPathCopies requires active merging of
    45     /// Use this when merging two InternalPathCopies requires active merging of
    46     /// some entries.
    46     /// some entries.
    47     fn new_from_merge(rev: Revision, winner: &Self, loser: &Self) -> Self {
    47     fn new_from_merge(rev: Revision, winner: &Self, loser: &Self) -> Self {
    48         let mut overwritten = HashSet::new();
    48         let mut overwritten = OrdSet::new();
    49         overwritten.extend(winner.overwritten.iter().copied());
    49         overwritten.extend(winner.overwritten.iter().copied());
    50         overwritten.extend(loser.overwritten.iter().copied());
    50         overwritten.extend(loser.overwritten.iter().copied());
    51         overwritten.insert(winner.rev);
    51         overwritten.insert(winner.rev);
    52         overwritten.insert(loser.rev);
    52         overwritten.insert(loser.rev);
    53         Self {
    53         Self {