From 2bb47049c115a02c87e505b1fbe5534da3b3d11f Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Wed, 27 Jun 2012 23:27:27 -0700 Subject: [PATCH] Clean up listener handling in preview server --- .../lib/middleman-core/preview_server.rb | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/middleman-core/lib/middleman-core/preview_server.rb b/middleman-core/lib/middleman-core/preview_server.rb index 434860b3..3d90d3a9 100644 --- a/middleman-core/lib/middleman-core/preview_server.rb +++ b/middleman-core/lib/middleman-core/preview_server.rb @@ -22,12 +22,14 @@ module Middleman set :logging, true end end + + port = options[:port] || DEFAULT_PORT - puts "== The Middleman is standing watch on port #{options[:port]||4567}" + puts "== The Middleman is standing watch on port #{port}" @webrick ||= setup_webrick( options[:host] || "0.0.0.0", - options[:port] || DEFAULT_PORT, + port, options[:debug] || false ) @@ -53,6 +55,10 @@ module Middleman # @return [void] def stop puts "== The Middleman is shutting down" + if @listener + @listener.stop + @listener = nil + end unmount_instance end @@ -76,16 +82,18 @@ module Middleman # Watcher Library require "listen" - listener = Listen.to(Dir.pwd, :relative_paths => true) + return if @listener + + @listener = Listen.to(Dir.pwd, :relative_paths => true) - listener.change do |modified, added, removed| + @listener.change do |modified, added, removed| added_and_modified = (modified + added) - if added_and_modified.length > 0 + unless added_and_modified.empty? # See if the changed file is config.rb or lib/*.rb if needs_to_reload?(added_and_modified) reload - return listener.stop + return end # Otherwise forward to Middleman @@ -94,11 +102,11 @@ module Middleman end end - if removed.length > 0 + unless removed.empty? # See if the changed file is config.rb or lib/*.rb if needs_to_reload?(removed) reload - return listener.stop + return end # Otherwise forward to Middleman @@ -109,7 +117,7 @@ module Middleman end # Don't block this thread - listener.start(false) + @listener.start(false) end # Trap the interupt signal and shut down smoothly