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
}