From bd1108a93fb38ee8401be368d7c9d9bfaaa8eeda Mon Sep 17 00:00:00 2001 From: AI Bot Date: Sat, 18 Apr 2026 15:07:29 +0200 Subject: [PATCH] Dont use CombinedOutput() to capture error separately --- pkg/pacman/pacman.go | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/pkg/pacman/pacman.go b/pkg/pacman/pacman.go index fb28923..bd50a55 100644 --- a/pkg/pacman/pacman.go +++ b/pkg/pacman/pacman.go @@ -5,7 +5,6 @@ import ( "os" "os/exec" "path/filepath" - "regexp" "strings" "time" @@ -96,7 +95,7 @@ func Sync(packages []string) (*output.Result, error) { if len(pacmanPkgs) > 0 { fmt.Fprintf(os.Stderr, "[debug] Sync: syncing %d pacman packages...\n", len(pacmanPkgs)) - _, err = SyncPackages(pacmanPkgs) + err = SyncPackages(pacmanPkgs) if err != nil { return nil, err } @@ -263,28 +262,22 @@ func getInstalledCount() (int, error) { return count, nil } -func SyncPackages(packages []string) (int, error) { +func SyncPackages(packages []string) error { start := time.Now() fmt.Fprintf(os.Stderr, "[debug] SyncPackages: starting...\n") args := append([]string{"-S", "--needed"}, packages...) cmd := exec.Command("pacman", args...) - output, err := cmd.CombinedOutput() + cmd.Stdout = state.GetLogWriter() + cmd.Stderr = state.GetLogWriter() + err := cmd.Run() if err != nil { - errMsg := fmt.Sprintf("pacman sync failed: %s", output) - state.Write([]byte(errMsg)) - return 0, fmt.Errorf("pacman sync failed: %s", output) - } - - if len(output) > 0 { - state.Write(output) + state.Write([]byte(fmt.Sprintf("pacman sync failed: %v\n", err))) + return fmt.Errorf("pacman sync failed: %v", err) } - re := regexp.MustCompile(`upgrading (\S+)`) - matches := re.FindAllStringSubmatch(string(output), -1) - fmt.Fprintf(os.Stderr, "[debug] SyncPackages: done (%.2fs)\n", time.Since(start).Seconds()) - return len(matches), nil + return nil } func CleanupOrphans() (int, error) { @@ -304,15 +297,12 @@ func CleanupOrphans() (int, error) { } removeCmd := exec.Command("pacman", "-Rns") - output, err := removeCmd.CombinedOutput() + removeCmd.Stdout = state.GetLogWriter() + removeCmd.Stderr = state.GetLogWriter() + err = removeCmd.Run() if err != nil { - errMsg := fmt.Sprintf("%s: %s", err, output) - state.Write([]byte(errMsg)) - return 0, fmt.Errorf("%s: %s", err, output) - } - - if len(output) > 0 { - state.Write(output) + state.Write([]byte(fmt.Sprintf("cleanup orphans failed: %v\n", err))) + return 0, fmt.Errorf("cleanup orphans failed: %v", err) } count := len(orphans)