changeset 46575:389b0328b789

copies-rust: get the parents' copies earlier This remove some conditional nesting and prepare for future work were we will unify the handling of copies from p1 and p2. Differential Revision: https://phab.mercurial-scm.org/D9646
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 16 Dec 2020 09:30:25 +0100
parents 34827c95092c
children f8bdc8329d77
files rust/hg-core/src/copy_tracing.rs
diffstat 1 files changed, 46 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/rust/hg-core/src/copy_tracing.rs	Tue Dec 15 18:22:57 2020 +0100
+++ b/rust/hg-core/src/copy_tracing.rs	Wed Dec 16 09:30:25 2020 +0100
@@ -397,59 +397,60 @@
         // the individual copies information the curent revision.  Creating a
         // new TimeStampedPath for each `rev` → `children` vertex.
         let mut copies: Option<InternalPathCopies> = None;
-        if p1 != NULL_REVISION {
-            // Retrieve data computed in a previous iteration
-            let parent_copies = get_and_clean_parent_copies(
+        // Retrieve data computed in a previous iteration
+        let p1_copies = match p1 {
+            NULL_REVISION => None,
+            _ => get_and_clean_parent_copies(
                 &mut all_copies,
                 &mut children_count,
                 p1,
-            );
-            if let Some(parent_copies) = parent_copies {
-                // combine it with data for that revision
-                let vertex_copies = 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 p2 != NULL_REVISION {
-            // Retrieve data computed in a previous iteration
-            let parent_copies = get_and_clean_parent_copies(
+            ), // will be None if the vertex is not to be traversed
+        };
+        let p2_copies = match p2 {
+            NULL_REVISION => None,
+            _ => get_and_clean_parent_copies(
                 &mut all_copies,
                 &mut children_count,
                 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(
+                &mut path_map,
+                &parent_copies,
+                &changes,
+                Parent::FirstParent,
+                rev,
             );
-            if let Some(parent_copies) = parent_copies {
-                // combine it with data for that revision
-                let vertex_copies = add_from_changes(
-                    &mut path_map,
-                    &parent_copies,
-                    &changes,
-                    Parent::SecondParent,
-                    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(
+                &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,
-                    )),
-                };
-            }
+            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) => {