// getDirList provides NewWatcher() with a list of directories to watch for changes. func getDirList() []string { var a []string dataDir := helpers.AbsPathify(viper.GetString("DataDir")) layoutDir := helpers.AbsPathify(viper.GetString("LayoutDir")) walker := func(path string, fi os.FileInfo, err error) error { if err != nil { if path == dataDir && os.IsNotExist(err) { jww.WARN.Println("Skip DataDir:", err) return nil } if path == layoutDir && os.IsNotExist(err) { jww.WARN.Println("Skip LayoutDir:", err) return nil } jww.ERROR.Println("Walker: ", err) return nil } if fi.Mode()&os.ModeSymlink == os.ModeSymlink { link, err := filepath.EvalSymlinks(path) if err != nil { jww.ERROR.Printf("Cannot read symbolic link '%s', error was: %s", path, err) return nil } linkfi, err := os.Stat(link) if err != nil { jww.ERROR.Printf("Cannot stat '%s', error was: %s", link, err) return nil } if !linkfi.Mode().IsRegular() { jww.ERROR.Printf("Symbolic links for directories not supported, skipping '%s'", path) } return nil } if fi.IsDir() { if fi.Name() == ".git" || fi.Name() == "node_modules" || fi.Name() == "bower_components" { return filepath.SkipDir } a = append(a, path) } return nil } filepath.Walk(dataDir, walker) filepath.Walk(helpers.AbsPathify(viper.GetString("ContentDir")), walker) filepath.Walk(helpers.AbsPathify(viper.GetString("LayoutDir")), walker) filepath.Walk(helpers.AbsPathify(viper.GetString("StaticDir")), walker) if helpers.ThemeSet() { filepath.Walk(helpers.AbsPathify(viper.GetString("themesDir")+"/"+viper.GetString("theme")), walker) } return a }
// isThemeVsHugoVersionMismatch returns whether the current Hugo version is // less than the theme's min_version. func isThemeVsHugoVersionMismatch() (mismatch bool, requiredMinVersion string) { if !helpers.ThemeSet() { return } themeDir := helpers.GetThemeDir() fs := hugofs.SourceFs path := filepath.Join(themeDir, "theme.toml") exists, err := helpers.Exists(path, fs) if err != nil || !exists { return } f, err := fs.Open(path) if err != nil { return } defer f.Close() b, err := ioutil.ReadAll(f) if err != nil { return } c, err := parser.HandleTOMLMetaData(b) if err != nil { return } config := c.(map[string]interface{}) if minVersion, ok := config["min_version"]; ok { switch minVersion.(type) { case float32: return helpers.HugoVersionNumber < minVersion.(float32), fmt.Sprint(minVersion) case float64: return helpers.HugoVersionNumber < minVersion.(float64), fmt.Sprint(minVersion) default: return } } return }
func getDirList() []string { var a []string walker := func(path string, fi os.FileInfo, err error) error { if err != nil { jww.ERROR.Println("Walker: ", err) return nil } if fi.Mode()&os.ModeSymlink == os.ModeSymlink { link, err := filepath.EvalSymlinks(path) if err != nil { jww.ERROR.Printf("Cannot read symbolic link '%s', error was: %s", path, err) return nil } linkfi, err := os.Stat(link) if err != nil { jww.ERROR.Printf("Cannot stat '%s', error was: %s", link, err) return nil } if !linkfi.Mode().IsRegular() { jww.ERROR.Printf("Symbolic links for directories not supported, skipping '%s'", path) } return nil } if fi.IsDir() { a = append(a, path) } return nil } filepath.Walk(helpers.AbsPathify(viper.GetString("DataDir")), walker) filepath.Walk(helpers.AbsPathify(viper.GetString("ContentDir")), walker) filepath.Walk(helpers.AbsPathify(viper.GetString("LayoutDir")), walker) filepath.Walk(helpers.AbsPathify(viper.GetString("StaticDir")), walker) if helpers.ThemeSet() { filepath.Walk(helpers.AbsPathify("themes/"+viper.GetString("theme")), walker) } return a }
// getDirList provides NewWatcher() with a list of directories to watch for changes. func getDirList() []string { var a []string dataDir := helpers.AbsPathify(viper.GetString("dataDir")) i18nDir := helpers.AbsPathify(viper.GetString("i18nDir")) layoutDir := helpers.AbsPathify(viper.GetString("layoutDir")) staticDir := helpers.AbsPathify(viper.GetString("staticDir")) var themesDir string if helpers.ThemeSet() { themesDir = helpers.AbsPathify(viper.GetString("themesDir") + "/" + viper.GetString("theme")) } walker := func(path string, fi os.FileInfo, err error) error { if err != nil { if path == dataDir && os.IsNotExist(err) { jww.WARN.Println("Skip dataDir:", err) return nil } if path == i18nDir && os.IsNotExist(err) { jww.WARN.Println("Skip i18nDir:", err) return nil } if path == layoutDir && os.IsNotExist(err) { jww.WARN.Println("Skip layoutDir:", err) return nil } if path == staticDir && os.IsNotExist(err) { jww.WARN.Println("Skip staticDir:", err) return nil } if os.IsNotExist(err) { // Ignore. return nil } jww.ERROR.Println("Walker: ", err) return nil } if fi.Mode()&os.ModeSymlink == os.ModeSymlink { link, err := filepath.EvalSymlinks(path) if err != nil { jww.ERROR.Printf("Cannot read symbolic link '%s', error was: %s", path, err) return nil } linkfi, err := hugofs.Source().Stat(link) if err != nil { jww.ERROR.Printf("Cannot stat '%s', error was: %s", link, err) return nil } if !linkfi.Mode().IsRegular() { jww.ERROR.Printf("Symbolic links for directories not supported, skipping '%s'", path) } return nil } if fi.IsDir() { if fi.Name() == ".git" || fi.Name() == "node_modules" || fi.Name() == "bower_components" { return filepath.SkipDir } a = append(a, path) } return nil } helpers.SymbolicWalk(hugofs.Source(), dataDir, walker) helpers.SymbolicWalk(hugofs.Source(), helpers.AbsPathify(viper.GetString("contentDir")), walker) helpers.SymbolicWalk(hugofs.Source(), i18nDir, walker) helpers.SymbolicWalk(hugofs.Source(), helpers.AbsPathify(viper.GetString("layoutDir")), walker) helpers.SymbolicWalk(hugofs.Source(), staticDir, walker) if helpers.ThemeSet() { helpers.SymbolicWalk(hugofs.Source(), filepath.Join(themesDir, "layouts"), walker) helpers.SymbolicWalk(hugofs.Source(), filepath.Join(themesDir, "static"), walker) helpers.SymbolicWalk(hugofs.Source(), filepath.Join(themesDir, "i18n"), walker) helpers.SymbolicWalk(hugofs.Source(), filepath.Join(themesDir, "data"), walker) } return a }