Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Option ¶ added in v0.4.0
type Option func(*options)
Option modifies the options.
type Watcher ¶ added in v0.2.0
type Watcher struct {
// contains filtered or unexported fields
}
Watcher watches over a directory and it's sub-directories, recursively.
Example (Recursive) ¶
// prepare sample home directory to watch over // rootDirectory, err := ioutil.TempDir(os.TempDir(), "dirwatch-example-") rootDirectory := filepath.Join(os.TempDir(), "dirwatch-example-exclude") os.RemoveAll(rootDirectory) os.Mkdir(rootDirectory, 0777) os.MkdirAll(filepath.Join(rootDirectory, "node_modules"), 0777) os.MkdirAll(filepath.Join(rootDirectory, "lab1"), 0777) os.MkdirAll(filepath.Join(rootDirectory, "lab2"), 0777) // our notification callback (I feel it's simpler to // have a callback instead of passing a channel in an API) var events = make(chan Event, 100) notify := func(ev Event) { events <- ev } // create the watcher watcher := New(Notify(notify), Exclude("/*/*/node_modules")) defer watcher.Stop() watcher.Add(rootDirectory, true) <-time.After(time.Millisecond * 500) go func() { defer func() { events <- Event{Name: "ALLDONE"} }() <-time.After(time.Millisecond * 10) if err := ioutil.WriteFile(filepath.Join(rootDirectory, "node_modules", "LVL2.txt"), []byte("TEST"), 0777); err != nil { panic(err) } <-time.After(time.Millisecond * 10) if err := ioutil.WriteFile(filepath.Join(rootDirectory, "lab1", "LVL2.txt"), []byte("TEST"), 0777); err != nil { panic(err) } <-time.After(time.Millisecond * 10) if err := ioutil.WriteFile(filepath.Join(rootDirectory, "lab2", "LVL2.txt"), []byte("TEST"), 0777); err != nil { panic(err) } <-time.After(time.Millisecond * 10) }() count := 0 for v := range events { if v.Name == "ALLDONE" { break } if strings.Contains(v.Name, "LVL2.txt") { count++ continue } } fmt.Println(count)
Output: 4
Example (Simple) ¶
dir := prep() notify := func(ev Event) { fmt.Println(filepath.Base(ev.Name)) } // create the watcher watcher := New(Notify(notify)) defer watcher.Stop() watcher.Add(dir, true) ioutil.WriteFile(filepath.Join(dir, "text.txt"), nil, 0777) <-time.After(time.Millisecond * 300)
Output: text.txt
Example (SimpleExclude) ¶
// prepare sample home directory to watch over // rootDirectory, err := ioutil.TempDir(os.TempDir(), "dirwatch-example-") rootDirectory := filepath.Join(os.TempDir(), "dirwatch-example-exclude") os.RemoveAll(rootDirectory) os.Mkdir(rootDirectory, 0777) // our notification callback (I feel it's simpler to // have a callback instead of passing a channel in an API) var events = make(chan Event, 100) notify := func(ev Event) { events <- ev } // create the watcher watcher := New(Notify(notify), Exclude("/*/*/node_modules")) defer watcher.Stop() watcher.Add(rootDirectory, true) <-time.After(time.Millisecond * 500) go func() { defer func() { events <- Event{Name: "ALLDONE"} }() os.MkdirAll(filepath.Join(rootDirectory, "node_modules"), 0777) os.MkdirAll(filepath.Join(rootDirectory, "lab1"), 0777) os.MkdirAll(filepath.Join(rootDirectory, "lab2"), 0777) <-time.After(time.Millisecond * 10) if err := ioutil.WriteFile(filepath.Join(rootDirectory, "node_modules", "LVL2.txt"), []byte("TEST"), 0777); err != nil { panic(err) } <-time.After(time.Millisecond * 10) if err := ioutil.WriteFile(filepath.Join(rootDirectory, "lab1", "LVL2.txt"), []byte("TEST"), 0777); err != nil { panic(err) } <-time.After(time.Millisecond * 10) if err := ioutil.WriteFile(filepath.Join(rootDirectory, "lab2", "LVL2.txt"), []byte("TEST"), 0777); err != nil { panic(err) } <-time.After(time.Millisecond * 10) }() count := 0 for v := range events { if v.Name == "ALLDONE" { break } if strings.Contains(v.Name, "LVL2.txt") { count++ continue } } fmt.Println(count)
Output: 4
func New ¶
New creates a new *Watcher. Excluded patterns are based on filepath.Match function patterns.
Click to show internal directories.
Click to hide internal directories.