summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--brewcheck.go76
-rw-r--r--main.go10
2 files changed, 77 insertions, 9 deletions
diff --git a/brewcheck.go b/brewcheck.go
new file mode 100644
index 0000000..b811fa6
--- /dev/null
+++ b/brewcheck.go
@@ -0,0 +1,76 @@
+package main
+
+import (
+ "encoding/json"
+ "errors"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "time"
+ "fmt"
+
+ "github.com/fatih/color"
+)
+
+type BrewCache struct {
+ Found bool `json:"found"`
+ Timestamp time.Time `json:"timestamp"`
+}
+
+// Don't check Homebrew installation for a week
+const cacheTTL = 7 * 24 * time.Hour
+
+func EnsureBrewAvailable() {
+ ok, err := isBrewAvailable()
+ if err != nil {
+ color.Red("⚠️ Error checking Homebrew: %v", err)
+ os.Exit(1)
+ }
+
+ if !ok {
+ color.Red("🍺 Homebrew not installed.")
+ fmt.Println("This tool works only with Homebrew formulae and casks.")
+ os.Exit(1)
+ }
+}
+
+func isBrewAvailable() (bool, error) {
+ cachePath, err := getCacheFile()
+ if err != nil {
+ return false, err
+ }
+
+ // Try to read cache
+ if data, err := os.ReadFile(cachePath); err == nil {
+ var cache BrewCache
+ if json.Unmarshal(data, &cache) == nil {
+ if time.Since(cache.Timestamp) < cacheTTL {
+ return cache.Found, nil
+ }
+ }
+ }
+
+ // Perform actual check
+ _, err = exec.LookPath("brew")
+ found := err == nil
+
+ // Save to cache
+ _ = os.MkdirAll(filepath.Dir(cachePath), 0o755)
+ cache := BrewCache{Found: found, Timestamp: time.Now()}
+ data, _ := json.Marshal(cache)
+ _ = os.WriteFile(cachePath, data, 0o644)
+
+ return found, nil
+}
+
+func getCacheFile() (string, error) {
+ base := os.Getenv("XDG_CACHE_HOME")
+ if base == "" {
+ home, err := os.UserHomeDir()
+ if err != nil {
+ return "", errors.New("cannot determine user home")
+ }
+ base = filepath.Join(home, ".cache")
+ }
+ return filepath.Join(base, "wthis", "brew-check.json"), nil
+}
diff --git a/main.go b/main.go
index ca60c40..95c90b5 100644
--- a/main.go
+++ b/main.go
@@ -3,7 +3,6 @@ package main
import (
"fmt"
"os"
- "os/exec"
"context"
"log"
"github.com/fatih/color"
@@ -11,14 +10,7 @@ import (
)
func main() {
- // Check if Homebrew is installed
- _, brewInstallationErr := exec.LookPath("brew")
- if brewInstallationErr != nil {
- color.Red("🍺 Homebrew not installed.")
- fmt.Println("This tool is for looking up formulae/cask information about packages installed with Homebrew.")
- fmt.Println("If you don't have Homebrew, it's no use.")
- os.Exit(0)
- }
+ EnsureBrewAvailable()
// declare CLI app
cmd := &cli.Command{