[Updated] [+- ] D9498: copies-rust: make the comparison aware of the revision being current merged

marmoute (Pierre-Yves David) phabricator at mercurial-scm.org
Mon Dec 14 11:17:31 UTC 2020


marmoute updated this revision to Diff 24221.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D9498?vs=23962&id=24221

BRANCH
  default

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D9498/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D9498

AFFECTED FILES
  rust/hg-core/src/copy_tracing.rs

CHANGE DETAILS

diff --git a/rust/hg-core/src/copy_tracing.rs b/rust/hg-core/src/copy_tracing.rs
--- a/rust/hg-core/src/copy_tracing.rs
+++ b/rust/hg-core/src/copy_tracing.rs
@@ -431,6 +431,7 @@
                     // them.
                     Some(copies) => Some(merge_copies_dict(
                         &path_map,
+                        rev,
                         vertex_copies,
                         copies,
                         &changes,
@@ -558,6 +559,7 @@
 /// cases. See inline documentation for details.
 fn merge_copies_dict<A: Fn(Revision, Revision) -> bool>(
     path_map: &TwoWayPathMap,
+    current_merge: Revision,
     mut minor: TimeStampedPathCopies,
     mut major: TimeStampedPathCopies,
     changes: &ChangedFiles,
@@ -571,7 +573,13 @@
          src_minor: &TimeStampedPathCopy,
          src_major: &TimeStampedPathCopy| {
             compare_value(
-                path_map, changes, oracle, dest, src_minor, src_major,
+                path_map,
+                current_merge,
+                changes,
+                oracle,
+                dest,
+                src_minor,
+                src_major,
             )
         };
     if minor.is_empty() {
@@ -703,13 +711,33 @@
 #[allow(clippy::if_same_then_else)]
 fn compare_value<A: Fn(Revision, Revision) -> bool>(
     path_map: &TwoWayPathMap,
+    current_merge: Revision,
     changes: &ChangedFiles,
     oracle: &mut AncestorOracle<A>,
     dest: &PathToken,
     src_minor: &TimeStampedPathCopy,
     src_major: &TimeStampedPathCopy,
 ) -> MergePick {
-    if src_major.path == src_minor.path {
+    if src_major.rev == current_merge {
+        if src_minor.rev == current_merge {
+            if src_major.path.is_none() {
+                // We cannot get different copy information for both p1 and p2
+                // from the same revision. Unless this was a
+                // deletion
+                MergePick::Any
+            } else {
+                unreachable!();
+            }
+        } else {
+            // The last value comes the current merge, this value -will- win
+            // eventually.
+            MergePick::Major
+        }
+    } else if src_minor.rev == current_merge {
+        // The last value comes the current merge, this value -will- win
+        // eventually.
+        MergePick::Minor
+    } else if src_major.path == src_minor.path {
         // we have the same value, but from other source;
         if src_major.rev == src_minor.rev {
             // If the two entry are identical, they are both valid



To: marmoute, #hg-reviewers, Alphare
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20201214/4b520247/attachment-0002.html>


More information about the Mercurial-patches mailing list