mirror of
https://github.com/Jguer/yay
synced 2024-09-14 13:51:12 +00:00
Added PacmanUpgradeList
This commit is contained in:
parent
baf712d062
commit
cb6d4af881
43
actions.go
43
actions.go
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
alpm "github.com/jguer/go-alpm"
|
||||||
aur "github.com/jguer/yay/aur"
|
aur "github.com/jguer/yay/aur"
|
||||||
"github.com/jguer/yay/config"
|
"github.com/jguer/yay/config"
|
||||||
pac "github.com/jguer/yay/pacman"
|
pac "github.com/jguer/yay/pacman"
|
||||||
|
@ -36,11 +37,45 @@ func upgrade(flags []string) error {
|
||||||
return errp
|
return errp
|
||||||
}
|
}
|
||||||
|
|
||||||
aurUpList, err := aur.UpgradeList(flags)
|
pacC := make(chan []alpm.Package)
|
||||||
if err != nil {
|
aurC := make(chan []aur.Upgrade)
|
||||||
return err
|
errC := make(chan error)
|
||||||
|
var pacUp []alpm.Package
|
||||||
|
var aurUp []aur.Upgrade
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
pacUpList, err := pac.UpgradeList()
|
||||||
|
errC <- err
|
||||||
|
pacC <- pacUpList
|
||||||
|
}()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
aurUpList, err := aur.UpgradeList()
|
||||||
|
errC <- err
|
||||||
|
aurC <- aurUpList
|
||||||
|
}()
|
||||||
|
|
||||||
|
var i = 0
|
||||||
|
loop:
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case pacUp = <-pacC:
|
||||||
|
i++
|
||||||
|
case aurUp = <-aurC:
|
||||||
|
i++
|
||||||
|
case err := <-errC:
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if i == 2 {
|
||||||
|
break loop
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fmt.Printf("%+v\n", aurUpList)
|
|
||||||
|
fmt.Printf("%+v\n", aurUp)
|
||||||
|
fmt.Printf("%+v\n", pacUp)
|
||||||
// erra := aur.Upgrade(flags)
|
// erra := aur.Upgrade(flags)
|
||||||
|
|
||||||
// if errp != nil {
|
// if errp != nil {
|
||||||
|
|
150
aur/aur.go
150
aur/aur.go
|
@ -2,7 +2,6 @@ package aur
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
@ -132,13 +131,13 @@ func develUpgrade(foreign map[string]alpm.Package, flags []string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type upgrade struct {
|
type Upgrade struct {
|
||||||
Name string
|
Name string
|
||||||
LocalVersion string
|
LocalVersion string
|
||||||
RemoteVersion string
|
RemoteVersion string
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpgradeList(flags []string) (toUpgrade []upgrade, err error) {
|
func UpgradeList() (toUpgrade []Upgrade, err error) {
|
||||||
foreign, foreignNames, err := pacman.ForeignPackageList()
|
foreign, foreignNames, err := pacman.ForeignPackageList()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -149,7 +148,7 @@ func UpgradeList(flags []string) (toUpgrade []upgrade, err error) {
|
||||||
var routines int
|
var routines int
|
||||||
var routineDone int
|
var routineDone int
|
||||||
|
|
||||||
packageC := make(chan upgrade)
|
packageC := make(chan Upgrade)
|
||||||
done := make(chan bool)
|
done := make(chan bool)
|
||||||
|
|
||||||
for i := len(foreign); i != 0; i = j {
|
for i := len(foreign); i != 0; i = j {
|
||||||
|
@ -158,6 +157,7 @@ func UpgradeList(flags []string) (toUpgrade []upgrade, err error) {
|
||||||
j = 0
|
j = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Split requests so AUR RPC doesn't get mad at us.
|
||||||
qtemp, err = rpc.Info(foreignNames[j:i])
|
qtemp, err = rpc.Info(foreignNames[j:i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -179,7 +179,7 @@ func UpgradeList(flags []string) (toUpgrade []upgrade, err error) {
|
||||||
} else if qtemp[x].Name == local[i].Name() {
|
} else if qtemp[x].Name == local[i].Name() {
|
||||||
if (config.YayConf.TimeUpdate && (int64(qtemp[x].LastModified) > local[i].BuildDate().Unix())) ||
|
if (config.YayConf.TimeUpdate && (int64(qtemp[x].LastModified) > local[i].BuildDate().Unix())) ||
|
||||||
(alpm.VerCmp(local[i].Version(), qtemp[x].Version) < 0) {
|
(alpm.VerCmp(local[i].Version(), qtemp[x].Version) < 0) {
|
||||||
packageC <- upgrade{qtemp[x].Name, local[i].Version(), qtemp[x].Version}
|
packageC <- Upgrade{qtemp[x].Name, local[i].Version(), qtemp[x].Version}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -205,86 +205,86 @@ func UpgradeList(flags []string) (toUpgrade []upgrade, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Upgrade tries to update every foreign package installed in the system
|
// Upgrade tries to update every foreign package installed in the system
|
||||||
func Upgrade(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, err := pacman.ForeignPackages()
|
// foreign, err := pacman.ForeignPackages()
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
keys := make([]string, len(foreign))
|
// keys := make([]string, len(foreign))
|
||||||
i := 0
|
// i := 0
|
||||||
for k := range foreign {
|
// for k := range foreign {
|
||||||
keys[i] = k
|
// keys[i] = k
|
||||||
i++
|
// i++
|
||||||
}
|
// }
|
||||||
|
|
||||||
if config.YayConf.Devel {
|
// if config.YayConf.Devel {
|
||||||
err := develUpgrade(foreign, flags)
|
// err := develUpgrade(foreign, flags)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
fmt.Println(err)
|
// fmt.Println(err)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
var q Query
|
// var q Query
|
||||||
var j int
|
// var j int
|
||||||
for i = len(keys); i != 0; i = j {
|
// for i = len(keys); i != 0; i = j {
|
||||||
j = i - config.YayConf.RequestSplitN
|
// j = i - config.YayConf.RequestSplitN
|
||||||
if j < 0 {
|
// if j < 0 {
|
||||||
j = 0
|
// j = 0
|
||||||
}
|
// }
|
||||||
qtemp, err := rpc.Info(keys[j:i])
|
// qtemp, err := rpc.Info(keys[j:i])
|
||||||
q = append(q, qtemp...)
|
// q = append(q, qtemp...)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
var buffer bytes.Buffer
|
// var buffer bytes.Buffer
|
||||||
buffer.WriteString("\n")
|
// buffer.WriteString("\n")
|
||||||
outdated := q[:0]
|
// outdated := q[:0]
|
||||||
for i, res := range q {
|
// for i, res := range q {
|
||||||
fmt.Printf("\r Checking %d/%d packages...", i+1, len(q))
|
// fmt.Printf("\r Checking %d/%d packages...", i+1, len(q))
|
||||||
|
|
||||||
if _, ok := foreign[res.Name]; ok {
|
// if _, ok := foreign[res.Name]; ok {
|
||||||
// Leaving this here for now, warn about downgrades later
|
// // Leaving this here for now, warn about downgrades later
|
||||||
if (config.YayConf.TimeUpdate && (int64(res.LastModified) > foreign[res.Name].BuildDate().Unix())) ||
|
// if (config.YayConf.TimeUpdate && (int64(res.LastModified) > foreign[res.Name].BuildDate().Unix())) ||
|
||||||
alpm.VerCmp(foreign[res.Name].Version(), res.Version) < 0 {
|
// alpm.VerCmp(foreign[res.Name].Version(), res.Version) < 0 {
|
||||||
buffer.WriteString(fmt.Sprintf("\x1b[1m\x1b[32m==>\x1b[33;1m %s: \x1b[0m%s \x1b[33;1m-> \x1b[0m%s\n",
|
// buffer.WriteString(fmt.Sprintf("\x1b[1m\x1b[32m==>\x1b[33;1m %s: \x1b[0m%s \x1b[33;1m-> \x1b[0m%s\n",
|
||||||
res.Name, foreign[res.Name].Version(), res.Version))
|
// res.Name, foreign[res.Name].Version(), res.Version))
|
||||||
outdated = append(outdated, res)
|
// outdated = append(outdated, res)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
fmt.Println(buffer.String())
|
// fmt.Println(buffer.String())
|
||||||
|
|
||||||
//If there are no outdated packages, don't prompt
|
// //If there are no outdated packages, don't prompt
|
||||||
if len(outdated) == 0 {
|
// if len(outdated) == 0 {
|
||||||
fmt.Println("there is nothing to do")
|
// fmt.Println("there is nothing to do")
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Install updated packages
|
// // Install updated packages
|
||||||
if !config.ContinueTask("Proceed with upgrade?", "nN") {
|
// if !config.ContinueTask("Proceed with upgrade?", "nN") {
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
var finalmdeps []string
|
// var finalmdeps []string
|
||||||
for _, pkgi := range outdated {
|
// for _, pkgi := range outdated {
|
||||||
mdeps, err := PkgInstall(&pkgi, flags)
|
// mdeps, err := PkgInstall(&pkgi, flags)
|
||||||
finalmdeps = append(finalmdeps, mdeps...)
|
// finalmdeps = append(finalmdeps, mdeps...)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
fmt.Println(err)
|
// fmt.Println(err)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
err = pacman.CleanRemove(finalmdeps)
|
// err = pacman.CleanRemove(finalmdeps)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
fmt.Println(err)
|
// fmt.Println(err)
|
||||||
}
|
// }
|
||||||
|
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
// GetPkgbuild downloads pkgbuild from the AUR.
|
// GetPkgbuild downloads pkgbuild from the AUR.
|
||||||
func GetPkgbuild(pkgN string, dir string) (err error) {
|
func GetPkgbuild(pkgN string, dir string) (err error) {
|
||||||
|
|
|
@ -134,11 +134,39 @@ func PackageSlices(toCheck []string) (aur []string, repo []string, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UpgradeList() ([]alpm.Package, error) {
|
||||||
|
localDb, err := config.AlpmHandle.LocalDb()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
dbList, err := config.AlpmHandle.SyncDbs()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
slice := []alpm.Package{}
|
||||||
|
for _, pkg := range localDb.PkgCache().Slice() {
|
||||||
|
newPkg := pkg.NewVersion(dbList)
|
||||||
|
if newPkg != nil {
|
||||||
|
slice = append(slice, *newPkg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return slice, nil
|
||||||
|
}
|
||||||
|
|
||||||
// BuildDependencies finds packages, on the second run
|
// BuildDependencies finds packages, on the second run
|
||||||
// compares with a baselist and avoids searching those
|
// compares with a baselist and avoids searching those
|
||||||
func BuildDependencies(baselist []string) func(toCheck []string, isBaseList bool, last bool) (repo []string, notFound []string) {
|
func BuildDependencies(baselist []string) func(toCheck []string, isBaseList bool, last bool) (repo []string, notFound []string) {
|
||||||
localDb, _ := config.AlpmHandle.LocalDb()
|
localDb, err := config.AlpmHandle.LocalDb()
|
||||||
dbList, _ := config.AlpmHandle.SyncDbs()
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
dbList, err := config.AlpmHandle.SyncDbs()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
f := func(c rune) bool {
|
f := func(c rune) bool {
|
||||||
return c == '>' || c == '<' || c == '=' || c == ' '
|
return c == '>' || c == '<' || c == '=' || c == ' '
|
||||||
|
|
Loading…
Reference in a new issue