mirror of
https://github.com/Jguer/yay
synced 2024-10-31 13:42:27 +00:00
b2f636d93b
This moves the config parsing from out of alpm and into the go-pacmanconf libary plus some boilerplate code to get it into our alpm config. This makes sense as many config options such as UseColor and CleanMethod have nothing to do with alpm and only relate to pacman. pacman-conf is used instead of direct config parsing. This tool resolves defaults and includes for us, so we don't need to handle it. It is now safe to drop all the config parsing from go-alpm.
123 lines
2.4 KiB
Go
123 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
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) (string, string, 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()
|
|
}
|
|
|
|
func sudoLoop() {
|
|
for {
|
|
updateSudo()
|
|
time.Sleep(298 * time.Second)
|
|
}
|
|
}
|
|
|
|
func updateSudo() {
|
|
for {
|
|
err := show(exec.Command("sudo", "-v"))
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
// waitLock will lock yay checking the status of db.lck until it does not exist
|
|
func waitLock() {
|
|
if _, err := os.Stat(filepath.Join(pacmanConf.DBPath, "db.lck")); err != nil {
|
|
return
|
|
}
|
|
|
|
fmt.Print(bold(yellow(smallArrow)), " db.lck is present. Waiting...")
|
|
|
|
for {
|
|
time.Sleep(3 * time.Second)
|
|
if _, err := os.Stat(filepath.Join(pacmanConf.DBPath, "db.lck")); err != nil {
|
|
fmt.Println()
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func passToPacman(args *arguments) *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, "--config", config.PacmanConf)
|
|
argArr = append(argArr, "--")
|
|
argArr = append(argArr, args.targets...)
|
|
|
|
if args.needRoot() {
|
|
waitLock()
|
|
}
|
|
return exec.Command(argArr[0], argArr[1:]...)
|
|
}
|
|
|
|
func passToMakepkg(dir string, args ...string) *exec.Cmd {
|
|
if config.NoConfirm {
|
|
args = append(args)
|
|
}
|
|
|
|
mflags := strings.Fields(config.MFlags)
|
|
args = append(args, mflags...)
|
|
|
|
if config.MakepkgConf != "" {
|
|
args = append(args, "--config", config.MakepkgConf)
|
|
}
|
|
|
|
cmd := exec.Command(config.MakepkgBin, args...)
|
|
cmd.Dir = dir
|
|
return cmd
|
|
}
|
|
|
|
func passToGit(dir string, _args ...string) *exec.Cmd {
|
|
gitflags := strings.Fields(config.GitFlags)
|
|
args := []string{"-C", dir}
|
|
args = append(args, gitflags...)
|
|
args = append(args, _args...)
|
|
|
|
cmd := exec.Command(config.GitBin, args...)
|
|
return cmd
|
|
}
|