in antlir/btrfs_diff/parse_send_stream.py [0:0]
def read_attribute(infile):
attr_header = AttributeHeader.from_file(infile)
attr_data = infile.read(attr_header.length)
if len(attr_data) != attr_header.length:
raise RuntimeError(f"{attr_header} got {len(attr_data)} bytes")
if attr_header.kind == AttributeKind.UUID:
return attr_header.kind, conv_uuid(attr_data)
elif attr_header.kind == AttributeKind.CTRANSID:
return attr_header.kind, conv_uint64(attr_data)
elif attr_header.kind == AttributeKind.INO:
return attr_header.kind, conv_uint64(attr_data)
elif attr_header.kind == AttributeKind.SIZE:
return attr_header.kind, conv_uint64(attr_data)
elif attr_header.kind == AttributeKind.MODE:
return attr_header.kind, conv_uint64(attr_data)
elif attr_header.kind == AttributeKind.UID:
return attr_header.kind, conv_uint64(attr_data)
elif attr_header.kind == AttributeKind.GID:
return attr_header.kind, conv_uint64(attr_data)
elif attr_header.kind == AttributeKind.RDEV:
return attr_header.kind, conv_uint64(attr_data)
elif attr_header.kind == AttributeKind.CTIME:
return attr_header.kind, conv_time(attr_data)
elif attr_header.kind == AttributeKind.MTIME:
return attr_header.kind, conv_time(attr_data)
elif attr_header.kind == AttributeKind.ATIME:
return attr_header.kind, conv_time(attr_data)
elif attr_header.kind == AttributeKind.XATTR_NAME:
return attr_header.kind, attr_data
elif attr_header.kind == AttributeKind.XATTR_DATA:
return attr_header.kind, attr_data
elif attr_header.kind == AttributeKind.PATH:
return attr_header.kind, os.path.normpath(attr_data)
elif attr_header.kind == AttributeKind.PATH_TO:
return attr_header.kind, os.path.normpath(attr_data)
elif attr_header.kind == AttributeKind.PATH_LINK:
# NB This is NOT normalized since we don't want to normalize symlinks
return attr_header.kind, attr_data
elif attr_header.kind == AttributeKind.FILE_OFFSET:
return attr_header.kind, conv_uint64(attr_data)
elif attr_header.kind == AttributeKind.DATA:
return attr_header.kind, attr_data
elif attr_header.kind == AttributeKind.CLONE_UUID:
return attr_header.kind, conv_uuid(attr_data)
elif attr_header.kind == AttributeKind.CLONE_CTRANSID:
return attr_header.kind, conv_uint64(attr_data)
elif attr_header.kind == AttributeKind.CLONE_PATH:
return attr_header.kind, os.path.normpath(attr_data)
elif attr_header.kind == AttributeKind.CLONE_OFFSET:
return attr_header.kind, conv_uint64(attr_data)
elif attr_header.kind == AttributeKind.CLONE_LEN:
return attr_header.kind, conv_uint64(attr_data)
raise RuntimeError(f"Fix me: unhandled {attr_header}") # pragma: no cover