32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 
     | 
    
      # File 'lib/hyde/commands/build.rb', line 32
def self.watch(site, options)
  require 'listen'
  
  source = options['source']
  template = options['template']['directory']
  ignored = Array.new
  %w[intermediary destination].each do |o|
    begin
      d = Pathname.new(options[o]['directory']).relative_path_from(Pathname.new(source)).to_s
      ignored << Regexp.escape(d)
    rescue ArgumentError
          end
  end
  
  if ignored.empty?
    ignored = nil
  else
    ignored = Regexp.new(ignored.join('|'))
  end
  
  Hyde.logger.info 'Auto-regeneration:', 'enabled'
  
  listener = Listen::Listener.new([source, template], :ignore => ignored) do |modified, added, removed|
    t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
    n = modified.length + added.length + removed.length
    Hyde.logger.info "Regenerating:", "#{n} files at #{t} "
    
    site.process
    
    Hyde.logger.info "", "done."
  end
  listener.start
  unless options['serving']
    trap("INT") do
      options['watching'] = false
      
      listener.stop
      site.cleanup
      
      puts "     Halting auto-regeneration."
      exit 0
    end
    loop { sleep 1000 }
  end
end
     |