From 45201509ff6b1f6bb6b6b0f40b767f806d87d0c6 Mon Sep 17 00:00:00 2001 From: sneak Date: Wed, 17 Dec 2025 15:01:32 -0800 Subject: [PATCH] Fix progress line not clearing before final status --- internal/cli/gen.go | 9 +++++++++ 1 file changed, 9 insertions(+) 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) }