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 @@ 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,20 @@ 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,