12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package watch
- import (
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- )
- ///////////////////////////////////////////////////////////////////////////////
- type FileSystemItem struct {
- Root string
- Path string
- Name string
- Size int64
- Modified int64
- IsFolder bool
- ProfileDisabled bool
- ProfileTags []string
- ProfileArguments []string
- }
- ///////////////////////////////////////////////////////////////////////////////
- func YieldFileSystemItems(root string, excludedDirs []string) chan *FileSystemItem {
- items := make(chan *FileSystemItem)
- go func() {
- filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
- if err != nil {
- return filepath.SkipDir
- }
- if info.IsDir() && strings.HasPrefix(info.Name(), ".") {
- return filepath.SkipDir
- }
- basePath := filepath.Base(path)
- for _, item := range excludedDirs {
- if item == basePath && info.IsDir() && item != "" && basePath != "" {
- return filepath.SkipDir
- }
- }
- items <- &FileSystemItem{
- Root: root,
- Path: path,
- Name: info.Name(),
- Size: info.Size(),
- Modified: info.ModTime().Unix(),
- IsFolder: info.IsDir(),
- }
- return nil
- })
- close(items)
- }()
- return items
- }
- ///////////////////////////////////////////////////////////////////////////////
- // ReadContents reads files wholesale. This function is only called on files
- // that end in '.goconvey'. These files should be very small, probably not
- // ever more than a few hundred bytes. The ignored errors are ok because in
- // the event of an IO error all that need be returned is an empty string.
- func ReadContents(path string) string {
- file, err := os.Open(path)
- if err != nil {
- return ""
- }
- defer file.Close()
- reader := io.LimitReader(file, 1024*4)
- content, _ := ioutil.ReadAll(reader)
- return string(content)
- }
- ///////////////////////////////////////////////////////////////////////////////
|