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