// removeAbandonedFiles removes any files that appear in the Ninja log that are // not currently build targets. func removeAbandonedFiles(ctx *blueprint.Context, config *Config, srcDir, manifestFile string) error { buildDir := "." switch config.stage { case StageBootstrap: buildDir = miniBootstrapDir case StagePrimary: buildDir = bootstrapDir } targetRules, err := ctx.AllTargets() if err != nil { return fmt.Errorf("error determining target list: %s", err) } replacer := strings.NewReplacer( "@@SrcDir@@", srcDir, "@@BuildDir@@", BuildDir, "@@BootstrapManifest@@", manifestFile) targets := make(map[string]bool) for target := range targetRules { replacedTarget := replacer.Replace(target) targets[filepath.Clean(replacedTarget)] = true } filePaths, err := parseNinjaLog(buildDir) if err != nil { return err } for _, filePath := range filePaths { isTarget := targets[filePath] if !isTarget { err = removeFileAndEmptyDirs(filePath) if err != nil { return err } } } return nil }