# HG changeset patch # User Augie Fackler # Date 2020-09-07 21:14:59 # Node ID 601e3658216d720c7a31be1ba0508339746c08d5 # Parent 0c6b2cc9a7bbb0a49390e26c356701da324cce06 git: make dirstate actually support listclean parameter As far as I can tell listignored and listunknown should already work. I'm vexed that there doesn't seem to be a way to get clean files out of the pygit2 status method, but this at least makes things work better. Differential Revision: https://phab.mercurial-scm.org/D8998 diff --git a/hgext/git/dirstate.py b/hgext/git/dirstate.py --- a/hgext/git/dirstate.py +++ b/hgext/git/dirstate.py @@ -129,6 +129,7 @@ class gitdirstate(object): return False def status(self, match, subrepos, ignored, clean, unknown): + listignored, listclean, listunknown = ignored, clean, unknown # TODO handling of clean files - can we get that from git.status()? modified, added, removed, deleted, unknown, ignored, clean = ( [], @@ -168,6 +169,22 @@ class gitdirstate(object): b'unhandled case: status for %r is %r' % (path, status) ) + if listclean: + observed = set( + modified + added + removed + deleted + unknown + ignored + ) + index = self.git.index + index.read() + for entry in index: + path = pycompat.fsencode(entry.path) + if not match(path): + continue + if path in observed: + continue # already in some other set + if path[-1] == b'/': + continue # directory + clean.append(path) + # TODO are we really always sure of status here? return ( False,