Patchwork D7860: graftcopies: remove `skip` and `repo` arguments

login
register
mail settings
Submitter phabricator
Date Jan. 14, 2020, 5:08 p.m.
Message ID <differential-rev-PHID-DREV-e4l2xhu5sjt7moctrpel-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/44326/
State Superseded
Headers show

Comments

phabricator - Jan. 14, 2020, 5:08 p.m.
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  The `skip` argument was added in 2ba6c9b4e0eb <https://phab.mercurial-scm.org/rHG2ba6c9b4e0ebfba72e7b3ca6468b6571a9bf8594> (rebase: fix bug that
  caused transitive copy records to disappear (issue4192), 2014-06-07)
  in order to fix https://bz.mercurial-scm.org/show_bug.cgi?id=4192. I
  ran tests at that commit without the `skiprev` argument and the only
  difference I noticed was that `test-rebase-collapse.t` failed
  differently, in the call that is now on line 501. Without the
  `skiprev` argument, that call would end up creating another commit
  because it tried to record an invalid copy. With the previous patch in
  this series, such invalid copies are no longer recorded, so it seems
  we don't need the `skip` argument anymore.
  
  I also removed the `repo` argument since that also becomes unused with
  the removal of the `skip` argument.

REPOSITORY
  rHG Mercurial

BRANCH
  default

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

AFFECTED FILES
  hgext/fix.py
  hgext/rebase.py
  mercurial/copies.py
  mercurial/merge.py
  relnotes/next

CHANGE DETAILS




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

Patch

diff --git a/relnotes/next b/relnotes/next
--- a/relnotes/next
+++ b/relnotes/next
@@ -31,4 +31,5 @@ 
 
  * `copies.duplicatecopies()` was renamed to
    `copies.graftcopies()`. Its arguments changed from revision numbers
-   to context objects.
+   to context objects. It also lost its `repo` and `skip` arguments
+   (they should no longer be needed).
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -2635,7 +2635,7 @@ 
         repo.setparents(pctx.node(), pother)
         repo.dirstate.write(repo.currenttransaction())
         # fix up dirstate for copies and renames
-        copies.graftcopies(repo, wctx, ctx, base)
+        copies.graftcopies(wctx, ctx, base)
     return stats
 
 
diff --git a/mercurial/copies.py b/mercurial/copies.py
--- a/mercurial/copies.py
+++ b/mercurial/copies.py
@@ -856,30 +856,11 @@ 
         return False
 
 
-def graftcopies(repo, wctx, ctx, base, skip=None):
-    """reproduce copies between base and ctx in the wctx
-
-    If skip is specified, it's a revision that should be used to
-    filter copy records. Any copies that occur between base and
-    skip will not be duplicated, even if they appear in the set of
-    copies between base and ctx.
-    """
-    exclude = {}
-    ctraceconfig = repo.ui.config(b'experimental', b'copytrace')
-    bctrace = stringutil.parsebool(ctraceconfig)
-    if skip is not None and (
-        ctraceconfig == b'heuristics' or bctrace or bctrace is None
-    ):
-        # copytrace='off' skips this line, but not the entire function because
-        # the line below is O(size of the repo) during a rebase, while the rest
-        # of the function is much faster (and is required for carrying copy
-        # metadata across the rebase anyway).
-        exclude = pathcopies(base, skip)
+def graftcopies(wctx, ctx, base):
+    """reproduce copies between base and ctx in the wctx"""
     new_copies = pathcopies(base, ctx)
     _filter(wctx.p1(), wctx, new_copies)
     for dst, src in pycompat.iteritems(new_copies):
-        if dst in exclude:
-            continue
         wctx[dst].markcopied(src)
 
 
diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -1497,16 +1497,13 @@ 
         labels=[b'dest', b'source'],
         wc=wctx,
     )
-    destctx = repo[dest]
     if collapse:
-        copies.graftcopies(repo, wctx, ctx, destctx)
+        copies.graftcopies(wctx, ctx, repo[dest])
     else:
         # If we're not using --collapse, we need to
         # duplicate copies between the revision we're
-        # rebasing and its first parent, but *not*
-        # duplicate any copies that have already been
-        # performed in the destination.
-        copies.graftcopies(repo, wctx, ctx, ctx.p1(), skip=destctx)
+        # rebasing and its first parent.
+        copies.graftcopies(wctx, ctx, ctx.p1())
     return stats
 
 
diff --git a/hgext/fix.py b/hgext/fix.py
--- a/hgext/fix.py
+++ b/hgext/fix.py
@@ -734,8 +734,7 @@ 
     extra[b'fix_source'] = ctx.hex()
 
     wctx = context.overlayworkingctx(repo)
-    newp1ctx = repo[newp1node]
-    wctx.setbase(newp1ctx)
+    wctx.setbase(repo[newp1node])
     merge.update(
         repo,
         ctx.rev(),
@@ -745,7 +744,7 @@ 
         mergeancestor=False,
         wc=wctx,
     )
-    copies.graftcopies(repo, wctx, ctx, ctx.p1(), skip=newp1ctx)
+    copies.graftcopies(wctx, ctx, ctx.p1())
 
     for path in filedata.keys():
         fctx = ctx[path]