mirror of
https://github.com/Jguer/yay.git
synced 2025-10-07 00:14:22 -04:00
The orphanage update. Changes to prints and AUR install for easier readibility and performance
This commit is contained in:
parent
a8b6b7ecb3
commit
c5b7baa994
53
actions.go
53
actions.go
@ -13,9 +13,6 @@ import (
|
|||||||
pac "github.com/jguer/yay/pacman"
|
pac "github.com/jguer/yay/pacman"
|
||||||
)
|
)
|
||||||
|
|
||||||
// BuildDir is the root for package building
|
|
||||||
const BuildDir string = "/tmp/yaytmp/"
|
|
||||||
|
|
||||||
// SearchMode is search without numbers.
|
// SearchMode is search without numbers.
|
||||||
const SearchMode int = -1
|
const SearchMode int = -1
|
||||||
|
|
||||||
@ -25,6 +22,9 @@ var SortMode = DownTop
|
|||||||
// NoConfirm ignores prompts.
|
// NoConfirm ignores prompts.
|
||||||
var NoConfirm = false
|
var NoConfirm = false
|
||||||
|
|
||||||
|
// BaseDir is the default building directory for yay
|
||||||
|
var BaseDir = "/tmp/yaytmp/"
|
||||||
|
|
||||||
// Determines NumberMenu and Search Order
|
// Determines NumberMenu and Search Order
|
||||||
const (
|
const (
|
||||||
DownTop = iota
|
DownTop = iota
|
||||||
@ -37,6 +37,7 @@ func Config() {
|
|||||||
pac.SortMode = SortMode
|
pac.SortMode = SortMode
|
||||||
aur.NoConfirm = NoConfirm
|
aur.NoConfirm = NoConfirm
|
||||||
pac.NoConfirm = NoConfirm
|
pac.NoConfirm = NoConfirm
|
||||||
|
aur.BaseDir = BaseDir
|
||||||
}
|
}
|
||||||
|
|
||||||
// NumberMenu presents a CLI for selecting packages to install.
|
// NumberMenu presents a CLI for selecting packages to install.
|
||||||
@ -73,7 +74,7 @@ func NumberMenu(pkgName string, flags []string) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var aurInstall []aur.Result
|
var aurInstall []string
|
||||||
var repoInstall []string
|
var repoInstall []string
|
||||||
result := strings.Fields(numberString)
|
result := strings.Fields(numberString)
|
||||||
for _, numS := range result {
|
for _, numS := range result {
|
||||||
@ -87,9 +88,9 @@ func NumberMenu(pkgName string, flags []string) (err error) {
|
|||||||
continue
|
continue
|
||||||
} else if num > nR-1 {
|
} else if num > nR-1 {
|
||||||
if aur.SortMode == aur.DownTop {
|
if aur.SortMode == aur.DownTop {
|
||||||
aurInstall = append(aurInstall, a[nA+nR-num-1])
|
aurInstall = append(aurInstall, a[nA+nR-num-1].Name)
|
||||||
} else {
|
} else {
|
||||||
aurInstall = append(aurInstall, a[num-nR])
|
aurInstall = append(aurInstall, a[num-nR].Name)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if aur.SortMode == aur.DownTop {
|
if aur.SortMode == aur.DownTop {
|
||||||
@ -104,14 +105,24 @@ func NumberMenu(pkgName string, flags []string) (err error) {
|
|||||||
pac.Install(repoInstall, flags)
|
pac.Install(repoInstall, flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, aurpkg := range aurInstall {
|
if len(aurInstall) != 0 {
|
||||||
err = aurpkg.Install(BuildDir, flags)
|
q, n, err := aur.MultiInfo(aurInstall)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if n != len(aurInstall) {
|
||||||
|
aur.MissingPackage(aurInstall, q)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, aurpkg := range q {
|
||||||
|
err = aurpkg.Install(flags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Do not abandon program, we might still be able to install the rest
|
// Do not abandon program, we might still be able to install the rest
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Install handles package installs
|
// Install handles package installs
|
||||||
@ -129,7 +140,7 @@ func Install(pkgs []string, flags []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, aurpkg := range q {
|
for _, aurpkg := range q {
|
||||||
err = aurpkg.Install(BuildDir, flags)
|
err = aurpkg.Install(flags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error installing", aurpkg.Name, ":", err)
|
fmt.Println("Error installing", aurpkg.Name, ":", err)
|
||||||
}
|
}
|
||||||
@ -141,7 +152,7 @@ func Install(pkgs []string, flags []string) error {
|
|||||||
// Upgrade handles updating the cache and installing updates.
|
// Upgrade handles updating the cache and installing updates.
|
||||||
func Upgrade(flags []string) error {
|
func Upgrade(flags []string) error {
|
||||||
errp := pac.UpdatePackages(flags)
|
errp := pac.UpdatePackages(flags)
|
||||||
erra := aur.Upgrade(BuildDir, flags)
|
erra := aur.Upgrade(flags)
|
||||||
|
|
||||||
if errp != nil {
|
if errp != nil {
|
||||||
return errp
|
return errp
|
||||||
@ -179,7 +190,7 @@ func LocalStatistics(version string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, foreign, _ := pac.ForeignPackages()
|
foreignS, foreign, _ := pac.ForeignPackages()
|
||||||
|
|
||||||
fmt.Printf("\n Yay version r%s\n", version)
|
fmt.Printf("\n Yay version r%s\n", version)
|
||||||
fmt.Println("\x1B[1;34m===========================================\x1B[0m")
|
fmt.Println("\x1B[1;34m===========================================\x1B[0m")
|
||||||
@ -195,6 +206,23 @@ func LocalStatistics(version string) error {
|
|||||||
}
|
}
|
||||||
fmt.Println("\x1B[1;34m===========================================\x1B[0m")
|
fmt.Println("\x1B[1;34m===========================================\x1B[0m")
|
||||||
|
|
||||||
|
keys := make([]string, len(foreignS))
|
||||||
|
i := 0
|
||||||
|
for k := range foreignS {
|
||||||
|
keys[i] = k
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
q, _, err := aur.MultiInfo(keys)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, res := range q {
|
||||||
|
if res.Maintainer == "" {
|
||||||
|
fmt.Printf("\x1b[1;31;40mWarning: \x1B[1;33;40m%s\x1b[0;;40m is orphaned.\x1b[0m\n", res.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,5 +281,4 @@ func PassToPacman(op string, pkgs []string, flags []string) error {
|
|||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
err := cmd.Run()
|
err := cmd.Run()
|
||||||
return err
|
return err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
127
aur/aur.go
127
aur/aur.go
@ -1,7 +1,6 @@
|
|||||||
package aur
|
package aur
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
@ -29,6 +28,9 @@ var NoConfirm = false
|
|||||||
// SortMode determines top down package or down top package display
|
// SortMode determines top down package or down top package display
|
||||||
var SortMode = DownTop
|
var SortMode = DownTop
|
||||||
|
|
||||||
|
// BaseDir is the default building directory for yay
|
||||||
|
var BaseDir = "/tmp/yaytmp/"
|
||||||
|
|
||||||
// Describes Sorting method for numberdisplay
|
// Describes Sorting method for numberdisplay
|
||||||
const (
|
const (
|
||||||
DownTop = iota
|
DownTop = iota
|
||||||
@ -91,6 +93,10 @@ func (q Query) PrintSearch(start int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
toprint += fmt.Sprintf("\x1b[1m%s/\x1b[33m%s \x1b[36m%s \x1b[0m(%d) ", "aur", res.Name, res.Version, res.NumVotes)
|
toprint += fmt.Sprintf("\x1b[1m%s/\x1b[33m%s \x1b[36m%s \x1b[0m(%d) ", "aur", res.Name, res.Version, res.NumVotes)
|
||||||
|
if res.Maintainer == "" {
|
||||||
|
toprint += fmt.Sprintf("\x1b[31;40m(Orphaned)\x1b[0m ")
|
||||||
|
}
|
||||||
|
|
||||||
if res.Installed == true {
|
if res.Installed == true {
|
||||||
toprint += fmt.Sprintf("\x1b[32;40mInstalled\x1b[0m")
|
toprint += fmt.Sprintf("\x1b[32;40mInstalled\x1b[0m")
|
||||||
}
|
}
|
||||||
@ -167,7 +173,7 @@ func MultiInfo(pkgS []string) (Query, int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Install sends system commands to make and install a package from pkgName
|
// Install sends system commands to make and install a package from pkgName
|
||||||
func Install(pkg string, baseDir string, flags []string) (err error) {
|
func Install(pkg string, flags []string) (err error) {
|
||||||
q, n, err := Info(pkg)
|
q, n, err := Info(pkg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -177,12 +183,12 @@ func Install(pkg string, baseDir string, flags []string) (err error) {
|
|||||||
return fmt.Errorf("Package %s does not exist", pkg)
|
return fmt.Errorf("Package %s does not exist", pkg)
|
||||||
}
|
}
|
||||||
|
|
||||||
q[0].Install(baseDir, flags)
|
q[0].Install(flags)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Upgrade tries to update every foreign package installed in the system
|
// Upgrade tries to update every foreign package installed in the system
|
||||||
func Upgrade(baseDir string, flags []string) error {
|
func Upgrade(flags []string) error {
|
||||||
fmt.Println("\x1b[1;36;1m::\x1b[0m\x1b[1m Starting AUR upgrade...\x1b[0m")
|
fmt.Println("\x1b[1;36;1m::\x1b[0m\x1b[1m Starting AUR upgrade...\x1b[0m")
|
||||||
|
|
||||||
foreign, n, err := pacman.ForeignPackages()
|
foreign, n, err := pacman.ForeignPackages()
|
||||||
@ -221,93 +227,87 @@ func Upgrade(baseDir string, flags []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Install updated packages
|
// Install updated packages
|
||||||
if !NoConfirm {
|
if !continueTask("Proceed with upgrade?", "n & N") {
|
||||||
fmt.Println("\x1b[1m\x1b[32m==> Proceed with upgrade\x1b[0m\x1b[1m (Y/n)\x1b[0m")
|
|
||||||
var response string
|
|
||||||
fmt.Scanln(&response)
|
|
||||||
if strings.ContainsAny(response, "n & N") {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for _, pkg := range outdated {
|
for _, pkg := range outdated {
|
||||||
pkg.Install(baseDir, flags)
|
pkg.Install(flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Install handles install from Result
|
func (a *Result) setupWorkspace() (err error) {
|
||||||
func (a *Result) Install(baseDir string, flags []string) (err error) {
|
|
||||||
fmt.Printf("\x1b[1m\x1b[32m==> Installing\x1b[33m %s\x1b[0m\n", a.Name)
|
|
||||||
|
|
||||||
// No need to use filepath.separators because it won't run on inferior platforms
|
// No need to use filepath.separators because it won't run on inferior platforms
|
||||||
err = os.MkdirAll(baseDir+"builds", 0755)
|
err = os.MkdirAll(BaseDir+"builds", 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
tarLocation := baseDir + a.Name + ".tar.gz"
|
tarLocation := BaseDir + a.PackageBase + ".tar.gz"
|
||||||
defer os.Remove(baseDir + a.Name + ".tar.gz")
|
defer os.Remove(BaseDir + a.PackageBase + ".tar.gz")
|
||||||
|
|
||||||
err = downloadFile(tarLocation, BaseURL+a.URLPath)
|
err = downloadFile(tarLocation, BaseURL+a.URLPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = exec.Command(TarBin, "-xf", tarLocation, "-C", baseDir).Run()
|
err = exec.Command(TarBin, "-xf", tarLocation, "-C", BaseDir).Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer os.RemoveAll(baseDir + a.Name)
|
|
||||||
|
|
||||||
var response string
|
return
|
||||||
var dir bytes.Buffer
|
}
|
||||||
dir.WriteString(baseDir)
|
|
||||||
dir.WriteString(a.Name)
|
|
||||||
dir.WriteString("/")
|
|
||||||
|
|
||||||
if !NoConfirm {
|
// Install handles install from Info Result
|
||||||
fmt.Println("\x1b[1m\x1b[32m==> Edit PKGBUILD?\x1b[0m\x1b[1m (y/N)\x1b[0m")
|
func (a *Result) Install(flags []string) (err error) {
|
||||||
fmt.Scanln(&response)
|
fmt.Printf("\x1b[1;32m==> Installing\x1b[33m %s\x1b[0m\n", a.Name)
|
||||||
if strings.ContainsAny(response, "y & Y") {
|
if a.Maintainer == "" {
|
||||||
editcmd := exec.Command(Editor, dir.String()+"PKGBUILD")
|
fmt.Println("\x1b[1;31;40m==> Warning:\x1b[0;;40m This package is orphaned.\x1b[0m")
|
||||||
editcmd.Stdout = os.Stdout
|
}
|
||||||
editcmd.Stderr = os.Stderr
|
dir := BaseDir + a.PackageBase + "/"
|
||||||
editcmd.Stdin = os.Stdin
|
|
||||||
|
if _, err = os.Stat(dir); os.IsNotExist(err) {
|
||||||
|
if err = a.setupWorkspace(); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// defer os.RemoveAll(BaseDir + a.PackageBase)
|
||||||
|
|
||||||
|
if !continueTask("Edit PKGBUILD?", "y & Y") {
|
||||||
|
editcmd := exec.Command(Editor, dir+"PKGBUILD")
|
||||||
|
editcmd.Stdin, editcmd.Stdout, editcmd.Stderr = os.Stdin, os.Stdout, os.Stderr
|
||||||
editcmd.Run()
|
editcmd.Run()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
aurDeps, repoDeps, err := a.Dependencies()
|
aurDeps, repoDeps, err := a.Dependencies()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
printDependencies(aurDeps, repoDeps)
|
printDependencies(aurDeps, repoDeps)
|
||||||
if !NoConfirm && (len(aurDeps) != 0 || len(repoDeps) != 0) {
|
|
||||||
fmt.Println("\x1b[1m\x1b[32m==> Continue?\x1b[0m\x1b[1m (Y/n)\x1b[0m")
|
if len(aurDeps) != 0 || len(repoDeps) != 0 {
|
||||||
fmt.Scanln(&response)
|
if !continueTask("Continue?", "n & N") {
|
||||||
if strings.ContainsAny(response, "n & N") {
|
|
||||||
return fmt.Errorf("user did not like the dependencies")
|
return fmt.Errorf("user did not like the dependencies")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
aurQ, n, err := MultiInfo(aurDeps)
|
aurQ, n, err := MultiInfo(aurDeps)
|
||||||
if n != len(aurDeps) {
|
if n != len(aurDeps) {
|
||||||
missingDeps(aurDeps, aurQ)
|
MissingPackage(aurDeps, aurQ)
|
||||||
if !NoConfirm {
|
if !continueTask("Continue?", "n & N") {
|
||||||
fmt.Println("\x1b[1m\x1b[32m==> Continue?\x1b[0m\x1b[1m (Y/n)\x1b[0m")
|
|
||||||
fmt.Scanln(&response)
|
|
||||||
if strings.ContainsAny(response, "n & N") {
|
|
||||||
return fmt.Errorf("unable to install dependencies")
|
return fmt.Errorf("unable to install dependencies")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Handle AUR dependencies first
|
// Handle AUR dependencies first
|
||||||
for _, dep := range aurQ {
|
for _, dep := range aurQ {
|
||||||
errA := dep.Install(baseDir, []string{"--asdeps", "--noconfirm"})
|
errA := dep.Install([]string{"--asdeps", "--noconfirm"})
|
||||||
if errA != nil {
|
if errA != nil {
|
||||||
return errA
|
return errA
|
||||||
}
|
}
|
||||||
@ -322,7 +322,7 @@ func (a *Result) Install(baseDir string, flags []string) (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = os.Chdir(dir.String())
|
err = os.Chdir(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -332,17 +332,37 @@ func (a *Result) Install(baseDir string, flags []string) (err error) {
|
|||||||
args = append(args, "-sri")
|
args = append(args, "-sri")
|
||||||
args = append(args, flags...)
|
args = append(args, flags...)
|
||||||
makepkgcmd = exec.Command(MakepkgBin, args...)
|
makepkgcmd = exec.Command(MakepkgBin, args...)
|
||||||
makepkgcmd.Stdout = os.Stdout
|
makepkgcmd.Stdin, makepkgcmd.Stdout, makepkgcmd.Stderr = os.Stdin, os.Stdout, os.Stderr
|
||||||
makepkgcmd.Stderr = os.Stderr
|
|
||||||
makepkgcmd.Stdin = os.Stdin
|
|
||||||
err = makepkgcmd.Run()
|
err = makepkgcmd.Run()
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func continueTask(s string, def string) (cont bool) {
|
||||||
|
if NoConfirm {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
var postFix string
|
||||||
|
|
||||||
|
if def == "n & N" {
|
||||||
|
postFix = "(Y/n)"
|
||||||
|
} else {
|
||||||
|
postFix = "(y/N)"
|
||||||
|
}
|
||||||
|
|
||||||
|
var response string
|
||||||
|
fmt.Printf("\x1b[1;32m==> %s\x1b[1;37m %s\x1b[0m\n", s, postFix)
|
||||||
|
|
||||||
|
fmt.Scanln(&response)
|
||||||
|
if strings.ContainsAny(response, def) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func printDependencies(aurDeps []string, repoDeps []string) {
|
func printDependencies(aurDeps []string, repoDeps []string) {
|
||||||
if len(repoDeps) != 0 {
|
if len(repoDeps) != 0 {
|
||||||
fmt.Print("\x1b[1m\x1b[32m==> Repository dependencies: \x1b[0m")
|
fmt.Print("\x1b[1;32m==> Repository dependencies: \x1b[0m")
|
||||||
for _, repoD := range repoDeps {
|
for _, repoD := range repoDeps {
|
||||||
fmt.Print("\x1b[33m", repoD, " \x1b[0m")
|
fmt.Print("\x1b[33m", repoD, " \x1b[0m")
|
||||||
}
|
}
|
||||||
@ -350,7 +370,7 @@ func printDependencies(aurDeps []string, repoDeps []string) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
if len(repoDeps) != 0 {
|
if len(repoDeps) != 0 {
|
||||||
fmt.Print("\x1b[1m\x1b[32m==> AUR dependencies: \x1b[0m")
|
fmt.Print("\x1b[1;32m==> AUR dependencies: \x1b[0m")
|
||||||
for _, aurD := range aurDeps {
|
for _, aurD := range aurDeps {
|
||||||
fmt.Print("\x1b[33m", aurD, " \x1b[0m")
|
fmt.Print("\x1b[33m", aurD, " \x1b[0m")
|
||||||
}
|
}
|
||||||
@ -358,7 +378,8 @@ func printDependencies(aurDeps []string, repoDeps []string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func missingDeps(aurDeps []string, aurQ Query) {
|
// MissingPackage warns if the Query was unable to find a package
|
||||||
|
func MissingPackage(aurDeps []string, aurQ Query) {
|
||||||
for _, depName := range aurDeps {
|
for _, depName := range aurDeps {
|
||||||
found := false
|
found := false
|
||||||
for _, dep := range aurQ {
|
for _, dep := range aurQ {
|
||||||
|
@ -60,7 +60,7 @@ func TestInfo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestUpgrade(t *testing.T) {
|
func TestUpgrade(t *testing.T) {
|
||||||
err := Upgrade("/tmp/yaytmp", []string{})
|
err := Upgrade([]string{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Expected err to be nil but it was %s", err)
|
t.Fatalf("Expected err to be nil but it was %s", err)
|
||||||
}
|
}
|
||||||
@ -68,6 +68,6 @@ func TestUpgrade(t *testing.T) {
|
|||||||
|
|
||||||
func BenchmarkUpgrade(b *testing.B) {
|
func BenchmarkUpgrade(b *testing.B) {
|
||||||
for n := 0; n < b.N; n++ {
|
for n := 0; n < b.N; n++ {
|
||||||
Upgrade("/tmp/yaytmp", []string{})
|
Upgrade([]string{})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user