Patchwork [1,of,2] cmdutil: add copy-filtering support to duplicatecopies

login
register
mail settings
Submitter Augie Fackler
Date June 7, 2014, 7:25 p.m.
Message ID <c55e9be3df7003c99d19.1402169112@augie-macbookair.laroche.local>
Download mbox | patch
Permalink /patch/4948/
State Superseded
Commit 3666331164bb014b9b7b2a56d4171ef4cbb5e4d6
Headers show

Comments

Augie Fackler - June 7, 2014, 7:25 p.m.
# HG changeset patch
# User Augie Fackler <raf@durin42.com>
# Date 1402168476 14400
#      Sat Jun 07 15:14:36 2014 -0400
# Node ID c55e9be3df7003c99d19f42fcad9a4ebe6eb2ab1
# Parent  7afe70a5d2ad5b22c21ba9be849451407c1f337f
cmdutil: add copy-filtering support to duplicatecopies

In order to fix issue 4192 we need to be able to skip some copies
while doing duplicatecopies.

Patch

diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -1944,11 +1944,22 @@ 
 
     return err
 
-def duplicatecopies(repo, rev, fromrev):
-    '''reproduce copies from fromrev to rev in the dirstate'''
+def duplicatecopies(repo, rev, fromrev, skiprev=None):
+    '''reproduce copies from fromrev to rev in the dirstate
+
+    If skiprev is specified, it's a revision that should be used to
+    filter copy records. Any copies that occur between fromrev and
+    skiprev will not be duplicated, even if they appear in the set of
+    copies between fromrev and rev.
+    '''
+    exclude = {}
+    if skiprev is not None:
+        exclude = copies.pathcopies(repo[fromrev], repo[skiprev])
     for dst, src in copies.pathcopies(repo[fromrev], repo[rev]).iteritems():
         # copies.pathcopies returns backward renames, so dst might not
         # actually be in the dirstate
+        if dst in exclude:
+            continue
         if repo.dirstate[dst] in "nma":
             repo.dirstate.copy(src, dst)