mercurial/cmdutil.py
branchstable
changeset 21825 3666331164bb
parent 21127 69402eb72115
child 21832 4b93e19cd6e6
child 21876 584bbfd1b50d
--- a/mercurial/cmdutil.py	Sun Jun 29 13:52:35 2014 +0200
+++ b/mercurial/cmdutil.py	Sat Jun 07 15:14:36 2014 -0400
@@ -1913,11 +1913,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)