class Build::Files::Monitor
def add(handle)
def add(handle) handle.directories.each do |directory| @directories[directory] << handle # We just added the first handle: if @directories[directory].size == 1 # If the handle already existed, this might trigger unnecessarily. @updated = true end end handle end
def delete(handle)
def delete(handle) handle.directories.each do |directory| @directories[directory].delete(handle) # Remove the entire record if there are no handles: if @directories[directory].size == 0 @directories.delete(directory) @updated = true end end end
def initialize
def initialize @directories = Hash.new { |hash, key| hash[key] = Set.new } @updated = false end
def roots
def roots @directories.keys end
def track_changes(files, &block)
def track_changes(files, &block) handle = Handle.new(self, files, &block) add(handle) end
def update(directories, *args)
def update(directories, *args) directories.each do |directory| # directory = File.realpath(directory) @directories[directory].each do |handle| handle.changed!(*args) end end end