mirror of
https://github.com/Jguer/yay
synced 2024-10-01 13:53:32 +00:00
refactor(exe): port pacman calls to cmd_builder
This commit is contained in:
parent
1a2e5b9529
commit
172ee1f4e8
7
clean.go
7
clean.go
|
@ -37,7 +37,9 @@ func cleanRemove(cmdArgs *parser.Arguments, pkgNames []string) error {
|
|||
_ = arguments.AddArg("R")
|
||||
arguments.AddTarget(pkgNames...)
|
||||
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(arguments))
|
||||
return config.Runtime.CmdRunner.Show(
|
||||
config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
arguments, config.Runtime.Mode, settings.NoConfirm))
|
||||
}
|
||||
|
||||
func syncClean(cmdArgs *parser.Arguments, dbExecutor db.Executor) error {
|
||||
|
@ -55,7 +57,8 @@ func syncClean(cmdArgs *parser.Arguments, dbExecutor db.Executor) error {
|
|||
}
|
||||
|
||||
if config.Runtime.Mode == parser.ModeRepo || config.Runtime.Mode == parser.ModeAny {
|
||||
if err := config.Runtime.CmdRunner.Show(passToPacman(cmdArgs)); err != nil {
|
||||
if err := config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
33
cmd.go
33
cmd.go
|
@ -158,9 +158,11 @@ func handleCmd(cmdArgs *parser.Arguments, dbExecutor db.Executor) error {
|
|||
handleVersion()
|
||||
return nil
|
||||
case "D", "database":
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
case "F", "files":
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
case "Q", "query":
|
||||
return handleQuery(cmdArgs, dbExecutor)
|
||||
case "R", "remove":
|
||||
|
@ -168,9 +170,11 @@ func handleCmd(cmdArgs *parser.Arguments, dbExecutor db.Executor) error {
|
|||
case "S", "sync":
|
||||
return handleSync(cmdArgs, dbExecutor)
|
||||
case "T", "deptest":
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
case "U", "upgrade":
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
case "G", "getpkgbuild":
|
||||
return handleGetpkgbuild(cmdArgs, dbExecutor)
|
||||
case "P", "show":
|
||||
|
@ -212,7 +216,8 @@ func handleQuery(cmdArgs *parser.Arguments, dbExecutor db.Executor) error {
|
|||
}
|
||||
return printUpdateList(cmdArgs, dbExecutor, cmdArgs.ExistsDouble("u", "sysupgrade"), filter)
|
||||
}
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
}
|
||||
|
||||
func handleHelp(cmdArgs *parser.Arguments) error {
|
||||
|
@ -220,7 +225,8 @@ func handleHelp(cmdArgs *parser.Arguments) error {
|
|||
usage()
|
||||
return nil
|
||||
}
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
}
|
||||
|
||||
func handleVersion() {
|
||||
|
@ -298,7 +304,8 @@ func handleSync(cmdArgs *parser.Arguments, dbExecutor db.Executor) error {
|
|||
return syncSearch(targets, config.Runtime.AURClient, dbExecutor)
|
||||
}
|
||||
if cmdArgs.ExistsArg("p", "print", "print-format") {
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
}
|
||||
if cmdArgs.ExistsArg("c", "clean") {
|
||||
return syncClean(cmdArgs, dbExecutor)
|
||||
|
@ -307,7 +314,8 @@ func handleSync(cmdArgs *parser.Arguments, dbExecutor db.Executor) error {
|
|||
return syncList(config.Runtime.HTTPClient, cmdArgs, dbExecutor)
|
||||
}
|
||||
if cmdArgs.ExistsArg("g", "groups") {
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
}
|
||||
if cmdArgs.ExistsArg("i", "info") {
|
||||
return syncInfo(cmdArgs, targets, dbExecutor)
|
||||
|
@ -319,13 +327,15 @@ func handleSync(cmdArgs *parser.Arguments, dbExecutor db.Executor) error {
|
|||
return install(cmdArgs, dbExecutor, false)
|
||||
}
|
||||
if cmdArgs.ExistsArg("y", "refresh") {
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func handleRemove(cmdArgs *parser.Arguments, localCache *vcs.InfoStore) error {
|
||||
err := config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
err := config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
if err == nil {
|
||||
localCache.RemovePackage(cmdArgs.Targets)
|
||||
}
|
||||
|
@ -489,7 +499,8 @@ func syncList(httpClient *http.Client, cmdArgs *parser.Arguments, dbExecutor db.
|
|||
}
|
||||
|
||||
if (config.Runtime.Mode == parser.ModeAny || config.Runtime.Mode == parser.ModeRepo) && (len(cmdArgs.Targets) != 0 || !aur) {
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
51
exec.go
51
exec.go
|
@ -4,15 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
|
||||
"github.com/Jguer/yay/v10/pkg/settings"
|
||||
"github.com/Jguer/yay/v10/pkg/settings/parser"
|
||||
"github.com/Jguer/yay/v10/pkg/text"
|
||||
)
|
||||
|
||||
func sudoLoopBackground() {
|
||||
|
@ -37,46 +29,3 @@ func updateSudo() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// waitLock will lock yay checking the status of db.lck until it does not exist
|
||||
func waitLock(dbPath string) {
|
||||
lockDBPath := filepath.Join(dbPath, "db.lck")
|
||||
if _, err := os.Stat(lockDBPath); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
text.Warnln(gotext.Get("%s is present.", lockDBPath))
|
||||
text.Warn(gotext.Get("There may be another Pacman instance running. Waiting..."))
|
||||
|
||||
for {
|
||||
time.Sleep(3 * time.Second)
|
||||
if _, err := os.Stat(lockDBPath); err != nil {
|
||||
fmt.Println()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func passToPacman(args *parser.Arguments) *exec.Cmd {
|
||||
argArr := make([]string, 0, 32)
|
||||
|
||||
if args.NeedRoot(config.Runtime.Mode) {
|
||||
argArr = append(argArr, config.SudoBin)
|
||||
argArr = append(argArr, strings.Fields(config.SudoFlags)...)
|
||||
}
|
||||
|
||||
argArr = append(argArr, config.PacmanBin)
|
||||
argArr = append(argArr, args.FormatGlobals()...)
|
||||
argArr = append(argArr, args.FormatArgs()...)
|
||||
if settings.NoConfirm {
|
||||
argArr = append(argArr, "--noconfirm")
|
||||
}
|
||||
|
||||
argArr = append(argArr, "--config", config.PacmanConf, "--")
|
||||
argArr = append(argArr, args.Targets...)
|
||||
|
||||
if args.NeedRoot(config.Runtime.Mode) {
|
||||
waitLock(config.Runtime.PacmanConf.DBPath)
|
||||
}
|
||||
return exec.Command(argArr[0], argArr[1:]...)
|
||||
}
|
||||
|
|
26
install.go
26
install.go
|
@ -38,7 +38,8 @@ func asdeps(cmdArgs *parser.Arguments, pkgs []string) (err error) {
|
|||
cmdArgs = cmdArgs.CopyGlobal()
|
||||
_ = cmdArgs.AddArg("q", "D", "asdeps")
|
||||
cmdArgs.AddTarget(pkgs...)
|
||||
err = config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
err = config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
if err != nil {
|
||||
return fmt.Errorf(gotext.Get("error updating package install reason to dependency"))
|
||||
}
|
||||
|
@ -54,7 +55,8 @@ func asexp(cmdArgs *parser.Arguments, pkgs []string) (err error) {
|
|||
cmdArgs = cmdArgs.CopyGlobal()
|
||||
_ = cmdArgs.AddArg("q", "D", "asexplicit")
|
||||
cmdArgs.AddTarget(pkgs...)
|
||||
err = config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
err = config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
if err != nil {
|
||||
return fmt.Errorf(gotext.Get("error updating package install reason to explicit"))
|
||||
}
|
||||
|
@ -77,7 +79,7 @@ func install(cmdArgs *parser.Arguments, dbExecutor db.Executor, ignoreProviders
|
|||
)
|
||||
|
||||
if noDeps {
|
||||
config.Runtime.CmdBuilder.MakepkgFlags = append(config.Runtime.CmdBuilder.MakepkgFlags, "-d")
|
||||
config.Runtime.CmdBuilder.AddMakepkgFlag("-d")
|
||||
}
|
||||
|
||||
if config.Runtime.Mode == parser.ModeAny || config.Runtime.Mode == parser.ModeRepo {
|
||||
|
@ -168,7 +170,8 @@ func install(cmdArgs *parser.Arguments, dbExecutor db.Executor, ignoreProviders
|
|||
if arguments.ExistsArg("ignore") {
|
||||
cmdArgs.CreateOrAppendOption("ignore", arguments.GetArgs("ignore")...)
|
||||
}
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(cmdArgs))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
}
|
||||
|
||||
if len(dp.Aur) > 0 && os.Geteuid() == 0 {
|
||||
|
@ -341,7 +344,8 @@ func install(cmdArgs *parser.Arguments, dbExecutor db.Executor, ignoreProviders
|
|||
}
|
||||
|
||||
if len(arguments.Targets) > 0 || arguments.ExistsArg("u") {
|
||||
if errShow := config.Runtime.CmdRunner.Show(passToPacman(arguments)); errShow != nil {
|
||||
if errShow := config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
arguments, config.Runtime.Mode, settings.NoConfirm)); errShow != nil {
|
||||
return errors.New(gotext.Get("error installing repo packages"))
|
||||
}
|
||||
|
||||
|
@ -400,7 +404,8 @@ func removeMake(do *dep.Order) error {
|
|||
|
||||
oldValue := settings.NoConfirm
|
||||
settings.NoConfirm = true
|
||||
err = config.Runtime.CmdRunner.Show(passToPacman(removeArguments))
|
||||
err = config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
removeArguments, config.Runtime.Mode, settings.NoConfirm))
|
||||
settings.NoConfirm = oldValue
|
||||
|
||||
return err
|
||||
|
@ -444,7 +449,8 @@ func earlyPacmanCall(cmdArgs *parser.Arguments, dbExecutor db.Executor) error {
|
|||
}
|
||||
|
||||
if cmdArgs.ExistsArg("y", "refresh") || cmdArgs.ExistsArg("u", "sysupgrade") || len(arguments.Targets) > 0 {
|
||||
if err := config.Runtime.CmdRunner.Show(passToPacman(arguments)); err != nil {
|
||||
if err := config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
arguments, config.Runtime.Mode, settings.NoConfirm)); err != nil {
|
||||
return errors.New(gotext.Get("error installing repo packages"))
|
||||
}
|
||||
}
|
||||
|
@ -460,7 +466,8 @@ func earlyRefresh(cmdArgs *parser.Arguments) error {
|
|||
arguments.DelArg("i", "info")
|
||||
arguments.DelArg("l", "list")
|
||||
arguments.ClearTargets()
|
||||
return config.Runtime.CmdRunner.Show(passToPacman(arguments))
|
||||
return config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
arguments, config.Runtime.Mode, settings.NoConfirm))
|
||||
}
|
||||
|
||||
func alpmArchIsSupported(alpmArch []string, arch string) bool {
|
||||
|
@ -898,7 +905,8 @@ func buildInstallPkgbuilds(
|
|||
return nil
|
||||
}
|
||||
|
||||
if errShow := config.Runtime.CmdRunner.Show(passToPacman(arguments)); errShow != nil {
|
||||
if errShow := config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
arguments, config.Runtime.Mode, settings.NoConfirm)); errShow != nil {
|
||||
return errShow
|
||||
}
|
||||
|
||||
|
|
1
main.go
1
main.go
|
@ -124,6 +124,7 @@ func main() {
|
|||
ret = 1
|
||||
return
|
||||
}
|
||||
config.Runtime.CmdBuilder.SetPacmanDBPath(config.Runtime.PacmanConf.DBPath)
|
||||
|
||||
text.UseColor = useColor
|
||||
|
||||
|
|
|
@ -14,12 +14,8 @@ func (c *Configuration) ParseCommandLine(a *parser.Arguments) error {
|
|||
|
||||
c.extractYayOptions(a)
|
||||
|
||||
cmdBuilder := c.Runtime.CmdBuilder
|
||||
cmdBuilder.GitBin = c.GitBin
|
||||
cmdBuilder.GitFlags = strings.Fields(c.GitFlags)
|
||||
cmdBuilder.MakepkgFlags = strings.Fields(c.MFlags)
|
||||
cmdBuilder.MakepkgConfPath = c.MakepkgConf
|
||||
cmdBuilder.MakepkgBin = c.MakepkgBin
|
||||
// Reload CmdBuilder
|
||||
c.Runtime.CmdBuilder = c.CmdBuilder()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -209,17 +209,11 @@ func NewConfig(version string) (*Configuration, error) {
|
|||
SaveConfig: false,
|
||||
CompletionPath: filepath.Join(cacheHome, completionFileName),
|
||||
CmdRunner: &exe.OSRunner{},
|
||||
CmdBuilder: &exe.CmdBuilder{
|
||||
GitBin: newConfig.GitBin,
|
||||
GitFlags: strings.Fields(newConfig.GitFlags),
|
||||
MakepkgFlags: strings.Fields(newConfig.MFlags),
|
||||
MakepkgConfPath: newConfig.MakepkgConf,
|
||||
MakepkgBin: newConfig.MakepkgBin,
|
||||
},
|
||||
PacmanConf: nil,
|
||||
VCSStore: nil,
|
||||
HTTPClient: &http.Client{},
|
||||
AURClient: nil,
|
||||
CmdBuilder: newConfig.CmdBuilder(),
|
||||
PacmanConf: nil,
|
||||
VCSStore: nil,
|
||||
HTTPClient: &http.Client{},
|
||||
AURClient: nil,
|
||||
}
|
||||
|
||||
var errAUR error
|
||||
|
@ -264,3 +258,17 @@ func (c *Configuration) load(configPath string) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Configuration) CmdBuilder() exe.ICmdBuilder {
|
||||
return &exe.CmdBuilder{
|
||||
GitBin: c.GitBin,
|
||||
GitFlags: strings.Fields(c.GitFlags),
|
||||
MakepkgFlags: strings.Fields(c.MFlags),
|
||||
MakepkgConfPath: c.MakepkgConf,
|
||||
MakepkgBin: c.MakepkgBin,
|
||||
SudoBin: c.SudoBin,
|
||||
SudoFlags: strings.Fields(c.SudoFlags),
|
||||
PacmanBin: c.PacmanBin,
|
||||
PacmanConfigPath: c.PacmanConf,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,14 @@ type GitCmdBuilder interface {
|
|||
BuildGitCmd(dir string, extraArgs ...string) *exec.Cmd
|
||||
}
|
||||
|
||||
type ICmdBuilder interface {
|
||||
BuildGitCmd(dir string, extraArgs ...string) *exec.Cmd
|
||||
BuildMakepkgCmd(dir string, extraArgs ...string) *exec.Cmd
|
||||
BuildPacmanCmd(args *parser.Arguments, mode parser.TargetMode, noConfirm bool) *exec.Cmd
|
||||
AddMakepkgFlag(string)
|
||||
SetPacmanDBPath(string)
|
||||
}
|
||||
|
||||
type CmdBuilder struct {
|
||||
GitBin string
|
||||
GitFlags []string
|
||||
|
@ -47,6 +55,10 @@ func (c *CmdBuilder) BuildGitCmd(dir string, extraArgs ...string) *exec.Cmd {
|
|||
return cmd
|
||||
}
|
||||
|
||||
func (c *CmdBuilder) AddMakepkgFlag(flag string) {
|
||||
c.MakepkgFlags = append(c.MakepkgFlags, flag)
|
||||
}
|
||||
|
||||
func (c *CmdBuilder) BuildMakepkgCmd(dir string, extraArgs ...string) *exec.Cmd {
|
||||
args := make([]string, len(c.MakepkgFlags), len(c.MakepkgFlags)+len(extraArgs))
|
||||
copy(args, c.MakepkgFlags)
|
||||
|
@ -64,6 +76,10 @@ func (c *CmdBuilder) BuildMakepkgCmd(dir string, extraArgs ...string) *exec.Cmd
|
|||
return cmd
|
||||
}
|
||||
|
||||
func (c *CmdBuilder) SetPacmanDBPath(dbPath string) {
|
||||
c.PacmanDBPath = dbPath
|
||||
}
|
||||
|
||||
func (c *CmdBuilder) BuildPacmanCmd(args *parser.Arguments, mode parser.TargetMode, noConfirm bool) *exec.Cmd {
|
||||
argArr := make([]string, 0, 32)
|
||||
needsRoot := args.NeedRoot(mode)
|
||||
|
|
|
@ -19,7 +19,7 @@ type Runtime struct {
|
|||
ConfigPath string
|
||||
PacmanConf *pacmanconf.Config
|
||||
VCSStore *vcs.InfoStore
|
||||
CmdBuilder *exe.CmdBuilder
|
||||
CmdBuilder exe.ICmdBuilder
|
||||
CmdRunner exe.Runner
|
||||
HTTPClient *http.Client
|
||||
AURClient *aur.Client
|
||||
|
|
|
@ -21,7 +21,7 @@ type InfoStore struct {
|
|||
OriginsByPackage map[string]OriginInfoByURL
|
||||
FilePath string
|
||||
Runner exe.Runner
|
||||
CmdBuilder *exe.CmdBuilder
|
||||
CmdBuilder exe.ICmdBuilder
|
||||
}
|
||||
|
||||
// OriginInfoByURL stores the OriginInfo of each origin URL provided
|
||||
|
@ -42,7 +42,7 @@ type OriginInfo struct {
|
|||
SHA string `json:"sha"`
|
||||
}
|
||||
|
||||
func NewInfoStore(filePath string, runner exe.Runner, cmdBuilder *exe.CmdBuilder) *InfoStore {
|
||||
func NewInfoStore(filePath string, runner exe.Runner, cmdBuilder exe.ICmdBuilder) *InfoStore {
|
||||
infoStore := &InfoStore{
|
||||
CmdBuilder: cmdBuilder,
|
||||
FilePath: filePath,
|
||||
|
|
3
query.go
3
query.go
|
@ -217,7 +217,8 @@ func syncInfo(cmdArgs *parser.Arguments, pkgS []string, dbExecutor db.Executor)
|
|||
arguments := cmdArgs.Copy()
|
||||
arguments.ClearTargets()
|
||||
arguments.AddTarget(repoS...)
|
||||
err = config.Runtime.CmdRunner.Show(passToPacman(arguments))
|
||||
err = config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildPacmanCmd(
|
||||
cmdArgs, config.Runtime.Mode, settings.NoConfirm))
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
Loading…
Reference in a new issue