mirror of
https://github.com/Jguer/yay
synced 2024-10-05 23:59:13 +00:00
Multi package install
This commit is contained in:
parent
5570351466
commit
1c6bef93db
14
actions.go
14
actions.go
|
@ -8,6 +8,7 @@ import (
|
|||
"github.com/Jguer/go-alpm"
|
||||
"github.com/Jguer/yay/aur"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
@ -55,7 +56,18 @@ func searchAndInstall(pkgName string, conf *alpm.PacmanConfig, flags string) (er
|
|||
}
|
||||
}
|
||||
|
||||
InstallPackage(strings.TrimSpace(pacBuffer.String()), conf, flags)
|
||||
if pacBuffer.String() != "" {
|
||||
var cmd *exec.Cmd
|
||||
if flags == "" {
|
||||
cmd = exec.Command("sudo", "pacman", "-S", strings.TrimSpace(pacBuffer.String()))
|
||||
} else {
|
||||
cmd = exec.Command("sudo", "pacman", "-S", strings.TrimSpace(pacBuffer.String()), flags)
|
||||
}
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stdin = os.Stdin
|
||||
cmd.Stderr = os.Stderr
|
||||
err = cmd.Run()
|
||||
}
|
||||
|
||||
for _, aurpkg := range aurInstall {
|
||||
err = aurpkg.Install(BuildDir, conf, flags)
|
||||
|
|
28
aur/aur.go
28
aur/aur.go
|
@ -1,6 +1,7 @@
|
|||
package aur
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
@ -266,18 +267,25 @@ func (a *Result) Install(baseDir string, conf *alpm.PacmanConfig, flags string)
|
|||
return
|
||||
}
|
||||
|
||||
fmt.Println("\033[1m\x1b[32m==> Edit PKGBUILD?\033[0m\033[1m (y/N)\033[0m")
|
||||
var response string
|
||||
fmt.Scanln(&response)
|
||||
if strings.ContainsAny(response, "y & Y") {
|
||||
editcmd := exec.Command(Editor, baseDir+a.Name+"/"+"PKGBUILD")
|
||||
editcmd.Stdout = os.Stdout
|
||||
editcmd.Stderr = os.Stderr
|
||||
editcmd.Stdin = os.Stdin
|
||||
err = editcmd.Run()
|
||||
}
|
||||
var dir bytes.Buffer
|
||||
dir.WriteString(baseDir)
|
||||
dir.WriteString(a.Name)
|
||||
dir.WriteString("/")
|
||||
|
||||
err = os.Chdir(baseDir + a.Name)
|
||||
if _, err := os.Stat(dir.String() + "PKGBUILD"); err == nil {
|
||||
fmt.Println("\033[1m\x1b[32m==> Edit PKGBUILD?\033[0m\033[1m (y/N)\033[0m")
|
||||
fmt.Scanln(&response)
|
||||
if strings.ContainsAny(response, "y & Y") {
|
||||
editcmd := exec.Command(Editor, dir.String()+"PKGBUILD")
|
||||
editcmd.Stdout = os.Stdout
|
||||
editcmd.Stderr = os.Stderr
|
||||
editcmd.Stdin = os.Stdin
|
||||
err = editcmd.Run()
|
||||
}
|
||||
}
|
||||
|
||||
err = os.Chdir(dir.String())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
54
pacman.go
54
pacman.go
|
@ -36,24 +36,56 @@ func readConfig(pacmanconf string) (conf alpm.PacmanConfig, err error) {
|
|||
}
|
||||
|
||||
// InstallPackage handles package install
|
||||
func InstallPackage(pkg string, conf *alpm.PacmanConfig, flags string) error {
|
||||
if found, err := aur.IspkgInRepo(pkg, conf); found {
|
||||
if err != nil {
|
||||
return err
|
||||
func InstallPackage(pkgs []string, conf *alpm.PacmanConfig, flags string) error {
|
||||
h, err := conf.CreateHandle()
|
||||
defer h.Release()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
dbList, err := h.SyncDbs()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var foreign []string
|
||||
var args []string
|
||||
repocnt := 0
|
||||
args = append(args, "pacman")
|
||||
args = append(args, "-S")
|
||||
|
||||
for _, pkg := range pkgs {
|
||||
found := false
|
||||
for _, db := range dbList.Slice() {
|
||||
_, err = db.PkgByName(pkg)
|
||||
if err == nil {
|
||||
found = true
|
||||
args = append(args, pkg)
|
||||
repocnt++
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
var cmd *exec.Cmd
|
||||
if flags == "" {
|
||||
cmd = exec.Command("sudo", "pacman", "-S", pkg)
|
||||
} else {
|
||||
cmd = exec.Command("sudo", "pacman", "-S", pkg, flags)
|
||||
if !found {
|
||||
foreign = append(foreign, pkg)
|
||||
}
|
||||
}
|
||||
|
||||
if flags != "" {
|
||||
args = append(args, flags)
|
||||
}
|
||||
|
||||
if repocnt != 0 {
|
||||
var cmd *exec.Cmd
|
||||
cmd = exec.Command("sudo", args...)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stdin = os.Stdin
|
||||
cmd.Stderr = os.Stderr
|
||||
err = cmd.Run()
|
||||
} else {
|
||||
err = aur.Install(pkg, BuildDir, conf, flags)
|
||||
}
|
||||
|
||||
for _, aurpkg := range foreign {
|
||||
err = aur.Install(aurpkg, BuildDir, conf, flags)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
32
yay.go
32
yay.go
|
@ -1,6 +1,7 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
|
@ -28,20 +29,14 @@ func operation() (operation string, err error) {
|
|||
return "yogurt", nil
|
||||
}
|
||||
|
||||
func packages() (packages string, err error) {
|
||||
func packages() ([]string, error) {
|
||||
var ps []string
|
||||
for _, arg := range os.Args[1:] {
|
||||
if arg[0] != '-' {
|
||||
ps = append(ps, arg)
|
||||
}
|
||||
}
|
||||
|
||||
if len(ps) == 0 {
|
||||
return "", nil
|
||||
}
|
||||
packages = strings.Join(ps, " ")
|
||||
|
||||
return
|
||||
return ps, nil
|
||||
}
|
||||
|
||||
func flags() (flags string, err error) {
|
||||
|
@ -62,6 +57,7 @@ func flags() (flags string, err error) {
|
|||
|
||||
func main() {
|
||||
var err error
|
||||
var pkgstring bytes.Buffer
|
||||
conf, err := readConfig(PacmanConf)
|
||||
|
||||
op, err := operation()
|
||||
|
@ -70,21 +66,31 @@ func main() {
|
|||
os.Exit(1)
|
||||
}
|
||||
|
||||
pkg, _ := packages()
|
||||
pkgs, _ := packages()
|
||||
|
||||
flag, _ := flags()
|
||||
|
||||
switch op {
|
||||
case "-Ss":
|
||||
err = searchMode(pkg, &conf)
|
||||
for _, pkg := range pkgs {
|
||||
err = searchMode(pkg, &conf)
|
||||
}
|
||||
case "-S":
|
||||
err = InstallPackage(pkg, &conf, flag)
|
||||
err = InstallPackage(pkgs, &conf, flag)
|
||||
case "-Syu":
|
||||
err = updateAndInstall(&conf, flag)
|
||||
case "yogurt":
|
||||
err = searchAndInstall(pkg, &conf, flag)
|
||||
for _, pkg := range pkgs {
|
||||
err = searchAndInstall(pkg, &conf, flag)
|
||||
}
|
||||
default:
|
||||
err = passToPacman(op, pkg, flag)
|
||||
for i, pkg := range pkgs {
|
||||
pkgstring.WriteString(pkg)
|
||||
if i != len(pkgs)-1 {
|
||||
pkgstring.WriteString(" ")
|
||||
}
|
||||
}
|
||||
err = passToPacman(op, pkgstring.String(), flag)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in a new issue