Files
catz/main.go
Ask Bjørn Hansen 0a460b975d Clean up code reuse, consistency, and efficiency issues
Merge readExistingSerial and readExistingContent into a single
readExisting function to eliminate duplicate file I/O. Extract dateBase
helper to deduplicate serial formula between defaultSerial and
bumpSerial. Cache hash results during collision check to avoid
recomputing per member. Normalize error prefixes (remove "error:" from
fmt.Errorf, add uniformly at print sites). Use filepath.Join instead of
manual "/" concatenation. Replace trivial containsStr wrapper with
strings.Contains. Simplify tokenize to a single return. Use writeTestFile
and fixedTime helpers consistently in tests.
2026-03-01 17:38:26 -08:00

77 lines
1.6 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"path/filepath"
"sort"
"time"
)
func main() {
configPath := flag.String("config", "", "path to YAML config (default: catz.yaml next to input file)")
outputDir := flag.String("output-dir", "", "directory for output zone files (default: same as input file)")
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage: catalog-zone-gen [--config path] [--output-dir path] <input-file>\n")
flag.PrintDefaults()
}
flag.Parse()
if flag.NArg() != 1 {
flag.Usage()
os.Exit(1)
}
inputFile := flag.Arg(0)
inputDir := filepath.Dir(inputFile)
if *configPath == "" {
*configPath = filepath.Join(inputDir, "catz.yaml")
}
if *outputDir == "" {
*outputDir = inputDir
}
cfg, err := loadConfig(*configPath)
if err != nil {
fmt.Fprintf(os.Stderr, "error: %s\n", err)
os.Exit(1)
}
members, err := parseInput(inputFile, cfg)
if err != nil {
fmt.Fprintf(os.Stderr, "error: %s\n", err)
os.Exit(1)
}
now := time.Now().UTC()
// Process catalogs in sorted order for deterministic output
catNames := make([]string, 0, len(members))
for name := range members {
catNames = append(catNames, name)
}
sort.Strings(catNames)
hasErrors := false
for _, catName := range catNames {
changed, err := processCatalog(catName, cfg, members[catName], *outputDir, now)
if err != nil {
fmt.Fprintf(os.Stderr, "error: %s\n", err)
hasErrors = true
continue
}
zoneFile := cfg.Catalogs[catName].Zone + "zone"
if changed {
fmt.Fprintf(os.Stderr, "%s: updated\n", zoneFile)
} else {
fmt.Fprintf(os.Stderr, "%s: unchanged\n", zoneFile)
}
}
if hasErrors {
os.Exit(1)
}
}