func findUnmanaged()

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
}