| //go:build !plan9 |
| // +build !plan9 |
| |
| // Package fsnotify provides a cross-platform interface for file system |
| // notifications. |
| package fsnotify |
| |
| import ( |
| "errors" |
| "fmt" |
| "strings" |
| ) |
| |
| // Event represents a file system notification. |
| type Event struct { |
| // Path to the file or directory. |
| // |
| // Paths are relative to the input; for example with Add("dir") the Name |
| // will be set to "dir/file" if you create that file, but if you use |
| // Add("/path/to/dir") it will be "/path/to/dir/file". |
| Name string |
| |
| // File operation that triggered the event. |
| // |
| // This is a bitmask and some systems may send multiple operations at once. |
| // Use the Event.Has() method instead of comparing with ==. |
| Op Op |
| } |
| |
| // Op describes a set of file operations. |
| type Op uint32 |
| |
| // The operations fsnotify can trigger; see the documentation on [Watcher] for a |
| // full description, and check them with [Event.Has]. |
| const ( |
| Create Op = 1 << iota |
| Write |
| Remove |
| Rename |
| Chmod |
| ) |
| |
| // Common errors that can be reported by a watcher |
| var ( |
| ErrNonExistentWatch = errors.New("can't remove non-existent watcher") |
| ErrEventOverflow = errors.New("fsnotify queue overflow") |
| ) |
| |
| func (op Op) String() string { |
| var b strings.Builder |
| if op.Has(Create) { |
| b.WriteString("|CREATE") |
| } |
| if op.Has(Remove) { |
| b.WriteString("|REMOVE") |
| } |
| if op.Has(Write) { |
| b.WriteString("|WRITE") |
| } |
| if op.Has(Rename) { |
| b.WriteString("|RENAME") |
| } |
| if op.Has(Chmod) { |
| b.WriteString("|CHMOD") |
| } |
| if b.Len() == 0 { |
| return "[no events]" |
| } |
| return b.String()[1:] |
| } |
| |
| // Has reports if this operation has the given operation. |
| func (o Op) Has(h Op) bool { return o&h == h } |
| |
| // Has reports if this event has the given operation. |
| func (e Event) Has(op Op) bool { return e.Op.Has(op) } |
| |
| // String returns a string representation of the event with their path. |
| func (e Event) String() string { |
| return fmt.Sprintf("%-13s %q", e.Op.String(), e.Name) |
| } |