Multi package install

This commit is contained in:
Jguer 2016-10-02 21:50:23 +01:00
parent 5570351466
commit 1c6bef93db
4 changed files with 93 additions and 35 deletions

View file

@ -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)

View file

@ -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
}

View file

@ -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
View file

@ -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 {