in antlir/btrfs_diff/inode.py [0:0]
def assert_valid_and_complete(self):
if None in (self.file_type, self.owner, self.utimes):
raise RuntimeError(f"{self} must have file_type, owner & utimes")
if stat.S_ISLNK(self.file_type) ^ (self.mode is None):
raise RuntimeError(f"only symlinks must omit mode, got {self}")
if self.file_type & ~(stat.S_IFMT(self.file_type)):
raise RuntimeError(f"bad .file_type bits in {self}")
if self.mode is not None and (self.mode & stat.S_IFMT(self.mode)):
raise RuntimeError(f"bad .mode bits in {self}")
if (self.chunks is not None) ^ stat.S_ISREG(self.file_type):
raise RuntimeError(f"{self} must have .chunks iff it is a file")
is_dev = stat.S_ISBLK(self.file_type) or stat.S_ISCHR(self.file_type)
if (self.dev is not None) ^ is_dev:
raise RuntimeError(f"{self} must have .dev iff it is a device")
if (self.dest is not None) ^ stat.S_ISLNK(self.file_type):
raise RuntimeError(f"{self} must have .dest iff it is a symlink")