diff --git a/CHANGELOG.md b/CHANGELOG.md index 69b26c1a..745358c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ * config.rb and extensions can add command-line commands * Nested layouts using `wrap_layout` helper * Support for placekitten.com +* Added MM_ROOT environmental variable 2.0.14 ==== diff --git a/bin/middleman b/bin/middleman index 15e70f55..acc6642c 100755 --- a/bin/middleman +++ b/bin/middleman @@ -1,64 +1,30 @@ #!/usr/bin/env ruby -libdir = File.join(File.dirname(File.dirname(__FILE__)), "lib") +require "rubygems" +require "pathname" + +libdir = File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), "lib")) $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir) -require 'pathname' -require 'rubygems' +ARGV << "server" if ARGV.length < 1 -module Middleman - module ProjectLocator - class << self - def locate_middleman_root! - cwd = Dir.pwd - - if !in_middleman_project? && !in_middleman_project_subdirectory? - $stderr.puts "== Error: Could not find a Middleman project config, perhaps you are in the wrong folder?" - exit(1) - end - - if in_middleman_project? - did_locate_middleman_project(cwd) - return - end - - Dir.chdir("..") do - # Recurse in a chdir block: if the search fails we want to be sure - # the application is generated in the original working directory. - locate_middleman_root! unless cwd == Dir.pwd - end - rescue SystemCallError - # could not chdir, no problem just return - end - - def in_middleman_project? - File.exists?('config.rb') - end - - def in_middleman_project_subdirectory?(path = Pathname.new(Dir.pwd)) - File.exists?(File.join(path, 'config.rb')) || !path.root? && in_middleman_project_subdirectory?(path.parent) - end - - def did_locate_middleman_project(path) - # Set up gems listed in the Gemfile. - ENV['BUNDLE_GEMFILE'] ||= File.expand_path('Gemfile', path) - - require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) - - start_cli! - end - - def start_cli! - require 'middleman' - Middleman::Cli::Base.start - end - end - end +def locate_middleman_root!(cwd = Pathname.new(Dir.pwd)) + return cwd.to_s if File.exists?(File.join(cwd, 'config.rb')) + return false if cwd.root? + locate_middleman_root!(cwd.parent) end -ARGV << "server" if ARGV.length < 1 -if %w(server s build b).include?(ARGV[0]) - Middleman::ProjectLocator.locate_middleman_root! -else - Middleman::ProjectLocator.start_cli! +if !ENV['MM_ROOT'] && found_path = locate_middleman_root! + ENV['MM_ROOT'] = found_path +end + +if ENV['MM_ROOT'] + # Set up gems listed in the Gemfile. + ENV['BUNDLE_GEMFILE'] ||= File.expand_path('Gemfile', ENV['MM_ROOT']) + require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) +end + +require 'middleman' +Dir.chdir(ENV['MM_ROOT'] || Dir.pwd) do + Middleman::Cli::Base.start end \ No newline at end of file diff --git a/lib/middleman.rb b/lib/middleman.rb index dee9d74d..fb94a503 100755 --- a/lib/middleman.rb +++ b/lib/middleman.rb @@ -1,7 +1,7 @@ require "rbconfig" # Setup our load paths -libdir = File.dirname(__FILE__) +libdir = File.expand_path(File.dirname(__FILE__)) $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir) # Top-level Middleman object @@ -230,7 +230,7 @@ module Middleman 'webrick' # Maybe Kirk? else require "thin" - ::Thin::Logging.silent = !options[:is_logging] + ::Thin::Logging.silent = !options[:logging] 'thin' end diff --git a/lib/middleman/base.rb b/lib/middleman/base.rb index 6e362583..4eaf2f3a 100644 --- a/lib/middleman/base.rb +++ b/lib/middleman/base.rb @@ -147,7 +147,7 @@ class Middleman::Base # Root project directory (overwritten in middleman build/server) # @return [String] - set :root, Dir.pwd + set :root, ENV['MM_ROOT'] || Dir.pwd # Name of the source directory # @return [String] @@ -324,6 +324,8 @@ class Middleman::Base @req = Rack::Request.new(env) @res = Rack::Response.new + puts "== Request: #{env["PATH_INFO"]}" if logging? + if env["PATH_INFO"] == "/__middleman__" && env["REQUEST_METHOD"] == "POST" if req.params.has_key?("change") file_did_change(req.params["change"]) @@ -402,6 +404,7 @@ class Middleman::Base end # End the request + puts "== Finishing Request: #{self.current_path}" if logging? halt res.finish end diff --git a/lib/middleman/cli/build.rb b/lib/middleman/cli/build.rb index 6a09fa7b..07ab4aa2 100644 --- a/lib/middleman/cli/build.rb +++ b/lib/middleman/cli/build.rb @@ -25,6 +25,11 @@ module Middleman::Cli :default => nil, :desc => 'Build a subset of the project' def build + if !ENV["MM_ROOT"] + $stderr.puts "== Error: Could not find a Middleman project config, perhaps you are in the wrong folder?" + exit(1) + end + if options.has_key?("relative") && options["relative"] self.class.shared_instance.activate :relative_assets end diff --git a/lib/middleman/cli/server.rb b/lib/middleman/cli/server.rb index b9befb45..d727763f 100644 --- a/lib/middleman/cli/server.rb +++ b/lib/middleman/cli/server.rb @@ -19,16 +19,21 @@ module Middleman::Cli :aliases => "-p", :default => "4567", :desc => "The port Middleman will listen on" - method_option "debug", + method_option "verbose", :type => :boolean, :default => false, :desc => 'Print debug messages' def server + if !ENV["MM_ROOT"] + $stderr.puts "== Error: Could not find a Middleman project config, perhaps you are in the wrong folder?" + exit(1) + end + params = { :port => options["port"], :host => options["host"], :environment => options["environment"], - :debug => options["debug"] + :debug => options["verbose"] } puts "== The Middleman is loading" diff --git a/lib/middleman/sitemap/template.rb b/lib/middleman/sitemap/template.rb index e845d742..d1ab18c7 100644 --- a/lib/middleman/sitemap/template.rb +++ b/lib/middleman/sitemap/template.rb @@ -57,6 +57,8 @@ module Middleman::Sitemap end def render(opts={}, locs={}, &block) + puts "== Render Start: #{source_file}" if app.logging? + md = metadata.dup opts = options.deep_merge(md[:options]).deep_merge(opts) locs = locals.deep_merge(md[:locals]).deep_merge(locs) @@ -71,7 +73,10 @@ module Middleman::Sitemap end app.instance_eval(&block) if block_given? - app.render_template(source_file, locs, opts) + result = app.render_template(source_file, locs, opts) + + puts "== Render End: #{source_file}" if app.logging? + result end end end \ No newline at end of file