28 |
28 |
29 impl DirsMultiset { |
29 impl DirsMultiset { |
30 /// Initializes the multiset from a dirstate. |
30 /// Initializes the multiset from a dirstate. |
31 /// |
31 /// |
32 /// If `skip_state` is provided, skips dirstate entries with equal state. |
32 /// If `skip_state` is provided, skips dirstate entries with equal state. |
33 pub fn from_dirstate<'a>( |
33 pub fn from_dirstate<'a, I, P>( |
34 dirstate: impl IntoIterator<Item = (&'a HgPathBuf, &'a DirstateEntry)>, |
34 dirstate: I, |
35 skip_state: Option<EntryState>, |
35 skip_state: Option<EntryState>, |
36 ) -> Result<Self, DirstateMapError> { |
36 ) -> Result<Self, DirstateMapError> |
|
37 where |
|
38 I: IntoIterator<Item = (P, &'a DirstateEntry)>, |
|
39 P: AsRef<HgPath>, |
|
40 { |
37 let mut multiset = DirsMultiset { |
41 let mut multiset = DirsMultiset { |
38 inner: FastHashMap::default(), |
42 inner: FastHashMap::default(), |
39 }; |
43 }; |
40 for (filename, DirstateEntry { state, .. }) in dirstate { |
44 for (filename, entry) in dirstate { |
|
45 let filename = filename.as_ref(); |
41 // This `if` is optimized out of the loop |
46 // This `if` is optimized out of the loop |
42 if let Some(skip) = skip_state { |
47 if let Some(skip) = skip_state { |
43 if skip != *state { |
48 if skip != entry.state { |
44 multiset.add_path(filename)?; |
49 multiset.add_path(filename)?; |
45 } |
50 } |
46 } else { |
51 } else { |
47 multiset.add_path(filename)?; |
52 multiset.add_path(filename)?; |
48 } |
53 } |