mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
3dea327fba
Reviewed By: farnz Differential Revision: D19615837 fbshipit-source-id: 97e514fbc5ab3b077fd9b6c56cd8b5d7b6bc7856
44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
# 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 . 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):
|
|
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)
|
|
)
|