Files
gastown/internal/formula/embed.go
julianknutsen d4da2b325d chore: remove unused JSON formula file
The formula parser only supports TOML (uses toml.Decode). The JSON
version of mol-gastown-boot was never used - it was likely created
by mistake or for an abandoned experiment.

Changes:
- Remove .beads/formulas/mol-gastown-boot.formula.json
- Remove internal/formula/formulas/mol-gastown-boot.formula.json
- Simplify go:generate to only copy .formula.toml files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 01:09:14 -08:00

63 lines
1.7 KiB
Go

package formula
import (
"embed"
"fmt"
"log"
"os"
"path/filepath"
)
// Generate formulas directory from canonical source at .beads/formulas/
//go:generate sh -c "rm -rf formulas && mkdir -p formulas && cp ../../.beads/formulas/*.formula.toml formulas/"
//go:embed formulas/*.formula.toml
var formulasFS embed.FS
// ProvisionFormulas creates the .beads/formulas/ directory with embedded formulas.
// This ensures new installations have the standard formula library.
// If a formula already exists, it is skipped (no overwrite).
// Returns the number of formulas provisioned.
func ProvisionFormulas(beadsPath string) (int, error) {
entries, err := formulasFS.ReadDir("formulas")
if err != nil {
return 0, fmt.Errorf("reading formulas directory: %w", err)
}
// Create .beads/formulas/ directory
formulasDir := filepath.Join(beadsPath, ".beads", "formulas")
if err := os.MkdirAll(formulasDir, 0755); err != nil {
return 0, fmt.Errorf("creating formulas directory: %w", err)
}
count := 0
for _, entry := range entries {
if entry.IsDir() {
continue
}
destPath := filepath.Join(formulasDir, entry.Name())
// Skip if formula already exists (don't overwrite user customizations)
if _, err := os.Stat(destPath); err == nil {
continue
} else if !os.IsNotExist(err) {
// Log unexpected errors (e.g., permission denied) but continue
log.Printf("warning: could not check formula %s: %v", entry.Name(), err)
continue
}
content, err := formulasFS.ReadFile("formulas/" + entry.Name())
if err != nil {
return count, fmt.Errorf("reading %s: %w", entry.Name(), err)
}
if err := os.WriteFile(destPath, content, 0644); err != nil {
return count, fmt.Errorf("writing %s: %w", entry.Name(), err)
}
count++
}
return count, nil
}