39 lines
919 B
Go
39 lines
919 B
Go
package sfdupes
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
// runDwim implements the dwim subcommand: it runs what "sfdupes scan
|
|
// root" runs with the scan flags in opts, 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, opts scanOptions, stdout io.Writer,
|
|
) error {
|
|
scanCtx, stop := interruptContext(ctx)
|
|
err := runScan(scanCtx, []string{root}, opts)
|
|
|
|
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
|
|
}
|