aboutsummaryrefslogblamecommitdiffstats
path: root/vendor/github.com/rjeczalik/notify/event_inotify.go
blob: 1f32bb73e0f2dd290ae0fbdbd78549e6b86df4a9 (plain) (tree)
1
2
3
4
5
6
7
8
9







                                                                     
                              

















                                                                                       











                                                                                  


















                                                                             




                                                 


                   
                               






                                                        
                                                                                   
// 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 linux

package notify

import "golang.org/x/sys/unix"

// Platform independent event values.
const (
    osSpecificCreate Event = 0x100000 << iota
    osSpecificRemove
    osSpecificWrite
    osSpecificRename
    // internal
    // recursive is used to distinguish recursive eventsets from non-recursive ones
    recursive
    // omit is used for dispatching internal events; only those events are sent
    // for which both the event and the watchpoint has omit in theirs event sets.
    omit
)

// Inotify specific masks are legal, implemented events that are guaranteed to
// work with notify package on linux-based systems.
const (
    InAccess       = Event(unix.IN_ACCESS)        // File was accessed
    InModify       = Event(unix.IN_MODIFY)        // File was modified
    InAttrib       = Event(unix.IN_ATTRIB)        // Metadata changed
    InCloseWrite   = Event(unix.IN_CLOSE_WRITE)   // Writtable file was closed
    InCloseNowrite = Event(unix.IN_CLOSE_NOWRITE) // Unwrittable file closed
    InOpen         = Event(unix.IN_OPEN)          // File was opened
    InMovedFrom    = Event(unix.IN_MOVED_FROM)    // File was moved from X
    InMovedTo      = Event(unix.IN_MOVED_TO)      // File was moved to Y
    InCreate       = Event(unix.IN_CREATE)        // Subfile was created
    InDelete       = Event(unix.IN_DELETE)        // Subfile was deleted
    InDeleteSelf   = Event(unix.IN_DELETE_SELF)   // Self was deleted
    InMoveSelf     = Event(unix.IN_MOVE_SELF)     // Self was moved
)

var osestr = map[Event]string{
    InAccess:       "notify.InAccess",
    InModify:       "notify.InModify",
    InAttrib:       "notify.InAttrib",
    InCloseWrite:   "notify.InCloseWrite",
    InCloseNowrite: "notify.InCloseNowrite",
    InOpen:         "notify.InOpen",
    InMovedFrom:    "notify.InMovedFrom",
    InMovedTo:      "notify.InMovedTo",
    InCreate:       "notify.InCreate",
    InDelete:       "notify.InDelete",
    InDeleteSelf:   "notify.InDeleteSelf",
    InMoveSelf:     "notify.InMoveSelf",
}

// Inotify behavior events are not **currently** supported by notify package.
const (
    inDontFollow = Event(unix.IN_DONT_FOLLOW)
    inExclUnlink = Event(unix.IN_EXCL_UNLINK)
    inMaskAdd    = Event(unix.IN_MASK_ADD)
    inOneshot    = Event(unix.IN_ONESHOT)
    inOnlydir    = Event(unix.IN_ONLYDIR)
)

type event struct {
    sys   unix.InotifyEvent
    path  string
    event Event
}

func (e *event) Event() Event         { return e.event }
func (e *event) Path() string         { return e.path }
func (e *event) Sys() interface{}     { return &e.sys }
func (e *event) isDir() (bool, error) { return e.sys.Mask&unix.IN_ISDIR != 0, nil }