lib/gitdocs/manager.rb in gitdocs-0.3.6 vs lib/gitdocs/manager.rb in gitdocs-0.4.0
- old
+ new
@@ -9,46 +9,38 @@
@debug = debug
yield @config if block_given?
end
def run
- loop do
+ run = true
+ trap('USR1') { run = true; EM.stop }
+ while run
+ run = false
puts "Gitdocs v#{VERSION}" if self.debug
puts "Using configuration root: '#{self.config.config_root}'" if self.debug
puts "Shares: #{config.shares.map(&:inspect).join(", ")}" if self.debug
# Start the repo watchers
- runners = []
- threads = config.shares.map do |share|
- t = Thread.new(runners) { |r|
- runner = Runner.new(share)
- r << runner
- runner.run
- }
- t.abort_on_exception = true
- t
- end
- trap("USR1") { puts "stopping threads: #{threads.map(&:alive?)}"; runners.each { |r| r.listener.stop } }
- sleep 1
- unless @pid
+ runners = nil
+ EM.run do
+ runners = config.shares.map { |share| Runner.new(share) }
+ runners.each(&:run)
# Start the web front-end
- @pid = fork { Server.new(self, *runners).start }
- at_exit { Process.kill("KILL", @pid) rescue nil }
+ if self.config.global.start_web_frontend
+ Server.new(self, *runners).start
+ i = 0
+ web_started = false
+ begin
+ TCPSocket.open('127.0.0.1', 8888).close
+ web_started = true
+ rescue Errno::ECONNREFUSED
+ sleep 0.2
+ i += 1
+ retry if i <= 20
+ end
+ system("open http://localhost:8888/") if self.config.global.load_browser_on_startup && web_started
+ end
end
- puts "Watch threads: #{threads.map { |t| "Thread status: '#{t.status}', running: #{t.alive?}" }}" if self.debug
- puts "Joined #{threads.size} watch threads...running" if self.debug
- i = 0
- web_started = false
- begin
- TCPSocket.open('127.0.0.1', 8888).close
- web_started = true
- rescue Errno::ECONNREFUSED
- sleep 0.2
- i += 1
- retry if i <= 20
- end
- system("open http://localhost:8888/") if self.config.global.load_browser_on_startup && web_started
- threads.each(&:join)
- sleep(60) if threads.empty?
+ sleep(10) if runners && runners.empty?
end
end
def restart
Process.kill("USR1", Process.pid)
\ No newline at end of file