mirror of
https://github.com/Jguer/yay
synced 2024-10-31 04:12:51 +00:00
parent
f0b9c0cfe9
commit
467b7794c2
2 changed files with 113 additions and 23 deletions
74
actions.go
74
actions.go
|
@ -1,8 +1,12 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
aur "github.com/jguer/yay/aur"
|
||||
"github.com/jguer/yay/config"
|
||||
|
@ -36,22 +40,72 @@ func upgradePkgs(flags []string) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("%+v\n", aurUp)
|
||||
fmt.Printf("%+v\n", repoUp)
|
||||
|
||||
if len(aurUp)+len(repoUp) > 0 {
|
||||
sort.Sort(repoUp)
|
||||
fmt.Printf("\x1b[1;34;1m:: \x1b[0m\x1b[1m%d Packages to upgrade.\x1b[0m\n", len(aurUp)+len(repoUp))
|
||||
upgrade.Print(len(aurUp), repoUp)
|
||||
upgrade.Print(0, aurUp)
|
||||
// erra := aur.Upgrade(flags)
|
||||
fmt.Print("\x1b[32mEnter packages you don't want to upgrade.\x1b[0m\nNumbers: ")
|
||||
}
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
|
||||
// if errp != nil {
|
||||
// return errp
|
||||
// }
|
||||
numberBuf, overflow, err := reader.ReadLine()
|
||||
if err != nil || overflow {
|
||||
fmt.Println(err)
|
||||
return err
|
||||
}
|
||||
|
||||
// var buffer bytes.Buffer
|
||||
// buffer.WriteString("\n")
|
||||
result := strings.Fields(string(numberBuf))
|
||||
var repoNums []int
|
||||
var aurNums []int
|
||||
for _, numS := range result {
|
||||
num, err := strconv.Atoi(numS)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if num > len(aurUp)+len(repoUp)-1 || num < 0 {
|
||||
continue
|
||||
} else if num < len(aurUp) {
|
||||
num = len(aurUp) - num - 1
|
||||
aurNums = append(aurNums, num)
|
||||
} else {
|
||||
num = len(aurUp) + len(repoUp) - num - 1
|
||||
repoNums = append(repoNums, num)
|
||||
}
|
||||
}
|
||||
|
||||
// fmt.Println("\x1b[1;36;1m::\x1b[0m\x1b[1m Starting AUR upgrade...\x1b[0m")
|
||||
// return erra
|
||||
if len(repoUp) != 0 {
|
||||
var repoNames []string
|
||||
repoloop:
|
||||
for i, k := range repoUp {
|
||||
for _, j := range repoNums {
|
||||
if j == i {
|
||||
continue repoloop
|
||||
}
|
||||
}
|
||||
repoNames = append(repoNames, k.Name)
|
||||
}
|
||||
|
||||
err := config.PassToPacman("-S", repoNames, flags)
|
||||
if err != nil {
|
||||
fmt.Println("Error upgrading repo packages.")
|
||||
}
|
||||
}
|
||||
|
||||
if len(aurUp) != 0 {
|
||||
var aurNames []string
|
||||
aurloop:
|
||||
for i, k := range aurUp {
|
||||
for _, j := range aurNums {
|
||||
if j == i {
|
||||
continue aurloop
|
||||
}
|
||||
}
|
||||
aurNames = append(aurNames, k.Name)
|
||||
}
|
||||
aur.Install(aurNames, flags)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
58
upgrade/u.go
58
upgrade/u.go
|
@ -3,6 +3,7 @@ package upgrade
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"unicode"
|
||||
|
||||
alpm "github.com/jguer/go-alpm"
|
||||
"github.com/jguer/yay/config"
|
||||
|
@ -18,6 +19,41 @@ type Upgrade struct {
|
|||
RemoteVersion string
|
||||
}
|
||||
|
||||
// Slice is a slice of Upgrades
|
||||
type Slice []Upgrade
|
||||
|
||||
func (s Slice) Len() int { return len(s) }
|
||||
func (s Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
||||
|
||||
func (s Slice) Less(i, j int) bool {
|
||||
iRunes := []rune(s[i].Repository)
|
||||
jRunes := []rune(s[j].Repository)
|
||||
|
||||
max := len(iRunes)
|
||||
if max > len(jRunes) {
|
||||
max = len(jRunes)
|
||||
}
|
||||
|
||||
for idx := 0; idx < max; idx++ {
|
||||
ir := iRunes[idx]
|
||||
jr := jRunes[idx]
|
||||
|
||||
lir := unicode.ToLower(ir)
|
||||
ljr := unicode.ToLower(jr)
|
||||
|
||||
if lir != ljr {
|
||||
return lir > ljr
|
||||
}
|
||||
|
||||
// the lowercase runes are the same, so compare the original
|
||||
if ir != jr {
|
||||
return ir > jr
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// FilterPackages filters packages based on source and type.
|
||||
func FilterPackages() (local []alpm.Package, remote []alpm.Package,
|
||||
localNames []string, remoteNames []string, err error) {
|
||||
|
@ -57,8 +93,9 @@ func FilterPackages() (local []alpm.Package, remote []alpm.Package,
|
|||
return
|
||||
}
|
||||
|
||||
func Print(start int, u []Upgrade) {
|
||||
for _, i := range u {
|
||||
// Print prints the details of the packages to upgrade.
|
||||
func Print(start int, u Slice) {
|
||||
for k, i := range u {
|
||||
old, err := pkgb.NewCompleteVersion(i.LocalVersion)
|
||||
if err != nil {
|
||||
fmt.Println(i.Name, err)
|
||||
|
@ -75,15 +112,15 @@ func Print(start int, u []Upgrade) {
|
|||
}
|
||||
return (hash)%6 + 31
|
||||
}
|
||||
// fmt.Printf("\x1b[33m%-2d\x1b[0m ", len(u)+start-k-1)
|
||||
fmt.Printf("\x1b[1;%dm%s\x1b[0m/\x1b[1;39m%-20s\t\t\x1b[0m", f(i.Repository), i.Repository, i.Name)
|
||||
fmt.Printf("\x1b[33m%-2d\x1b[0m ", len(u)+start-k-1)
|
||||
fmt.Printf("\x1b[1;%dm%s\x1b[0m/\x1b[1;39m%-25s\t\t\x1b[0m", f(i.Repository), i.Repository, i.Name)
|
||||
|
||||
if old.Version != new.Version {
|
||||
fmt.Printf("\x1b[31m%10s\x1b[0m-%d -> \x1b[1;32m%s\x1b[0m-%d\x1b[0m",
|
||||
fmt.Printf("\x1b[31m%18s\x1b[0m-%d -> \x1b[1;32m%s\x1b[0m-%d\x1b[0m",
|
||||
old.Version, old.Pkgrel,
|
||||
new.Version, new.Pkgrel)
|
||||
} else {
|
||||
fmt.Printf("\x1b[0m%10s-\x1b[31m%d\x1b[0m -> %s-\x1b[32m%d\x1b[0m",
|
||||
fmt.Printf("\x1b[0m%18s-\x1b[31m%d\x1b[0m -> %s-\x1b[32m%d\x1b[0m",
|
||||
old.Version, old.Pkgrel,
|
||||
new.Version, new.Pkgrel)
|
||||
}
|
||||
|
@ -92,7 +129,7 @@ func Print(start int, u []Upgrade) {
|
|||
}
|
||||
|
||||
// List returns lists of packages to upgrade from each source.
|
||||
func List() (aurUp []Upgrade, repoUp []Upgrade, err error) {
|
||||
func List() (aurUp Slice, repoUp Slice, err error) {
|
||||
err = config.PassToPacman("-Sy", nil, nil)
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -145,7 +182,7 @@ loop:
|
|||
|
||||
// aur gathers foreign packages and checks if they have new versions.
|
||||
// Output: Upgrade type package list.
|
||||
func aur(remote []alpm.Package, remoteNames []string) (toUpgrade []Upgrade, err error) {
|
||||
func aur(remote []alpm.Package, remoteNames []string) (toUpgrade Slice, err error) {
|
||||
var j int
|
||||
var routines int
|
||||
var routineDone int
|
||||
|
@ -195,7 +232,6 @@ func aur(remote []alpm.Package, remoteNames []string) (toUpgrade []Upgrade, err
|
|||
for {
|
||||
select {
|
||||
case pkg := <-packageC:
|
||||
fmt.Println("Package Received")
|
||||
toUpgrade = append(toUpgrade, pkg)
|
||||
case <-done:
|
||||
routineDone++
|
||||
|
@ -209,13 +245,13 @@ func aur(remote []alpm.Package, remoteNames []string) (toUpgrade []Upgrade, err
|
|||
|
||||
// repo gathers local packages and checks if they have new versions.
|
||||
// Output: Upgrade type package list.
|
||||
func repo(local []alpm.Package) ([]Upgrade, error) {
|
||||
func repo(local []alpm.Package) (Slice, error) {
|
||||
dbList, err := config.AlpmHandle.SyncDbs()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
slice := []Upgrade{}
|
||||
slice := Slice{}
|
||||
for _, pkg := range local {
|
||||
newPkg := pkg.NewVersion(dbList)
|
||||
if newPkg != nil {
|
||||
|
|
Loading…
Reference in a new issue