Explorar o código

Multi package install

Jguer %!s(int64=8) %!d(string=hai) anos
pai
achega
1c6bef93db
Modificáronse 4 ficheiros con 94 adicións e 36 borrados
  1. 13 1
      actions.go
  2. 19 11
      aur/aur.go
  3. 43 11
      pacman.go
  4. 19 13
      yay.go

+ 13 - 1
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)

+ 19 - 11
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()
-	}
-
-	err = os.Chdir(baseDir + a.Name)
+	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)
+        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
 	}

+ 43 - 11
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

+ 19 - 13
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 {