diff options
| author | Bernhard Guillon <Bernhard.Guillon@begu.org> | 2026-07-06 21:15:17 +0200 |
|---|---|---|
| committer | Bernhard Guillon <Bernhard.Guillon@begu.org> | 2026-07-06 21:15:17 +0200 |
| commit | b505ac2fe010fcc24b774c313d33dc099214e8ed (patch) | |
| tree | ff3f6472c84abd45e7918722e70ee681b859b780 /main.go | |
| download | sourcewatch-b505ac2fe010fcc24b774c313d33dc099214e8ed.tar.gz sourcewatch-b505ac2fe010fcc24b774c313d33dc099214e8ed.zip | |
Initial project scaffolding
- main.go: CLI entry point with flag parsing
- gitignore.go: .gitignore loading and parsing
- sync.go: initial sync with manifest tracking
- watcher.go: fsnotify-based file watcher with debouncing
- Dockerfile: multi-stage build for Alpine runtime
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 37 |
1 files changed, 37 insertions, 0 deletions
@@ -0,0 +1,37 @@ +package main + +import ( + "flag" + "log" +) + +var ( + hostDir = flag.String("host", "/host", "Host source directory (read-only)") + dataDir = flag.String("data", "/data", "Data destination directory") + verbose = flag.Bool("verbose", false, "Enable verbose logging") + dryRun = flag.Bool("dry-run", false, "Preview what would be synced without copying") +) + +func main() { + flag.Parse() + log.SetFlags(log.LstdFlags | log.Lshortfile) + + if *verbose { + log.Println("sourcewatch starting...") + log.Printf("host: %s, data: %s, dry-run: %v", *hostDir, *dataDir, *dryRun) + } + + rules, err := loadGitignore(*hostDir) + if err != nil { + log.Fatalf("failed to load .gitignore: %v", err) + } + + manifest, err := initialSync(*hostDir, *dataDir, rules, *dryRun) + if err != nil { + log.Fatalf("initial sync failed: %v", err) + } + + if err := watch(*hostDir, *dataDir, manifest, rules, *dryRun, *verbose); err != nil { + log.Fatalf("watcher failed: %v", err) + } +} |
