package main import ( "context" "fmt" "io" "os" "runtime" ) // runDwim implements the dwim subcommand: it runs what "sfdupes scan // root" runs with no flags, then what "sfdupes trees" runs, and ends // with a line on stderr saying how to print the report again. The dwim // command passes "/" as root. It catches SIGINT and SIGTERM as scan // does, but only during the scan. An error from the scan, an interrupt // included, ends it before the report. During the report, a signal // ends it at once, as it ends trees. func runDwim(ctx context.Context, root string, stdout io.Writer) error { scanCtx, stop := interruptContext(ctx) err := runScan(scanCtx, []string{root}, runtime.NumCPU(), false, false) stop() if err != nil { return err } err = runTrees(ctx, stdout) if err != nil { return err } fmt.Fprintln(os.Stderr, `dwim: run "sfdupes trees" to print this report again`) return nil }