sapling/eden/scm/edenscm/mercurial/eden_dirstate_fs.py

47 lines
1.6 KiB
Python
Raw Normal View History

# Copyright (c) Facebook, Inc. and its affiliates.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2.
"""Eden implementation for the dirstate filesystem class."""
from typing import Callable, Iterable, Optional, Tuple
from . import filesystem, perftrace, pycompat, util
from .EdenThriftClient import ScmFileStatus
from .pycompat import decodeutf8
class eden_filesystem(filesystem.physicalfilesystem):
def pendingchanges(self, match=None, listignored=False):
# type: (Optional[Callable[[str], bool]], bool) -> Iterable[Tuple[str, bool]]
if match is None:
match = util.always
with perftrace.trace("Get EdenFS Status"):
perftrace.traceflag("status")
edenstatus = self.dirstate.eden_client.getStatus(
self.dirstate.p1(), list_ignored=listignored
)
MODIFIED = ScmFileStatus.MODIFIED
REMOVED = ScmFileStatus.REMOVED
ADDED = ScmFileStatus.ADDED
IGNORED = ScmFileStatus.IGNORED
for path, code in pycompat.iteritems(edenstatus):
path = decodeutf8(path)
if not match(path):
continue
if code == MODIFIED or code == ADDED:
yield (path, True)
elif code == REMOVED:
yield (path, False)
elif code == IGNORED and listignored:
yield (path, True)
else:
raise RuntimeError(
"unexpected status code '%s' for '%s'" % (code, path)
)