style(runner): use command runner for commands

This commit is contained in:
jguer 2020-08-19 01:48:07 +02:00
parent ab3c66ab98
commit c1171d4146
No known key found for this signature in database
GPG key ID: 6D6CC9BEA8556B35
7 changed files with 55 additions and 83 deletions

View file

@ -57,7 +57,7 @@ func cleanRemove(cmdArgs *settings.Arguments, pkgNames []string) error {
_ = arguments.AddArg("R")
arguments.AddTarget(pkgNames...)
return show(passToPacman(arguments))
return config.Runtime.CmdRunner.Show(passToPacman(arguments))
}
func syncClean(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
@ -75,7 +75,7 @@ func syncClean(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
}
if config.Runtime.Mode == settings.ModeRepo || config.Runtime.Mode == settings.ModeAny {
if err := show(passToPacman(cmdArgs)); err != nil {
if err := config.Runtime.CmdRunner.Show(passToPacman(cmdArgs)); err != nil {
return err
}
}
@ -194,7 +194,7 @@ func cleanUntracked() error {
dir := filepath.Join(config.BuildDir, file.Name())
if isGitRepository(dir) {
if err := show(passToGit(dir, "clean", "-fx")); err != nil {
if err := config.Runtime.CmdRunner.Show(passToGit(dir, "clean", "-fx")); err != nil {
text.Warnln(gotext.Get("Unable to clean:"), dir)
return err
}
@ -219,12 +219,12 @@ func cleanAfter(bases []dep.Base) {
text.OperationInfoln(gotext.Get("Cleaning (%d/%d): %s", i+1, len(bases), text.Cyan(dir)))
_, stderr, err := capture(passToGit(dir, "reset", "--hard", "HEAD"))
_, stderr, err := config.Runtime.CmdRunner.Capture(passToGit(dir, "reset", "--hard", "HEAD"), 0)
if err != nil {
text.Errorln(gotext.Get("error resetting %s: %s", base.String(), stderr))
}
if err := show(passToGit(dir, "clean", "-fx", "--exclude='*.pkg.*'")); err != nil {
if err := config.Runtime.CmdRunner.Show(passToGit(dir, "clean", "-fx", "--exclude='*.pkg.*'")); err != nil {
fmt.Fprintln(os.Stderr, err)
}
}

22
cmd.go
View file

@ -153,9 +153,9 @@ func handleCmd(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
handleVersion()
return nil
case "D", "database":
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
case "F", "files":
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
case "Q", "query":
return handleQuery(cmdArgs, dbExecutor)
case "R", "remove":
@ -163,9 +163,9 @@ func handleCmd(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
case "S", "sync":
return handleSync(cmdArgs, dbExecutor)
case "T", "deptest":
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
case "U", "upgrade":
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
case "G", "getpkgbuild":
return handleGetpkgbuild(cmdArgs, dbExecutor)
case "P", "show":
@ -181,7 +181,7 @@ func handleQuery(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
if cmdArgs.ExistsArg("u", "upgrades") {
return printUpdateList(cmdArgs, dbExecutor, cmdArgs.ExistsDouble("u", "sysupgrade"))
}
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
}
func handleHelp(cmdArgs *settings.Arguments) error {
@ -189,7 +189,7 @@ func handleHelp(cmdArgs *settings.Arguments) error {
usage()
return nil
}
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
}
func handleVersion() {
@ -259,7 +259,7 @@ func handleSync(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
return syncSearch(targets, dbExecutor)
}
if cmdArgs.ExistsArg("p", "print", "print-format") {
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
}
if cmdArgs.ExistsArg("c", "clean") {
return syncClean(cmdArgs, dbExecutor)
@ -268,7 +268,7 @@ func handleSync(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
return syncList(cmdArgs, dbExecutor)
}
if cmdArgs.ExistsArg("g", "groups") {
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
}
if cmdArgs.ExistsArg("i", "info") {
return syncInfo(cmdArgs, targets, dbExecutor)
@ -280,13 +280,13 @@ func handleSync(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
return install(cmdArgs, dbExecutor, false)
}
if cmdArgs.ExistsArg("y", "refresh") {
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
}
return nil
}
func handleRemove(cmdArgs *settings.Arguments, localCache vcsInfo) error {
err := show(passToPacman(cmdArgs))
err := config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
if err == nil {
removeVCSPackage(cmdArgs.Targets, localCache)
}
@ -445,7 +445,7 @@ func syncList(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
}
if (config.Runtime.Mode == settings.ModeAny || config.Runtime.Mode == settings.ModeRepo) && (len(cmdArgs.Targets) != 0 || !aur) {
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
}
return nil

View file

@ -23,7 +23,7 @@ const gitDiffRefName = "AUR_SEEN"
// Update the YAY_DIFF_REVIEW ref to HEAD. We use this ref to determine which diff were
// reviewed by the user
func gitUpdateSeenRef(path, name string) error {
_, stderr, err := capture(passToGit(filepath.Join(path, name), "update-ref", gitDiffRefName, "HEAD"))
_, stderr, err := config.Runtime.CmdRunner.Capture(passToGit(filepath.Join(path, name), "update-ref", gitDiffRefName, "HEAD"), 0)
if err != nil {
return fmt.Errorf("%s %s", stderr, err)
}
@ -33,7 +33,7 @@ func gitUpdateSeenRef(path, name string) error {
// Return wether or not we have reviewed a diff yet. It checks for the existence of
// YAY_DIFF_REVIEW in the git ref-list
func gitHasLastSeenRef(path, name string) bool {
_, _, err := capture(passToGit(filepath.Join(path, name), "rev-parse", "--quiet", "--verify", gitDiffRefName))
_, _, err := config.Runtime.CmdRunner.Capture(passToGit(filepath.Join(path, name), "rev-parse", "--quiet", "--verify", gitDiffRefName), 0)
return err == nil
}
@ -41,7 +41,7 @@ func gitHasLastSeenRef(path, name string) bool {
// If it does not it will return empty tree as no diff have been reviewed yet.
func getLastSeenHash(path, name string) (string, error) {
if gitHasLastSeenRef(path, name) {
stdout, stderr, err := capture(passToGit(filepath.Join(path, name), "rev-parse", gitDiffRefName))
stdout, stderr, err := config.Runtime.CmdRunner.Capture(passToGit(filepath.Join(path, name), "rev-parse", gitDiffRefName), 0)
if err != nil {
return "", fmt.Errorf("%s %s", stderr, err)
}
@ -56,7 +56,8 @@ func getLastSeenHash(path, name string) (string, error) {
// HEAD@{upstream}
func gitHasDiff(path, name string) (bool, error) {
if gitHasLastSeenRef(path, name) {
stdout, stderr, err := capture(passToGit(filepath.Join(path, name), "rev-parse", gitDiffRefName, "HEAD@{upstream}"))
stdout, stderr, err := config.Runtime.CmdRunner.Capture(
passToGit(filepath.Join(path, name), "rev-parse", gitDiffRefName, "HEAD@{upstream}"), 0)
if err != nil {
return false, fmt.Errorf("%s%s", stderr, err)
}
@ -80,8 +81,7 @@ func gitDownloadABS(url, path, name string) (bool, error) {
if _, errExist := os.Stat(filepath.Join(path, name)); os.IsNotExist(errExist) {
cmd := passToGit(path, "clone", "--no-progress", "--single-branch",
"-b", "packages/"+name, url, name)
cmd.Env = append(os.Environ(), "GIT_TERMINAL_PROMPT=0")
_, stderr, err := capture(cmd)
_, stderr, err := config.Runtime.CmdRunner.Capture(cmd, 0)
if err != nil {
return false, fmt.Errorf(gotext.Get("error cloning %s: %s", name, stderr))
}
@ -92,8 +92,7 @@ func gitDownloadABS(url, path, name string) (bool, error) {
}
cmd := passToGit(filepath.Join(path, name), "pull", "--ff-only")
cmd.Env = append(os.Environ(), "GIT_TERMINAL_PROMPT=0")
_, stderr, err := capture(cmd)
_, stderr, err := config.Runtime.CmdRunner.Capture(cmd, 0)
if err != nil {
return false, fmt.Errorf(gotext.Get("error fetching %s: %s", name, stderr))
}
@ -105,8 +104,7 @@ func gitDownload(url, path, name string) (bool, error) {
_, err := os.Stat(filepath.Join(path, name, ".git"))
if os.IsNotExist(err) {
cmd := passToGit(path, "clone", "--no-progress", url, name)
cmd.Env = append(os.Environ(), "GIT_TERMINAL_PROMPT=0")
_, stderr, errCapture := capture(cmd)
_, stderr, errCapture := config.Runtime.CmdRunner.Capture(cmd, 0)
if errCapture != nil {
return false, fmt.Errorf(gotext.Get("error cloning %s: %s", name, stderr))
}
@ -117,8 +115,7 @@ func gitDownload(url, path, name string) (bool, error) {
}
cmd := passToGit(filepath.Join(path, name), "fetch")
cmd.Env = append(os.Environ(), "GIT_TERMINAL_PROMPT=0")
_, stderr, err := capture(cmd)
_, stderr, err := config.Runtime.CmdRunner.Capture(cmd, 0)
if err != nil {
return false, fmt.Errorf(gotext.Get("error fetching %s: %s", name, stderr))
}
@ -127,12 +124,12 @@ func gitDownload(url, path, name string) (bool, error) {
}
func gitMerge(path, name string) error {
_, stderr, err := capture(passToGit(filepath.Join(path, name), "reset", "--hard", "HEAD"))
_, stderr, err := config.Runtime.CmdRunner.Capture(passToGit(filepath.Join(path, name), "reset", "--hard", "HEAD"), 0)
if err != nil {
return fmt.Errorf(gotext.Get("error resetting %s: %s", name, stderr))
}
_, stderr, err = capture(passToGit(filepath.Join(path, name), "merge", "--no-edit", "--ff"))
_, stderr, err = config.Runtime.CmdRunner.Capture(passToGit(filepath.Join(path, name), "merge", "--no-edit", "--ff"), 0)
if err != nil {
return fmt.Errorf(gotext.Get("error merging %s: %s", name, stderr))
}
@ -281,7 +278,11 @@ func getPkgbuildsfromABS(pkgs []string, path string, dbExecutor db.Executor, for
return
}
_, stderr, err := capture(exec.Command("cp", "-r", filepath.Join(config.ABSDir, pkg, "trunk"), filepath.Join(path, pkg)))
_, stderr, err := config.Runtime.CmdRunner.Capture(
exec.Command(
"cp", "-r",
filepath.Join(config.ABSDir, pkg, "trunk"),
filepath.Join(path, pkg)), 0)
mux.Lock()
downloaded++
if err != nil {

38
exec.go
View file

@ -1,7 +1,6 @@
package main
import (
"bytes"
"fmt"
"os"
"os/exec"
@ -10,33 +9,11 @@ import (
"time"
"github.com/leonelquinteros/gotext"
"golang.org/x/crypto/ssh/terminal"
"github.com/Jguer/yay/v10/pkg/settings"
"github.com/Jguer/yay/v10/pkg/text"
)
func show(cmd *exec.Cmd) error {
cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr
err := cmd.Run()
if err != nil {
return fmt.Errorf("")
}
return nil
}
func capture(cmd *exec.Cmd) (stdout, stderr string, err error) {
var outbuf, errbuf bytes.Buffer
cmd.Stdout = &outbuf
cmd.Stderr = &errbuf
err = cmd.Run()
stdout = strings.TrimSpace(outbuf.String())
stderr = strings.TrimSpace(errbuf.String())
return stdout, stderr, err
}
func sudoLoopBackground() {
updateSudo()
go sudoLoop()
@ -53,7 +30,7 @@ func updateSudo() {
for {
mSudoFlags := strings.Fields(config.SudoFlags)
mSudoFlags = append([]string{"-v"}, mSudoFlags...)
err := show(exec.Command(config.SudoBin, mSudoFlags...))
err := config.Runtime.CmdRunner.Show(exec.Command(config.SudoBin, mSudoFlags...))
if err != nil {
fmt.Fprintln(os.Stderr, err)
} else {
@ -82,13 +59,11 @@ func waitLock(dbPath string) {
}
func passToPacman(args *settings.Arguments) *exec.Cmd {
argArr := make([]string, 0)
mSudoFlags := strings.Fields(config.SudoFlags)
argArr := make([]string, 0, 32)
if args.NeedRoot(config.Runtime) {
argArr = append(argArr, config.SudoBin)
argArr = append(argArr, mSudoFlags...)
argArr = append(argArr, strings.Fields(config.SudoFlags)...)
}
argArr = append(argArr, config.PacmanBin)
@ -108,8 +83,7 @@ func passToPacman(args *settings.Arguments) *exec.Cmd {
}
func passToMakepkg(dir string, args ...string) *exec.Cmd {
mflags := strings.Fields(config.MFlags)
args = append(args, mflags...)
args = append(args, strings.Fields(config.MFlags)...)
if config.MakepkgConf != "" {
args = append(args, "--config", config.MakepkgConf)
@ -131,7 +105,3 @@ func passToGit(dir string, _args ...string) *exec.Cmd {
cmd.Env = append(os.Environ(), "GIT_TERMINAL_PROMPT=0")
return cmd
}
func isTty() bool {
return terminal.IsTerminal(int(os.Stdout.Fd()))
}

View file

@ -37,7 +37,7 @@ func asdeps(cmdArgs *settings.Arguments, pkgs []string) error {
cmdArgs = cmdArgs.CopyGlobal()
_ = cmdArgs.AddArg("D", "asdeps")
cmdArgs.AddTarget(pkgs...)
_, stderr, err := capture(passToPacman(cmdArgs))
_, stderr, err := config.Runtime.CmdRunner.Capture(passToPacman(cmdArgs), 0)
if err != nil {
return fmt.Errorf("%s %s", stderr, err)
}
@ -53,7 +53,7 @@ func asexp(cmdArgs *settings.Arguments, pkgs []string) error {
cmdArgs = cmdArgs.CopyGlobal()
_ = cmdArgs.AddArg("D", "asexplicit")
cmdArgs.AddTarget(pkgs...)
_, stderr, err := capture(passToPacman(cmdArgs))
_, stderr, err := config.Runtime.CmdRunner.Capture(passToPacman(cmdArgs), 0)
if err != nil {
return fmt.Errorf("%s %s", stderr, err)
}
@ -177,7 +177,7 @@ func install(cmdArgs *settings.Arguments, dbExecutor db.Executor, ignoreProvider
if arguments.ExistsArg("ignore") {
cmdArgs.CreateOrAppendOption("ignore", arguments.GetArgs("ignore")...)
}
return show(passToPacman(cmdArgs))
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
}
if len(dp.Aur) > 0 && os.Geteuid() == 0 {
@ -338,7 +338,7 @@ func install(cmdArgs *settings.Arguments, dbExecutor db.Executor, ignoreProvider
}
if len(arguments.Targets) > 0 || arguments.ExistsArg("u") {
if errShow := show(passToPacman(arguments)); errShow != nil {
if errShow := config.Runtime.CmdRunner.Show(passToPacman(arguments)); errShow != nil {
return errors.New(gotext.Get("error installing repo packages"))
}
@ -396,7 +396,7 @@ func removeMake(do *dep.Order) error {
oldValue := settings.NoConfirm
settings.NoConfirm = true
err = show(passToPacman(removeArguments))
err = config.Runtime.CmdRunner.Show(passToPacman(removeArguments))
settings.NoConfirm = oldValue
return err
@ -440,7 +440,7 @@ func earlyPacmanCall(cmdArgs *settings.Arguments, dbExecutor db.Executor) error
}
if cmdArgs.ExistsArg("y", "refresh") || cmdArgs.ExistsArg("u", "sysupgrade") || len(arguments.Targets) > 0 {
if err := show(passToPacman(arguments)); err != nil {
if err := config.Runtime.CmdRunner.Show(passToPacman(arguments)); err != nil {
return errors.New(gotext.Get("error installing repo packages"))
}
}
@ -456,7 +456,7 @@ func earlyRefresh(cmdArgs *settings.Arguments) error {
arguments.DelArg("i", "info")
arguments.DelArg("l", "list")
arguments.ClearTargets()
return show(passToPacman(arguments))
return config.Runtime.CmdRunner.Show(passToPacman(arguments))
}
func getIncompatible(bases []dep.Base, srcinfos map[string]*gosrc.Srcinfo, dbExecutor db.Executor) (stringset.StringSet, error) {
@ -496,7 +496,7 @@ nextpkg:
}
func parsePackageList(dir string) (pkgdests map[string]string, pkgVersion string, err error) {
stdout, stderr, err := capture(passToMakepkg(dir, "--packagelist"))
stdout, stderr, err := config.Runtime.CmdRunner.Capture(passToMakepkg(dir, "--packagelist"), 0)
if err != nil {
return nil, "", fmt.Errorf("%s %s", stderr, err)
}
@ -765,7 +765,7 @@ func showPkgbuildDiffs(bases []dep.Base, cloned stringset.StringSet) error {
} else {
args = append(args, "--color=never")
}
_ = show(passToGit(dir, args...))
_ = config.Runtime.CmdRunner.Show(passToGit(dir, args...))
}
return errMulti.Return()
@ -922,7 +922,7 @@ func downloadPkgbuildsSources(bases []dep.Base, incompatible stringset.StringSet
args = append(args, "--ignorearch")
}
err = show(passToMakepkg(dir, args...))
err = config.Runtime.CmdRunner.Show(passToMakepkg(dir, args...))
if err != nil {
return errors.New(gotext.Get("error downloading sources: %s", text.Cyan(base.String())))
}
@ -973,7 +973,7 @@ func buildInstallPkgbuilds(
return nil
}
if errShow := show(passToPacman(arguments)); errShow != nil {
if errShow := config.Runtime.CmdRunner.Show(passToPacman(arguments)); errShow != nil {
return errShow
}
@ -1033,7 +1033,7 @@ func buildInstallPkgbuilds(
}
// pkgver bump
if err = show(passToMakepkg(dir, args...)); err != nil {
if err = config.Runtime.CmdRunner.Show(passToMakepkg(dir, args...)); err != nil {
return errors.New(gotext.Get("error making: %s", base.String()))
}
@ -1070,7 +1070,7 @@ func buildInstallPkgbuilds(
}
if installed {
err = show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch"))
err = config.Runtime.CmdRunner.Show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch"))
if err != nil {
return errors.New(gotext.Get("error making: %s", err))
}
@ -1081,7 +1081,7 @@ func buildInstallPkgbuilds(
}
if built {
err = show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch"))
err = config.Runtime.CmdRunner.Show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch"))
if err != nil {
return errors.New(gotext.Get("error making: %s", err))
}
@ -1094,7 +1094,7 @@ func buildInstallPkgbuilds(
args = append(args, "--ignorearch")
}
if errMake := show(passToMakepkg(dir, args...)); errMake != nil {
if errMake := config.Runtime.CmdRunner.Show(passToMakepkg(dir, args...)); errMake != nil {
return errors.New(gotext.Get("error making: %s", base.String()))
}
}

View file

@ -8,6 +8,7 @@ import (
pacmanconf "github.com/Morganamilo/go-pacmanconf"
"github.com/leonelquinteros/gotext"
"golang.org/x/crypto/ssh/terminal"
"github.com/Jguer/yay/v10/pkg/db"
"github.com/Jguer/yay/v10/pkg/db/ialpm"
@ -109,12 +110,12 @@ func initAlpm(cmdArgs *settings.Arguments, pacmanConfigPath string) (*pacmanconf
pacmanConf.GPGDir = gpgDir
}
useColor := pacmanConf.Color && isTty()
useColor := pacmanConf.Color && terminal.IsTerminal(int(os.Stdout.Fd()))
switch value, _, _ := cmdArgs.GetArg("color"); value {
case "always":
useColor = true
case "auto":
useColor = isTty()
useColor = terminal.IsTerminal(int(os.Stdout.Fd()))
case "never":
useColor = false
}

View file

@ -215,7 +215,7 @@ func syncInfo(cmdArgs *settings.Arguments, pkgS []string, dbExecutor db.Executor
arguments := cmdArgs.Copy()
arguments.ClearTargets()
arguments.AddTarget(repoS...)
err = show(passToPacman(arguments))
err = config.Runtime.CmdRunner.Show(passToPacman(arguments))
if err != nil {
return err