123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package upgrade
- import (
- "fmt"
- "strings"
- "github.com/Jguer/yay/v12/pkg/db"
- "github.com/Jguer/yay/v12/pkg/query"
- "github.com/Jguer/yay/v12/pkg/text"
- )
- // Filter decides if specific package should be included in theincluded in the results.
- type Filter func(*Upgrade) bool
- // Upgrade type describes a system upgrade.
- type Upgrade = db.Upgrade
- func StylizedNameWithRepository(u *Upgrade) string {
- return text.Bold(text.ColorHash(u.Repository)) + "/" + text.Bold(u.Name)
- }
- // upSlice is a slice of Upgrades.
- type UpSlice struct {
- Up []Upgrade
- Repos []string
- PulledDeps []Upgrade
- }
- func (u UpSlice) Len() int { return len(u.Up) }
- func (u UpSlice) Swap(i, j int) { u.Up[i], u.Up[j] = u.Up[j], u.Up[i] }
- func (u UpSlice) Less(i, j int) bool {
- if u.Up[i].Repository == u.Up[j].Repository {
- iRunes := []rune(u.Up[i].Name)
- jRunes := []rune(u.Up[j].Name)
- return text.LessRunes(iRunes, jRunes)
- }
- for _, db := range u.Repos {
- if db == u.Up[i].Repository {
- return true
- } else if db == u.Up[j].Repository {
- return false
- }
- }
- iRunes := []rune(u.Up[i].Repository)
- jRunes := []rune(u.Up[j].Repository)
- return text.LessRunes(iRunes, jRunes)
- }
- // Print prints the details of the packages to upgrade.
- func (u UpSlice) Print(logger *text.Logger) {
- longestName, longestVersion := 0, 0
- for k := range u.Up {
- upgrade := &u.Up[k]
- packNameLen := len(StylizedNameWithRepository(upgrade))
- packVersion, _ := query.GetVersionDiff(upgrade.LocalVersion, upgrade.RemoteVersion)
- packVersionLen := len(packVersion)
- longestName = max(packNameLen, longestName)
- longestVersion = max(packVersionLen, longestVersion)
- }
- lenUp := len(u.Up)
- longestNumber := len(fmt.Sprintf("%v", lenUp))
- namePadding := fmt.Sprintf("%%-%ds ", longestName)
- versionPadding := fmt.Sprintf("%%-%ds", longestVersion)
- numberPadding := fmt.Sprintf("%%%dd ", longestNumber)
- for k := range u.Up {
- upgrade := &u.Up[k]
- left, right := query.GetVersionDiff(upgrade.LocalVersion, upgrade.RemoteVersion)
- logger.Printf(text.Magenta(fmt.Sprintf(numberPadding, lenUp-k)))
- logger.Printf(namePadding, StylizedNameWithRepository(upgrade))
- logger.Printf("%s -> %s\n", fmt.Sprintf(versionPadding, left), right)
- if upgrade.Extra != "" {
- logger.Println(strings.Repeat(" ", longestNumber), upgrade.Extra)
- }
- }
- }
- func (u UpSlice) PrintDeps(logger *text.Logger) {
- longestName, longestVersion := 0, 0
- for k := range u.PulledDeps {
- upgrade := &u.PulledDeps[k]
- packNameLen := len(StylizedNameWithRepository(upgrade))
- packVersion, _ := query.GetVersionDiff(upgrade.LocalVersion, upgrade.RemoteVersion)
- packVersionLen := len(packVersion)
- longestName = max(packNameLen, longestName)
- longestVersion = max(packVersionLen, longestVersion)
- }
- lenUp := len(u.PulledDeps)
- longestNumber := len(fmt.Sprintf("%v", lenUp))
- namePadding := fmt.Sprintf(" %s%%-%ds ", strings.Repeat(" ", longestNumber), longestName)
- versionPadding := fmt.Sprintf("%%-%ds", longestVersion)
- for k := range u.PulledDeps {
- upgrade := &u.PulledDeps[k]
- left, right := query.GetVersionDiff(upgrade.LocalVersion, upgrade.RemoteVersion)
- logger.Printf(namePadding, StylizedNameWithRepository(upgrade))
- logger.Printf("%s -> %s\n", fmt.Sprintf(versionPadding, left), right)
- if upgrade.Extra != "" {
- logger.Println(strings.Repeat(" ", longestNumber), strings.ToLower(upgrade.Extra))
- }
- }
- logger.Println()
- }
|