# HG changeset patch
# User Jordi Gutiérrez Hermoso <jord...@octave.org>
# Date 1554489104 14400
#      Fri Apr 05 14:31:44 2019 -0400
# Node ID 4baa10f1f44a8e427f49fa4f4d8d29552c2a1a65
# Parent  9fcb915a73b83547921aaa13584c88cb99c6aee7
revset: implement copies and renames for checkstatus

Determining when a file is a copy is tricky and isn't handled by the
normal status functions, so thankfully we can offload that work to
the copies module, just like the status command itself does.

diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -11,6 +11,7 @@ import re
 
 from .i18n import _
 from . import (
+    copies as copiesmod,
     dagop,
     destutil,
     diffutil,
@@ -603,6 +604,8 @@ def checkstatus(repo, subset, pat, field
     0: modified
     1: added
     2: removed
+    3: copied (not renamed, i.e. source not removed)
+    4: renamed (not copied, i..e source removed)
     """
     hasset = matchmod.patkind(pat) == 'set'
 
@@ -624,7 +627,18 @@ def checkstatus(repo, subset, pat, field
                     break
             else:
                 return False
-        files = repo.status(c.p1().node(), c.node())[field]
+        p1 = c.p1()
+        status = repo.status(p1.node(), c.node())
+        if field == 3:
+            copymap = copiesmod.pathcopies(p1, c, m)
+            removed = status[2]
+            files = [dest for (dest, src) in copymap.items() if src not in 
removed]
+        elif field == 4:
+            copymap = copiesmod.pathcopies(p1, c, m)
+            removed = status[2]
+            files = [dest for (dest, src) in copymap.items() if src in removed]
+        else:
+            files = status[field]
         if fname is not None:
             if fname in files:
                 return True
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to