summaryrefslogtreecommitdiff
path: root/statistics.go
diff options
context:
space:
mode:
Diffstat (limited to 'statistics.go')
-rw-r--r--statistics.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/statistics.go b/statistics.go
new file mode 100644
index 0000000..428d19c
--- /dev/null
+++ b/statistics.go
@@ -0,0 +1,70 @@
+package main
+
+import (
+ "os"
+ "path/filepath"
+ "syscall"
+ "time"
+)
+
+type statistics struct {
+ Name string;
+ Type string; //formula or cask
+ Desc string;
+ Outdated bool;
+
+ InstalledAsDependency bool;
+ InstalledOnRequest bool;
+ LastAccessTime time.Time;
+
+ InstalledVersion string;
+ Homepage string;
+ License string;
+
+ ReverseDependencies []string;
+}
+
+func UnifyInfo(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
+ binPath := filepath.Join("/opt/homebrew/bin", pkgName)
+ info, err := os.Stat(binPath)
+ if err != nil {
+ return nil // skip if no binary is found
+ }
+ atime := info.Sys().(*syscall.Stat_t).Atimespec
+ statObject.LastAccessTime = time.Unix(atime.Unix())
+
+ return &statObject
+}