def read_item(port): def read_m(port, has_meta): if has_meta: m = Metadata.read(port) return m return read_vuint(port) kind, has_meta = vint.recv(port, 'sV') if kind == b'Item': oid, meta = read_bvec(port), read_m(port, has_meta) return Item(oid=oid, meta=meta) if kind == b'Chunky': oid, meta = read_bvec(port), read_m(port, has_meta) return Chunky(oid=oid, meta=meta) if kind == b'RevList': oid, meta = read_bvec(port), read_m(port, has_meta) return RevList(oid=oid, meta=meta) if kind == b'Root': return Root(meta=read_m(port, has_meta)) if kind == b'Tags': return Tags(meta=read_m(port, has_meta)) if kind == b'Commit': oid, coid = vint.recv(port, 'ss') meta = read_m(port, has_meta) return Commit(oid=oid, coid=coid, meta=meta) if kind == b'FakeLink': target, meta = read_bvec(port), read_m(port, has_meta) return FakeLink(target=target, meta=meta) assert False