diff --git a/internal/cli/gen.go b/internal/cli/gen.go index f3d2355..5bcfab5 100644 --- a/internal/cli/gen.go +++ b/internal/cli/gen.go @@ -3,6 +3,7 @@ package cli import ( "fmt" "path/filepath" + "sync" "time" "github.com/spf13/afero" @@ -28,9 +29,12 @@ func (mfa *CLIApp) generateManifestOperation(ctx *cli.Context) error { // Set up enumeration progress reporting var enumProgress chan scanner.EnumerateStatus + var enumWg sync.WaitGroup if showProgress { enumProgress = make(chan scanner.EnumerateStatus, 1) + enumWg.Add(1) go func() { + defer enumWg.Done() for status := range enumProgress { log.Progressf("Enumerating: %d files, %.1f MB", status.FilesFound, @@ -60,6 +64,7 @@ func (mfa *CLIApp) generateManifestOperation(ctx *cli.Context) error { return err } } + enumWg.Wait() log.Debugf("enumerated %d files, %d bytes total", s.FileCount(), s.TotalBytes()) @@ -80,9 +85,12 @@ func (mfa *CLIApp) generateManifestOperation(ctx *cli.Context) error { // Phase 2: Scan - read file contents and generate manifest var scanProgress chan scanner.ScanStatus + var scanWg sync.WaitGroup if showProgress { scanProgress = make(chan scanner.ScanStatus, 1) + scanWg.Add(1) go func() { + defer scanWg.Done() for status := range scanProgress { if status.ETA > 0 { log.Progressf("Scanning: %d/%d files, %.1f MB/s, ETA %s", @@ -102,6 +110,7 @@ func (mfa *CLIApp) generateManifestOperation(ctx *cli.Context) error { } err = s.ToManifest(ctx.Context, outFile, scanProgress) + scanWg.Wait() if err != nil { return fmt.Errorf("failed to generate manifest: %w", err) }