in internal/tfengine/tfengine.go [304:349]
func findUnmanaged(generatedDir, outputDir string, deleteFiles bool) error {
managed := make(map[string]bool)
mkFn := func(addToManaged bool, root string) func(path string, info os.FileInfo, err error) error {
root = filepath.Clean(root)
return func(path string, info os.FileInfo, err error) error {
if err != nil {
return fmt.Errorf("walk path %q: %v", path, err)
}
trimmedPath := strings.TrimPrefix(filepath.Clean(path), root)
if addToManaged {
managed[trimmedPath] = true
return nil
}
if _, ok := managed[trimmedPath]; ok {
return nil
}
if !deleteFiles {
log.Printf("INFO: Unmanaged file: %v\n", path)
return nil
}
fullPath, err := fileutil.Expand(path)
if err != nil {
return err
}
log.Printf("WARNING: Deleting unmanaged file: %v\n", path)
return os.RemoveAll(fullPath)
}
}
// Walk the generated dir to find the managed files.
if err := filepath.Walk(generatedDir, mkFn(true, generatedDir)); err != nil {
return fmt.Errorf("walk %qs: %v", generatedDir, err)
}
// Walk the output dir to find the unmanaged files.
if err := filepath.Walk(outputDir, mkFn(false, outputDir)); err != nil {
return fmt.Errorf("walk %qs: %v", outputDir, err)
}
return nil
}