1
0
mirror of https://github.com/Jguer/yay.git synced 2025-08-19 13:41:18 +02:00

Refractoring

This commit is contained in:
Jguer 2016-11-29 01:53:17 +00:00
parent 82615c858f
commit 6e0830ce3b
3 changed files with 87 additions and 82 deletions

View File

@ -13,7 +13,14 @@ import (
"github.com/jguer/yay/aur" "github.com/jguer/yay/aur"
) )
func searchAndInstall(pkgName string, conf *alpm.PacmanConfig, flags []string) (err error) { // BuildDir is the root for package building
const BuildDir string = "/tmp/yaytmp/"
// SearchMode is search without numbers.
const SearchMode int = -1
// NumberMenu presents a CLI for selecting packages to install.
func NumberMenu(pkgName string, flags []string) (err error) {
var num int var num int
var numberString string var numberString string
var args []string var args []string
@ -25,7 +32,7 @@ func searchAndInstall(pkgName string, conf *alpm.PacmanConfig, flags []string) (
} }
if len(r.Results) == 0 && a.Resultcount == 0 { if len(r.Results) == 0 && a.Resultcount == 0 {
return fmt.Errorf("No Packages match search.") return fmt.Errorf("no Packages match search")
} }
r.PrintSearch(0) r.PrintSearch(0)
a.PrintSearch(len(r.Results)) a.PrintSearch(len(r.Results))
@ -78,8 +85,62 @@ func searchAndInstall(pkgName string, conf *alpm.PacmanConfig, flags []string) (
return return
} }
// updateAndInstall handles updating the cache and installing updates // Install handles package installs
func updateAndInstall(conf *alpm.PacmanConfig, flags []string) error { func Install(pkgs []string, 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
}
}
if !found {
foreign = append(foreign, pkg)
}
}
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()
}
for _, aurpkg := range foreign {
err = aur.Install(aurpkg, BuildDir, conf, flags)
}
return nil
}
// Upgrade handles updating the cache and installing updates.
func Upgrade(flags []string) error {
errp := UpdatePackages(flags) errp := UpdatePackages(flags)
erra := aur.UpdatePackages(BuildDir, conf, flags) erra := aur.UpdatePackages(BuildDir, conf, flags)
@ -90,7 +151,8 @@ func updateAndInstall(conf *alpm.PacmanConfig, flags []string) error {
return erra return erra
} }
func searchMode(pkg string, conf *alpm.PacmanConfig) (err error) { // Search presents a query to the local repos and to the AUR.
func Search(pkg string) (err error) {
a, err := aur.Search(pkg, true) a, err := aur.Search(pkg, true)
if err != nil { if err != nil {
return err return err
@ -102,7 +164,8 @@ func searchMode(pkg string, conf *alpm.PacmanConfig) (err error) {
return nil return nil
} }
func stats(conf *alpm.PacmanConfig) error { // LocalStatistics returns installed packages statistics.
func LocalStatistics() error {
var tS int64 // TotalSize var tS int64 // TotalSize
var nPkg int var nPkg int
var ePkg int var ePkg int
@ -148,15 +211,14 @@ func stats(conf *alpm.PacmanConfig) error {
} }
} }
fmt.Printf("\n Yay version r%s\n", version)
fmt.Println("\x1B[1;34m===========================================\x1B[0m") fmt.Println("\x1B[1;34m===========================================\x1B[0m")
fmt.Printf("\x1B[1;32mTotal installed packages: \x1B[0;33m%d\x1B[0m\n", nPkg) fmt.Printf("\x1B[1;32mTotal installed packages: \x1B[0;33m%d\x1B[0m\n", nPkg)
fmt.Printf("\x1B[1;32mExplicitly installed packages: \x1B[0;33m%d\x1B[0m\n", ePkg) fmt.Printf("\x1B[1;32mExplicitly installed packages: \x1B[0;33m%d\x1B[0m\n", ePkg)
fmt.Printf("\x1B[1;32mTotal Size occupied by packages: \x1B[0;33m%s\x1B[0m\n", Size(tS)) fmt.Printf("\x1B[1;32mTotal Size occupied by packages: \x1B[0;33m%s\x1B[0m\n", size(tS))
fmt.Println("\x1B[1;34m===========================================\x1B[0m") fmt.Println("\x1B[1;34m===========================================\x1B[0m")
fmt.Println("\x1B[1;32mTen biggest packages\x1B[0m") fmt.Println("\x1B[1;32mTen biggest packages\x1B[0m")
for _, pkg := range pkgs { for _, pkg := range pkgs {
fmt.Printf("%s: \x1B[0;33m%s\x1B[0m\n", pkg.Name(), Size(pkg.ISize())) fmt.Printf("%s: \x1B[0;33m%s\x1B[0m\n", pkg.Name(), size(pkg.ISize()))
} }
fmt.Println("\x1B[1;34m===========================================\x1B[0m") fmt.Println("\x1B[1;34m===========================================\x1B[0m")
@ -176,7 +238,7 @@ func countSize(s int64, i float64) float64 {
// Size return a formated string from file size // Size return a formated string from file size
// Function by pyk https://github.com/pyk/byten // Function by pyk https://github.com/pyk/byten
func Size(s int64) string { func size(s int64) string {
symbols := []string{"B", "KB", "MB", "GB", "TB", "PB", "EB"} symbols := []string{"B", "KB", "MB", "GB", "TB", "PB", "EB"}
i := index(s) i := index(s)

View File

@ -3,19 +3,10 @@ package main
import ( import (
"fmt" "fmt"
"os" "os"
"github.com/jguer/yay"
) )
var version string
// PacmanConf describes the default pacman config file
const PacmanConf string = "/etc/pacman.conf"
// BuildDir is the root for package building
const BuildDir string = "/tmp/yaytmp/"
// SearchMode is search without numbers.
const SearchMode int = -1
func usage() { func usage() {
fmt.Println(`usage: yay <operation> [...] fmt.Println(`usage: yay <operation> [...]
operations: operations:
@ -36,7 +27,7 @@ func usage() {
func parser() (op string, options []string, packages []string, err error) { func parser() (op string, options []string, packages []string, err error) {
if len(os.Args) < 2 { if len(os.Args) < 2 {
err = fmt.Errorf("No operation specified.") err = fmt.Errorf("no operation specified")
return return
} }
@ -65,8 +56,6 @@ func parser() (op string, options []string, packages []string, err error) {
} }
func main() { func main() {
var err error
conf, err := readConfig(PacmanConf)
op, options, pkgs, err := parser() op, options, pkgs, err := parser()
if err != nil { if err != nil {
@ -76,7 +65,7 @@ func main() {
switch op { switch op {
case "-Qstats": case "-Qstats":
err = stats(&conf) err = yay.LocalStatistics()
case "-Ss": case "-Ss":
for _, pkg := range pkgs { for _, pkg := range pkgs {
err = searchMode(pkg, &conf) err = searchMode(pkg, &conf)
@ -84,10 +73,10 @@ func main() {
case "-S": case "-S":
err = InstallPackage(pkgs, &conf, options) err = InstallPackage(pkgs, &conf, options)
case "-Syu", "-Suy": case "-Syu", "-Suy":
err = updateAndInstall(&conf, options) err = yay.Upgrade(options)
case "yogurt": case "yogurt":
for _, pkg := range pkgs { for _, pkg := range pkgs {
err = searchAndInstall(pkg, &conf, options) err = yay.NumberMenu(pkg, &conf, options)
break break
} }
case "--help", "-h": case "--help", "-h":

View File

@ -7,7 +7,6 @@ import (
"strings" "strings"
"github.com/jguer/go-alpm" "github.com/jguer/go-alpm"
"github.com/jguer/yay/aur"
) )
// RepoSearch describes a Repository search. // RepoSearch describes a Repository search.
@ -24,6 +23,15 @@ type Result struct {
Installed bool Installed bool
} }
// PacmanConf describes the default pacman config file
const PacmanConf string = "/etc/pacman.conf"
var conf *alpm.PacmanConfig
func init() {
*conf, _ = readConfig(PacmanConf)
}
func readConfig(pacmanconf string) (conf alpm.PacmanConfig, err error) { func readConfig(pacmanconf string) (conf alpm.PacmanConfig, err error) {
file, err := os.Open(pacmanconf) file, err := os.Open(pacmanconf)
if err != nil { if err != nil {
@ -36,60 +44,6 @@ func readConfig(pacmanconf string) (conf alpm.PacmanConfig, err error) {
return return
} }
// InstallPackage handles package install
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
}
}
if !found {
foreign = append(foreign, pkg)
}
}
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()
}
for _, aurpkg := range foreign {
err = aur.Install(aurpkg, BuildDir, conf, flags)
}
return nil
}
// UpdatePackages handles cache update and upgrade // UpdatePackages handles cache update and upgrade
func UpdatePackages(flags []string) error { func UpdatePackages(flags []string) error {
var cmd *exec.Cmd var cmd *exec.Cmd