Browse Source

Dont use CombinedOutput() to capture error separately

master
AI Bot 6 hours ago committed by Riyyi
parent
commit
bd1108a93f
  1. 36
      pkg/pacman/pacman.go

36
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)

Loading…
Cancel
Save