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
|