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

View File

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

View File

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

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