Documentation
¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Option ¶
type Option func(*options)
Option modifies the options.
type Watcher ¶
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.