# 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