def read(self): # override # ignore HG_PENDING because identity is used only for writing self.identity = util.filestat.frompath( self._opener.join(self._filename)) try: fp = self._opendirstatefile() try: parents, dirstate_tuples, copymap = eden_dirstate_serializer.read( fp, self._filename) finally: fp.close() except IOError as e: if e.errno != errno.ENOENT: raise else: # If the dirstate file does not exist, then we silently ignore # the error because that's what Mercurial's dirstate does. return if not self._dirtyparents: self.setparents(*parents) self._map = { n: parsers.dirstatetuple(v[0], v[1], v[2], DUMMY_MTIME) for n, v in dirstate_tuples.items() } self.copymap = copymap
def _insert_tuple(self, filename, state, mode, size, mtime): # override if size != MERGE_STATE_BOTH_PARENTS and size != MERGE_STATE_OTHER_PARENT: merge_state = MERGE_STATE_NOT_APPLICABLE else: merge_state = size self._map[filename] = parsers.dirstatetuple(state, mode, merge_state, DUMMY_MTIME)
def pack_dirstate(fakenow, orig, dmap, copymap, pl, now): # execute what original parsers.pack_dirstate should do actually # for consistency actualnow = int(now) for f, e in pycompat.iteritems(dmap): if e[0] == "n" and e[3] == actualnow: e = parsers.dirstatetuple(e[0], e[1], e[2], -1) dmap[f] = e return orig(dmap, copymap, pl, fakenow)
def __getitem__(self, filename): # type(str) -> parsers.dirstatetuple entry = self._map.get(filename) if entry is not None: return entry # edenfs only tracks one parent commitctx = self._repo["."] node, flag = commitctx._fileinfo(filename) mode = modefromflag[flag] return parsers.dirstatetuple("n", mode, MERGE_STATE_NOT_APPLICABLE, DUMMY_MTIME)