// Watch accepts a set of paths starting a recursive file watcher func Watch(cmd *cobra.Command, paths []string) { pMap, gba := globalRun(paths) var err error bOpts := wt.NewBuild(paths, gba, pMap) err = bOpts.Run() if err != nil { log.Fatal(err) } w, err := wt.NewWatcher(&wt.WatchOptions{ Paths: paths, BArgs: gba, PartialMap: pMap, }) if err != nil { log.Fatal("failed to start watcher: ", err) } err = w.Watch() if err != nil { log.Fatal("filewatcher error: ", err) } fmt.Println("File watcher started use `ctrl+d` to exit") in := bufio.NewReader(os.Stdin) for { _, err := in.ReadString(' ') if err != nil { if err == io.EOF { os.Exit(0) } fmt.Println("error", err) } } }
// Run is the main entrypoint for the cli. func run(paths []string, pMap *wt.SafePartialMap, gba *wt.BuildArgs) { // No paths given, read from stdin and wait if len(paths) == 0 { log.Println("Reading from stdin, -h for help") out := os.Stdout in := os.Stdin comp, err := wt.FromBuildArgs(out, nil, in, gba) if err != nil { log.Fatal(err) } err = comp.Run() if err != nil { color.Red(err.Error()) } return } bOpts := wt.NewBuild(paths, gba, pMap) err := bOpts.Run() if err != nil { log.Fatal(err) } // FIXME: move this to a Payload.Close() method // Before shutting down, check that every sprite has been // flushed to disk. img := sync.WaitGroup{} pMap.RLock() // It's not currently possible to wait on Image. This is often // to inline images, so it shouldn't be a factor... // for _, s := range gba.Payload.Image().M { // img.Add(1) // err := s.Wait() // img.Done() // if err != nil { // log.Printf("error writing image: %s\n", err) // } // } sprites := payload.Sprite(gba.Payload) sprites.ForEach(func(k string, sprite *spritewell.Sprite) { img.Add(1) err := sprite.Wait() img.Done() if err != nil { log.Printf("error writing sprite: %s\n", err) } }) img.Wait() pMap.RUnlock() }
func main() { sassFile := "../../test/sass/file.scss" tdir, _ := ioutil.TempDir("basic", "") args := &wellington.BuildArgs{} args.BuildDir = tdir pmap := wellington.NewPartialMap() wg := sync.WaitGroup{} for i := 0; i < 1000; i++ { wg.Add(1) go func() { defer wg.Done() b := wellington.NewBuild([]string{sassFile}, args, pmap) err := b.Run() if err != nil { log.Println(i, err) } }() fmt.Println(i) } wg.Wait() }