def assert_valid_and_complete()

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")