blob: 0cd7d44f445863fe21a9fe1f8e9c1e8d61ed372b (
plain)
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
|
package main
import (
"os"
"path/filepath"
"syscall"
"time"
"fmt"
)
type statistics struct {
Name string;
Type string; //formula or cask
Desc string;
Outdated bool;
InstalledAsDependency bool;
InstalledOnRequest bool;
BinaryExists bool;
LastAccessTime time.Time;
InstalledVersion string;
Homepage string;
License string;
ReverseDependencies []string;
}
func NewStatistics(formula *FormulaInfo, cask *CaskInfo, pkgName string) (*statistics) {
var statObject statistics
// === formula/cask specific === //
if formula != nil {
statObject.Name = formula.Name
statObject.Type = "formula"
statObject.Desc = formula.Desc
statObject.Homepage = formula.Homepage
statObject.License = formula.License
statObject.Outdated = formula.Outdated
// if installed
if len(formula.Installed) != 0 {
statObject.InstalledVersion = formula.Installed[0].Version
statObject.InstalledAsDependency = formula.Installed[0].InstalledAsDependency
statObject.InstalledOnRequest = formula.Installed[0].InstalledOnRequest
}
// get reverse dependencies
statObject.ReverseDependencies = GetBrewUses(pkgName)
} else if cask != nil {
statObject.Name = cask.Token
statObject.Type = "cask"
statObject.Desc = cask.Desc
statObject.Homepage = cask.Homepage
statObject.InstalledVersion = cask.Installed
statObject.Outdated = cask.Outdated
}
// === general === //
// get system atime
var atime time.Time
binPath := filepath.Join("/opt/homebrew/bin", pkgName)
info, err := os.Stat(binPath)
if err != nil {
atime = time.Time{} // skip if no binary is found
statObject.BinaryExists = false
} else {
atime = time.Unix(info.Sys().(*syscall.Stat_t).Atimespec.Unix())
statObject.BinaryExists = true
}
statObject.LastAccessTime = atime
return &statObject
}
func (s *statistics) Print() {
if s == nil {
fmt.Println("Package not found.")
return
}
PrintHeader(s)
PrintUserInteractionSummary(s)
PrintMetadata(s)
fmt.Println()
}
|