Add bin/jekyll2 and initial BuildCommand
The `BuildCommand` class is responsible for handling the building of the site. It can also optionally watch for changes to files and regenerate the site if needed. The `Command` class holds any methods which are used by any command implementation.
This commit is contained in:
parent
6c0c5b6187
commit
14766497c8
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
$:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })
|
||||
|
||||
require 'commander/import'
|
||||
require 'jekyll'
|
||||
|
||||
# Details about Jekyll
|
||||
program :name, 'jekyll'
|
||||
program :version, Jekyll::VERSION
|
||||
program :description, 'Jekyll is a blog-aware, static site generator in Ruby'
|
||||
|
||||
# Global options available to every command
|
||||
global_option '-s', '--source DIR', String, 'Source directory'
|
||||
global_option '-d', '--destination DIR', String, 'Destination directory'
|
||||
|
||||
# Build command
|
||||
#
|
||||
# Args:
|
||||
# --source
|
||||
# --destination
|
||||
# --watch
|
||||
command :build do |c|
|
||||
c.syntax = 'jekyll build [options]'
|
||||
c.description = 'Build...'
|
||||
c.option '-w', '--watch', 'Watch for changes and rebuild'
|
||||
c.action do |args, options|
|
||||
options.default :watch => false
|
||||
Jekyll::BuildCommand.process(options)
|
||||
end
|
||||
end
|
|
@ -41,6 +41,9 @@ require 'jekyll/errors'
|
|||
require 'jekyll/plugin'
|
||||
require 'jekyll/converter'
|
||||
require 'jekyll/generator'
|
||||
require 'jekyll/command'
|
||||
|
||||
require_all 'jekyll/commands'
|
||||
require_all 'jekyll/converters'
|
||||
require_all 'jekyll/generators'
|
||||
require_all 'jekyll/tags'
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
module Jekyll
|
||||
|
||||
class Command
|
||||
def self.globs(source)
|
||||
Dir.chdir(source) do
|
||||
dirs = Dir['*'].select { |x| File.directory?(x) }
|
||||
dirs -= ['_site']
|
||||
dirs = dirs.map { |x| "#{x}/**/*" }
|
||||
dirs += ['*']
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
|
@ -0,0 +1,77 @@
|
|||
module Jekyll
|
||||
|
||||
class BuildCommand < Command
|
||||
def self.process(options)
|
||||
opts = {}
|
||||
options.__hash__.map do |k,v|
|
||||
opts[k.to_s] = v
|
||||
end
|
||||
|
||||
opts = Jekyll.configuration(opts)
|
||||
site = Jekyll::Site.new(opts)
|
||||
|
||||
source = opts['source']
|
||||
destination = opts['destination']
|
||||
|
||||
if opts['watch']
|
||||
self.watch(site, source, destination)
|
||||
else
|
||||
self.build(site, source, destination)
|
||||
end
|
||||
end
|
||||
|
||||
# Private: Build the site from source into destination.
|
||||
#
|
||||
# site - A Jekyll::Site instance
|
||||
# source - A String of the source path
|
||||
# destination - A String of the destination path
|
||||
#
|
||||
# Returns nothing.
|
||||
def self.build(site, source, destination)
|
||||
puts "Building site: #{source} -> #{destination}"
|
||||
begin
|
||||
site.process
|
||||
rescue Jekyll::FatalException => e
|
||||
puts
|
||||
puts "ERROR: YOUR SITE COULD NOT BE BUILT:"
|
||||
puts "------------------------------------"
|
||||
puts e.message
|
||||
exit(1)
|
||||
end
|
||||
puts "Successfully generated site: #{source} -> #{destination}"
|
||||
end
|
||||
|
||||
# Private: Watch for file changes and rebuild the site.
|
||||
#
|
||||
# site - A Jekyll::Site instance
|
||||
# source - A String of the source path
|
||||
# destination - A String of the destination path
|
||||
#
|
||||
# Returns nothing.
|
||||
def self.watch(site, source, destination)
|
||||
require 'directory_watcher'
|
||||
|
||||
puts "Auto-Regenerating enabled: #{source} -> #{destination}"
|
||||
|
||||
dw = DirectoryWatcher.new(source)
|
||||
dw.interval = 1
|
||||
dw.glob = self.globs(source)
|
||||
|
||||
dw.add_observer do |*args|
|
||||
t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
||||
puts "[#{t} regeneration: #{args.size} files changed"
|
||||
site.process
|
||||
end
|
||||
|
||||
dw.start
|
||||
|
||||
trap("SIGINT") do
|
||||
puts "Stopping auto-regeneration..."
|
||||
exit 0
|
||||
end
|
||||
|
||||
loop { sleep 1000 }
|
||||
end
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in New Issue