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);
         }
     }