1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
package main
import (
"fmt"
"github.com/fatih/color"
"strings"
)
// PrintInfo prints info for either a formula or a cask.
func PrintInfo(formula *FormulaInfo, cask *CaskInfo, pkgName string) {
if formula == nil && cask == nil {
fmt.Println("Package not found.")
return
}
printHeader(formula, cask)
printDescription(formula, cask)
printVersionInfo(formula, cask)
printMetadata(formula, cask)
fmt.Println()
}
// ------------------- Helper functions -------------------
// printHeader prints the icon and package name
func printHeader(formula *FormulaInfo, cask *CaskInfo) {
var icon, typ, name, desc string
if formula != nil {
icon = "🍺"
typ = "(formula)"
name = formula.Name
desc = formula.Desc
} else if cask != nil {
icon = "☕️"
typ = "(cask)"
name = cask.Token
desc = cask.Desc
} else {
name = "(unknown)"
}
fmt.Printf("%s ", icon)
color.New(color.FgYellow).Printf("%s ", typ)
color.New(color.Bold).Printf("%s", name)
fmt.Printf(" - %s\n\n", desc)
}
// printDescription prints installation description for formulae
func printDescription(formula *FormulaInfo, cask *CaskInfo) {
if formula != nil {
if len(formula.Installed) == 0 {
return
} else if formula.Installed[0].InstalledOnRequest {
color.Blue("You installed this package by running `brew install`.\n")
} else if formula.Installed[0].InstalledAsDependency {
color.Blue("This package was installed automatically as a dependency.\n")
// list reverse dependencies
dependencies, err := GetReverseDependencies(formula.Name)
if err != nil {
fmt.Printf("Error getting reverse dependencies: %v\n", err)
} else {
fmt.Printf("Used by: %s\n", strings.Join(dependencies, ", "))
}
}
}
fmt.Println()
}
// printVersionInfo prints the latest version and status
func printVersionInfo(formula *FormulaInfo, cask *CaskInfo) {
var installedVersion string
var installBadge string
var installBadgeColor color.Attribute
if formula != nil {
if len(formula.Installed) != 0 {
installedVersion = formula.Installed[0].Version
if formula.Outdated {
installBadge = "[Outdated]"
installBadgeColor = color.FgYellow
} else {
installBadge = "[Up to date]"
installBadgeColor = color.FgGreen
}
} else {
installBadge = "[Not installed]"
installBadgeColor = color.FgRed
}
} else if cask != nil {
installedVersion = cask.Version
if cask.Installed != "" {
if cask.Outdated {
installBadge = "[Outdated]"
installBadgeColor = color.FgYellow
} else {
installBadge = "[Up to date]"
installBadgeColor = color.FgGreen
}
} else {
installBadge = "[Not installed]"
installBadgeColor = color.FgRed
}
}
fmt.Printf("📦 %s", installedVersion)
color.New(installBadgeColor).Printf(" %s\n", installBadge)
}
// printMetadata prints homepage, license, and other fields
func printMetadata(formula *FormulaInfo, cask *CaskInfo) {
if formula != nil {
fmt.Printf("🔗 %s\n", formula.Homepage)
fmt.Printf("📜 %s\n", formula.License)
} else if cask != nil {
fmt.Printf("🔗 %s\n", cask.Homepage)
}
}
|