fswatcher.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package xorm
  2. import (
  3. "strings"
  4. "github.com/fsnotify/fsnotify"
  5. )
  6. func (engine *Engine) StartFSWatcher() error {
  7. var err error
  8. engine.watcher, err = fsnotify.NewWatcher()
  9. if err != nil {
  10. return err
  11. }
  12. go func() {
  13. for {
  14. select {
  15. case event := <-engine.watcher.Events:
  16. if event.Op&fsnotify.Write == fsnotify.Write {
  17. if strings.HasSuffix(event.Name, engine.SqlTemplate.Extension) {
  18. err = engine.reloadSqlTemplate(event.Name)
  19. if err != nil {
  20. engine.logger.Error(err)
  21. }
  22. }
  23. if strings.HasSuffix(event.Name, engine.SqlMap.Extension) {
  24. err = engine.reloadSqlMap(event.Name)
  25. if err != nil {
  26. engine.logger.Error(err)
  27. }
  28. }
  29. }
  30. case err := <-engine.watcher.Errors:
  31. if err != nil {
  32. engine.logger.Error(err)
  33. }
  34. }
  35. }
  36. }()
  37. if engine.SqlMap.SqlMapRootDir != "" {
  38. err = engine.watcher.Add(engine.SqlMap.SqlMapRootDir)
  39. if err != nil {
  40. return err
  41. }
  42. }
  43. if engine.SqlTemplate.SqlTemplateRootDir != "" {
  44. err = engine.watcher.Add(engine.SqlTemplate.SqlTemplateRootDir)
  45. if err != nil {
  46. return err
  47. }
  48. }
  49. return nil
  50. }
  51. func (engine *Engine) StopFSWatcher() error {
  52. return engine.watcher.Close()
  53. }