#!/usr/bin/env ruby libdir = File.join(File.dirname(File.dirname(__FILE__)), "lib") $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir) require 'pathname' require 'rubygems' 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?" return 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 end if ARGV.length < 1 || %w(server build migrate).include?(ARGV.first) Middleman::ProjectLocator.locate_middleman_root! else Middleman::ProjectLocator.start_cli! end