func()

in file.go [255:287]


func (f *FileState) NeedsUpdate(ctx context.Context, resource Resource) (bool, error) {
	file := resource.(*File)
	if file.Absent && f.info != nil {
		return true, nil
	}
	if f.info != nil && file.Directory != f.info.IsDir() {
		return true, nil
	}
	// TODO: Implement file permissions support based on ACLs in Windows.
	if f.info != nil && runtime.GOOS != "windows" && file.mode().Perm() != f.info.Mode().Perm() {
		return true, nil
	}
	if file.Content != nil && !file.KeepExistingContent {
		current, err := f.content()
		if err != nil {
			return true, err
		}
		defer current.Close()

		currentCheckSum := md5.New()
		io.Copy(currentCheckSum, current)
		if file.MD5 != "" && file.MD5 == string(currentCheckSum.Sum(nil)) {
			return false, nil
		}

		expectedCheckSum := md5.New()
		file.Content(ctx, f.scope, expectedCheckSum)
		if !bytes.Equal(currentCheckSum.Sum(nil), expectedCheckSum.Sum(nil)) {
			return true, nil
		}
	}
	return false, nil
}