1// Copyright 2012 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// +build !plan9 6 7// Package fsnotify provides a platform-independent interface for file system notifications. 8package fsnotify 9 10import ( 11 "bytes" 12 "errors" 13 "fmt" 14) 15 16// Event represents a single file system notification. 17type Event struct { 18 Name string // Relative path to the file or directory. 19 Op Op // File operation that triggered the event. 20} 21 22// Op describes a set of file operations. 23type Op uint32 24 25// These are the generalized file operations that can trigger a notification. 26const ( 27 Create Op = 1 << iota 28 Write 29 Remove 30 Rename 31 Chmod 32) 33 34func (op Op) String() string { 35 // Use a buffer for efficient string concatenation 36 var buffer bytes.Buffer 37 38 if op&Create == Create { 39 buffer.WriteString("|CREATE") 40 } 41 if op&Remove == Remove { 42 buffer.WriteString("|REMOVE") 43 } 44 if op&Write == Write { 45 buffer.WriteString("|WRITE") 46 } 47 if op&Rename == Rename { 48 buffer.WriteString("|RENAME") 49 } 50 if op&Chmod == Chmod { 51 buffer.WriteString("|CHMOD") 52 } 53 if buffer.Len() == 0 { 54 return "" 55 } 56 return buffer.String()[1:] // Strip leading pipe 57} 58 59// String returns a string representation of the event in the form 60// "file: REMOVE|WRITE|..." 61func (e Event) String() string { 62 return fmt.Sprintf("%q: %s", e.Name, e.Op.String()) 63} 64 65// Common errors that can be reported by a watcher 66var ( 67 ErrEventOverflow = errors.New("fsnotify queue overflow") 68) 69