| module Jekyll |
| module Commands |
| class Build < Command |
| class << self |
| # Create the Mercenary command for the Jekyll CLI for this Command |
| def init_with_program(prog) |
| prog.command(:build) do |c| |
| c.syntax "build [options]" |
| c.description "Build your site" |
| c.alias :b |
| |
| add_build_options(c) |
| |
| c.action do |_, options| |
| options["serving"] = false |
| Jekyll::Commands::Build.process(options) |
| end |
| end |
| end |
| |
| # Build your jekyll site |
| # Continuously watch if `watch` is set to true in the config. |
| def process(options) |
| # Adjust verbosity quickly |
| Jekyll.logger.adjust_verbosity(options) |
| |
| options = configuration_from_options(options) |
| site = Jekyll::Site.new(options) |
| |
| if options.fetch("skip_initial_build", false) |
| Jekyll.logger.warn "Build Warning:", "Skipping the initial build." \ |
| " This may result in an out-of-date site." |
| else |
| build(site, options) |
| end |
| |
| if options.fetch("detach", false) |
| Jekyll.logger.info "Auto-regeneration:", |
| "disabled when running server detached." |
| elsif options.fetch("watch", false) |
| watch(site, options) |
| else |
| Jekyll.logger.info "Auto-regeneration:", "disabled. Use --watch to enable." |
| end |
| end |
| |
| # Build your Jekyll site. |
| # |
| # site - the Jekyll::Site instance to build |
| # options - A Hash of options passed to the command |
| # |
| # Returns nothing. |
| def build(site, options) |
| t = Time.now |
| source = options["source"] |
| destination = options["destination"] |
| incremental = options["incremental"] |
| Jekyll.logger.info "Source:", source |
| Jekyll.logger.info "Destination:", destination |
| Jekyll.logger.info "Incremental build:", |
| (incremental ? "enabled" : "disabled. Enable with --incremental") |
| Jekyll.logger.info "Generating..." |
| process_site(site) |
| Jekyll.logger.info "", "done in #{(Time.now - t).round(3)} seconds." |
| end |
| |
| # Private: Watch for file changes and rebuild the site. |
| # |
| # site - A Jekyll::Site instance |
| # options - A Hash of options passed to the command |
| # |
| # Returns nothing. |
| def watch(site, options) |
| # Warn Windows users that they might need to upgrade. |
| if Utils::Platforms.bash_on_windows? |
| Jekyll.logger.warn "", |
| "Auto-regeneration may not work on some Windows versions." |
| Jekyll.logger.warn "", |
| "Please see: https://github.com/Microsoft/BashOnWindows/issues/216" |
| Jekyll.logger.warn "", |
| "If it does not work, please upgrade Bash on Windows or "\ |
| "run Jekyll with --no-watch." |
| end |
| |
| External.require_with_graceful_fail "jekyll-watch" |
| watch_method = Jekyll::Watcher.method(:watch) |
| if watch_method.parameters.size == 1 |
| watch_method.call( |
| options |
| ) |
| else |
| watch_method.call( |
| options, site |
| ) |
| end |
| end |
| end # end of class << self |
| end |
| end |
| end |