2019-11-01 22:33:28 +03:00
|
|
|
# Copyright (c) Facebook, Inc. and its affiliates.
|
2019-10-09 02:43:10 +03:00
|
|
|
#
|
|
|
|
# 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."""
|
|
|
|
|
2020-01-29 03:25:29 +03:00
|
|
|
from . import filesystem, perftrace, pycompat, util
|
2019-10-09 02:43:10 +03:00
|
|
|
from .EdenThriftClient import ScmFileStatus
|
2020-01-29 18:38:41 +03:00
|
|
|
from .pycompat import decodeutf8
|
2019-10-09 02:43:10 +03:00
|
|
|
|
|
|
|
|
|
|
|
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
|
2019-12-05 02:45:01 +03:00
|
|
|
)
|
2019-10-09 02:43:10 +03:00
|
|
|
|
|
|
|
MODIFIED = ScmFileStatus.MODIFIED
|
|
|
|
REMOVED = ScmFileStatus.REMOVED
|
|
|
|
ADDED = ScmFileStatus.ADDED
|
|
|
|
IGNORED = ScmFileStatus.IGNORED
|
|
|
|
|
2020-01-29 03:25:29 +03:00
|
|
|
for path, code in pycompat.iteritems(edenstatus):
|
2020-01-29 18:38:41 +03:00
|
|
|
path = decodeutf8(path)
|
2019-10-09 02:43:10 +03:00
|
|
|
if not match(path):
|
|
|
|
continue
|
|
|
|
|
|
|
|
if code == MODIFIED or code == ADDED:
|
2020-01-15 04:45:49 +03:00
|
|
|
yield (path, True)
|
2019-10-09 02:43:10 +03:00
|
|
|
elif code == REMOVED:
|
2020-01-15 04:45:49 +03:00
|
|
|
yield (path, False)
|
2019-10-09 02:43:10 +03:00
|
|
|
elif code == IGNORED and listignored:
|
2020-01-15 04:45:49 +03:00
|
|
|
yield (path, True)
|
2019-10-09 02:43:10 +03:00
|
|
|
else:
|
|
|
|
raise RuntimeError(
|
|
|
|
"unexpected status code '%s' for '%s'" % (code, path)
|
|
|
|
)
|