From 111a7f73dc8a08207f59c2f59134986a8e97b054 Mon Sep 17 00:00:00 2001 From: morganamilo Date: Wed, 28 Feb 2018 17:39:57 +0000 Subject: [PATCH] Hide pacman output when setting install reason Stderr is shown if Pacman returns non 0. --- cmd.go | 33 +++++++++++++++++++++++++++++++++ install.go | 8 ++++---- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/cmd.go b/cmd.go index f97227dc..f1a0bef6 100644 --- a/cmd.go +++ b/cmd.go @@ -2,6 +2,7 @@ package main import ( "bufio" + "bytes" "encoding/json" "errors" "fmt" @@ -692,6 +693,38 @@ func passToPacman(args *arguments) error { return err } +//passToPacman but return the output instead of showing the user +func passToPacmanCapture(args *arguments) (string, string, error) { + var outbuf, errbuf bytes.Buffer + var cmd *exec.Cmd + argArr := make([]string, 0) + + if args.needRoot() { + argArr = append(argArr, "sudo") + } + + argArr = append(argArr, config.PacmanBin) + argArr = append(argArr, cmdArgs.formatGlobals()...) + argArr = append(argArr, args.formatArgs()...) + if config.NoConfirm { + argArr = append(argArr, "--noconfirm") + } + + argArr = append(argArr, "--") + + argArr = append(argArr, args.formatTargets()...) + + cmd = exec.Command(argArr[0], argArr[1:]...) + cmd.Stdout = &outbuf + cmd.Stderr = &errbuf + + err := cmd.Run() + stdout := outbuf.String() + stderr := errbuf.String() + + return stdout, stderr, err +} + // passToMakepkg outsources execution to makepkg binary without modifications. func passToMakepkg(dir string, args ...string) (err error) { diff --git a/install.go b/install.go index 1fffefa5..26b3a7d3 100644 --- a/install.go +++ b/install.go @@ -137,9 +137,9 @@ func install(parser *arguments) error { } if len(depArguments.targets) > 0 { - err = passToPacman(depArguments) + _, stderr, err := passToPacmanCapture(depArguments) if err != nil { - return err + return fmt.Errorf("%s%s", stderr, err) } } } @@ -495,9 +495,9 @@ func buildInstallPkgBuilds(pkgs []*rpc.Pkg, srcinfos map[string]*gopkg.PKGBUILD, updateVSCdb(bases[pkg.PackageBase], srcinfo) if len(depArguments.targets) > 0 { - err = passToPacman(depArguments) + _, stderr, err := passToPacmanCapture(depArguments) if err != nil { - return err + return fmt.Errorf("%s%s", stderr, err) } } config.NoConfirm = oldConfirm