Patchwork D1697: copies: extract method for getting non-wdir forward copies

login
register
mail settings
Submitter phabricator
Date Dec. 15, 2017, 1:02 a.m.
Message ID <differential-rev-PHID-DREV-ehrvj2rpj4ggkbkqk4ad-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/26293/
State Superseded
Headers show

Comments

phabricator - Dec. 15, 2017, 1:02 a.m.
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  I may add an alternative way of getting copy metadata (from changelog,
  not filelog) but the chaining with the dirstate copy metadata will be
  the same, so it will probably help to have this extracted. Even if
  that doesn't happen, the next patch will show that we can simplify
  this a bit after this refactoring, so it seems worth it regardless.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/copies.py

CHANGE DETAILS




To: martinvonz, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/mercurial/copies.py b/mercurial/copies.py
--- a/mercurial/copies.py
+++ b/mercurial/copies.py
@@ -156,18 +156,8 @@ 
     mb = b.manifest()
     return mb.filesnotin(ma, match=match)
 
-def _forwardcopies(a, b, match=None):
-    """find {dst@b: src@a} copy mapping where a is an ancestor of b"""
-
-    # check for working copy
-    w = None
-    if b.rev() is None:
-        w = b
-        b = w.p1()
-        if a == b:
-            # short-circuit to avoid issues with merge states
-            return _dirstatecopies(w, match)
-
+def _committedforwardcopies(a, b, match):
+    """Like _forwardcopies(), but b.rev() cannot be None (working copy)"""
     # files might have to be traced back to the fctx parent of the last
     # one-side-only changeset, but not further back than that
     limit = _findlimit(a._repo, a.rev(), b.rev())
@@ -199,6 +189,21 @@ 
         ofctx = _tracefile(fctx, am, limit)
         if ofctx:
             cm[f] = ofctx.path()
+    return cm
+
+def _forwardcopies(a, b, match=None):
+    """find {dst@b: src@a} copy mapping where a is an ancestor of b"""
+
+    # check for working copy
+    w = None
+    if b.rev() is None:
+        w = b
+        b = w.p1()
+        if a == b:
+            # short-circuit to avoid issues with merge states
+            return _dirstatecopies(w, match)
+
+    cm = _committedforwardcopies(a, b, match)
 
     # combine copies from dirstate if necessary
     if w is not None: