Mercurial > hg
changeset 46576:f8bdc8329d77
copies-rust: use matching to select the final copies information
This is a bit more idiomatic and this prepare a future refactoring where
InternalCopies from both parent would be updated at the same time.
Differential Revision: https://phab.mercurial-scm.org/D9647
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 16 Dec 2020 09:42:04 +0100 |
parents | 389b0328b789 |
children | d2ad44b8ef6a |
files | rust/hg-core/src/copy_tracing.rs |
diffstat | 1 files changed, 21 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/src/copy_tracing.rs Wed Dec 16 09:30:25 2020 +0100 +++ b/rust/hg-core/src/copy_tracing.rs Wed Dec 16 09:42:04 2020 +0100 @@ -414,49 +414,37 @@ p2, ), // will be None if the vertex is not to be traversed }; - if let Some(parent_copies) = p1_copies { - // combine it with data for that revision - let vertex_copies = add_from_changes( + // combine it with data for that revision + let p1_copies = match p1_copies { + None => None, + Some(parent_copies) => Some(add_from_changes( &mut path_map, &parent_copies, &changes, Parent::FirstParent, rev, - ); - // keep that data around for potential later combination - copies = Some(vertex_copies); - } - if let Some(parent_copies) = p2_copies { - // combine it with data for that revision - let vertex_copies = add_from_changes( + )), + }; + let p2_copies = match p2_copies { + None => None, + Some(parent_copies) => Some(add_from_changes( &mut path_map, &parent_copies, &changes, Parent::SecondParent, rev, - ); - - copies = match copies { - None => Some(vertex_copies), - // Merge has two parents needs to combines their copy - // information. - // - // If we got data from both parents, We need to combine - // them. - Some(copies) => Some(merge_copies_dict( - &path_map, - rev, - vertex_copies, - copies, - &changes, - )), - }; - } - match copies { - Some(copies) => { - all_copies.insert(rev, copies); - } - _ => {} + )), + }; + let copies = match (p1_copies, p2_copies) { + (None, None) => None, + (c, None) => c, + (None, c) => c, + (Some(p1_copies), Some(p2_copies)) => Some(merge_copies_dict( + &path_map, rev, p2_copies, p1_copies, &changes, + )), + }; + if let Some(c) = copies { + all_copies.insert(rev, c); } }