1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package upgrade
- import (
- "fmt"
- "strings"
- "github.com/Jguer/yay/v12/pkg/db"
- "github.com/Jguer/yay/v12/pkg/intrange"
- "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
- }
- 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 = intrange.Max(packNameLen, longestName)
- longestVersion = intrange.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)
- }
- }
- }
|