def resolve(conn, args): _init_session() (flags, ) = args.split() flags = int(flags) want_meta = bool(flags & 1) follow = bool(flags & 2) have_parent = bool(flags & 4) parent = vfs.read_resolution(conn) if have_parent else None path = vint.read_bvec(conn) if not len(path): raise Exception('Empty resolve path') try: res = list( vfs.resolve(repo, path, parent=parent, want_meta=want_meta, follow=follow)) except vfs.IOError as ex: res = ex if isinstance(res, vfs.IOError): conn.write(b'\x00') # error vfs.write_ioerror(conn, res) else: conn.write(b'\x01') # success vfs.write_resolution(conn, res) conn.ok()
def resolve(self, path, parent=None, want_meta=True, follow=False): self._require_command(b'resolve') self.check_busy() self._busy = b'resolve' conn = self.conn conn.write(b'resolve %d\n' % ((1 if want_meta else 0) | (2 if follow else 0) | (4 if parent else 0))) if parent: vfs.write_resolution(conn, parent) write_bvec(conn, path) success = ord(conn.read(1)) assert success in (0, 1) if success: result = vfs.read_resolution(conn) else: result = vfs.read_ioerror(conn) # FIXME: confusing not_ok = self.check_ok() if not_ok: raise not_ok self._not_busy() if isinstance(result, vfs.IOError): raise result return result
def resolve(self, path, parent=None, want_meta=True, follow=False): self._require_command('resolve') self.check_busy() self._busy = 'resolve' conn = self.conn conn.write('resolve %d\n' % ((1 if want_meta else 0) | (2 if follow else 0) | (4 if parent else 0))) if parent: vfs.write_resolution(conn, parent) write_bvec(conn, path) success = ord(conn.read(1)) assert success in (0, 1) if success: result = vfs.read_resolution(conn) else: result = vfs.read_ioerror(conn) # FIXME: confusing not_ok = self.check_ok() if not_ok: raise not_ok self._not_busy() if isinstance(result, vfs.IOError): raise result return result