64 lines
1.8 KiB
Ruby
Executable file
64 lines
1.8 KiB
Ruby
Executable file
#!/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?"
|
|
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
|
|
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!
|
|
end |