mirror of
https://github.com/Jguer/yay.git
synced 2025-10-07 00:14:22 -04: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/go-alpm"
|
||||||
"github.com/Jguer/yay/aur"
|
"github.com/Jguer/yay/aur"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"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 {
|
for _, aurpkg := range aurInstall {
|
||||||
err = aurpkg.Install(BuildDir, conf, flags)
|
err = aurpkg.Install(BuildDir, conf, flags)
|
||||||
|
14
aur/aur.go
14
aur/aur.go
@ -1,6 +1,7 @@
|
|||||||
package aur
|
package aur
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -266,18 +267,25 @@ func (a *Result) Install(baseDir string, conf *alpm.PacmanConfig, flags string)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("\033[1m\x1b[32m==> Edit PKGBUILD?\033[0m\033[1m (y/N)\033[0m")
|
|
||||||
var response string
|
var response string
|
||||||
|
var dir bytes.Buffer
|
||||||
|
dir.WriteString(baseDir)
|
||||||
|
dir.WriteString(a.Name)
|
||||||
|
dir.WriteString("/")
|
||||||
|
|
||||||
|
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)
|
fmt.Scanln(&response)
|
||||||
if strings.ContainsAny(response, "y & Y") {
|
if strings.ContainsAny(response, "y & Y") {
|
||||||
editcmd := exec.Command(Editor, baseDir+a.Name+"/"+"PKGBUILD")
|
editcmd := exec.Command(Editor, dir.String()+"PKGBUILD")
|
||||||
editcmd.Stdout = os.Stdout
|
editcmd.Stdout = os.Stdout
|
||||||
editcmd.Stderr = os.Stderr
|
editcmd.Stderr = os.Stderr
|
||||||
editcmd.Stdin = os.Stdin
|
editcmd.Stdin = os.Stdin
|
||||||
err = editcmd.Run()
|
err = editcmd.Run()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
err = os.Chdir(baseDir + a.Name)
|
err = os.Chdir(dir.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
50
pacman.go
50
pacman.go
@ -36,24 +36,56 @@ func readConfig(pacmanconf string) (conf alpm.PacmanConfig, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// InstallPackage handles package install
|
// InstallPackage handles package install
|
||||||
func InstallPackage(pkg string, conf *alpm.PacmanConfig, flags string) error {
|
func InstallPackage(pkgs []string, conf *alpm.PacmanConfig, flags string) error {
|
||||||
if found, err := aur.IspkgInRepo(pkg, conf); found {
|
h, err := conf.CreateHandle()
|
||||||
|
defer h.Release()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var cmd *exec.Cmd
|
dbList, err := h.SyncDbs()
|
||||||
if flags == "" {
|
if err != nil {
|
||||||
cmd = exec.Command("sudo", "pacman", "-S", pkg)
|
return err
|
||||||
} else {
|
|
||||||
cmd = exec.Command("sudo", "pacman", "-S", pkg, flags)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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.Stdout = os.Stdout
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
err = cmd.Run()
|
err = cmd.Run()
|
||||||
} else {
|
}
|
||||||
err = aur.Install(pkg, BuildDir, conf, flags)
|
|
||||||
|
for _, aurpkg := range foreign {
|
||||||
|
err = aur.Install(aurpkg, BuildDir, conf, flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
28
yay.go
28
yay.go
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
@ -28,20 +29,14 @@ func operation() (operation string, err error) {
|
|||||||
return "yogurt", nil
|
return "yogurt", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func packages() (packages string, err error) {
|
func packages() ([]string, error) {
|
||||||
var ps []string
|
var ps []string
|
||||||
for _, arg := range os.Args[1:] {
|
for _, arg := range os.Args[1:] {
|
||||||
if arg[0] != '-' {
|
if arg[0] != '-' {
|
||||||
ps = append(ps, arg)
|
ps = append(ps, arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return ps, nil
|
||||||
if len(ps) == 0 {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
packages = strings.Join(ps, " ")
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func flags() (flags string, err error) {
|
func flags() (flags string, err error) {
|
||||||
@ -62,6 +57,7 @@ func flags() (flags string, err error) {
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var err error
|
var err error
|
||||||
|
var pkgstring bytes.Buffer
|
||||||
conf, err := readConfig(PacmanConf)
|
conf, err := readConfig(PacmanConf)
|
||||||
|
|
||||||
op, err := operation()
|
op, err := operation()
|
||||||
@ -70,21 +66,31 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
pkg, _ := packages()
|
pkgs, _ := packages()
|
||||||
|
|
||||||
flag, _ := flags()
|
flag, _ := flags()
|
||||||
|
|
||||||
switch op {
|
switch op {
|
||||||
case "-Ss":
|
case "-Ss":
|
||||||
|
for _, pkg := range pkgs {
|
||||||
err = searchMode(pkg, &conf)
|
err = searchMode(pkg, &conf)
|
||||||
|
}
|
||||||
case "-S":
|
case "-S":
|
||||||
err = InstallPackage(pkg, &conf, flag)
|
err = InstallPackage(pkgs, &conf, flag)
|
||||||
case "-Syu":
|
case "-Syu":
|
||||||
err = updateAndInstall(&conf, flag)
|
err = updateAndInstall(&conf, flag)
|
||||||
case "yogurt":
|
case "yogurt":
|
||||||
|
for _, pkg := range pkgs {
|
||||||
err = searchAndInstall(pkg, &conf, flag)
|
err = searchAndInstall(pkg, &conf, flag)
|
||||||
|
}
|
||||||
default:
|
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 {
|
if err != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user