replace zxq.co/ripple/hanayo
This commit is contained in:
128
vendor/github.com/rjeczalik/notify/example_fsevents_test.go
generated
vendored
Normal file
128
vendor/github.com/rjeczalik/notify/example_fsevents_test.go
generated
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
// Copyright (c) 2014-2015 The Notify Authors. All rights reserved.
|
||||
// Use of this source code is governed by the MIT license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// +build darwin,!kqueue
|
||||
|
||||
package notify_test
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/rjeczalik/notify"
|
||||
)
|
||||
|
||||
// This example shows how to use FSEvents-specifc event values.
|
||||
func ExampleWatch_darwin() {
|
||||
// Make the channel buffered to ensure no event is dropped. Notify will drop
|
||||
// an event if the receiver is not able to keep up the sending pace.
|
||||
c := make(chan notify.EventInfo, 1)
|
||||
|
||||
// Set up a watchpoint listening for FSEvents-specific events within a
|
||||
// current working directory. Dispatch each FSEventsChangeOwner and FSEventsMount
|
||||
// events separately to c.
|
||||
if err := notify.Watch(".", c, notify.FSEventsChangeOwner, notify.FSEventsMount); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer notify.Stop(c)
|
||||
|
||||
// Block until an event is received.
|
||||
switch ei := <-c; ei.Event() {
|
||||
case notify.FSEventsChangeOwner:
|
||||
log.Println("The owner of", ei.Path(), "has changed.")
|
||||
case notify.FSEventsMount:
|
||||
log.Println("The path", ei.Path(), "has been mounted.")
|
||||
}
|
||||
}
|
||||
|
||||
// This example shows how to work with EventInfo's underlying FSEvent struct.
|
||||
// Investigating notify.(*FSEvent).Flags field we are able to say whether
|
||||
// the event's path is a file or a directory and many more.
|
||||
func ExampleWatch_darwinDirFileSymlink() {
|
||||
var must = func(err error) {
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
var stop = func(c ...chan<- notify.EventInfo) {
|
||||
for _, c := range c {
|
||||
notify.Stop(c)
|
||||
}
|
||||
}
|
||||
|
||||
// Make the channels buffered to ensure no event is dropped. Notify will drop
|
||||
// an event if the receiver is not able to keep up the sending pace.
|
||||
dir := make(chan notify.EventInfo, 1)
|
||||
file := make(chan notify.EventInfo, 1)
|
||||
symlink := make(chan notify.EventInfo, 1)
|
||||
all := make(chan notify.EventInfo, 1)
|
||||
|
||||
// Set up a single watchpoint listening for FSEvents-specific events on
|
||||
// multiple user-provided channels.
|
||||
must(notify.Watch(".", dir, notify.FSEventsIsDir))
|
||||
must(notify.Watch(".", file, notify.FSEventsIsFile))
|
||||
must(notify.Watch(".", symlink, notify.FSEventsIsSymlink))
|
||||
must(notify.Watch(".", all, notify.All))
|
||||
defer stop(dir, file, symlink, all)
|
||||
|
||||
// Block until an event is received.
|
||||
select {
|
||||
case ei := <-dir:
|
||||
log.Println("The directory", ei.Path(), "has changed")
|
||||
case ei := <-file:
|
||||
log.Println("The file", ei.Path(), "has changed")
|
||||
case ei := <-symlink:
|
||||
log.Println("The symlink", ei.Path(), "has changed")
|
||||
case ei := <-all:
|
||||
var kind string
|
||||
|
||||
// Investigate underlying *notify.FSEvent struct to access more
|
||||
// information about the event.
|
||||
switch flags := ei.Sys().(*notify.FSEvent).Flags; {
|
||||
case flags¬ify.FSEventsIsFile != 0:
|
||||
kind = "file"
|
||||
case flags¬ify.FSEventsIsDir != 0:
|
||||
kind = "dir"
|
||||
case flags¬ify.FSEventsIsSymlink != 0:
|
||||
kind = "symlink"
|
||||
}
|
||||
|
||||
log.Printf("The %s under path %s has been %sd\n", kind, ei.Path(), ei.Event())
|
||||
}
|
||||
}
|
||||
|
||||
// FSEvents may report multiple filesystem actions with one, coalesced event.
|
||||
// Notify unscoalesces such event and dispatches series of single events
|
||||
// back to the user.
|
||||
//
|
||||
// This example shows how to coalesce events by investigating notify.(*FSEvent).ID
|
||||
// field, for the science.
|
||||
func ExampleWatch_darwinCoalesce() {
|
||||
// Make the channels buffered to ensure no event is dropped. Notify will drop
|
||||
// an event if the receiver is not able to keep up the sending pace.
|
||||
c := make(chan notify.EventInfo, 4)
|
||||
|
||||
// Set up a watchpoint listetning for events within current working directory.
|
||||
// Dispatch all platform-independent separately to c.
|
||||
if err := notify.Watch(".", c, notify.All); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer notify.Stop(c)
|
||||
|
||||
var id uint64
|
||||
var coalesced []notify.EventInfo
|
||||
|
||||
for ei := range c {
|
||||
switch n := ei.Sys().(*notify.FSEvent).ID; {
|
||||
case id == 0:
|
||||
id = n
|
||||
coalesced = []notify.EventInfo{ei}
|
||||
case id == n:
|
||||
coalesced = append(coalesced, ei)
|
||||
default:
|
||||
log.Printf("FSEvents reported a filesystem action with the following"+
|
||||
" coalesced events %v groupped by %d ID\n", coalesced, id)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user