1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- require "bundler/gem_tasks"
- require "jekyll"
- require "listen"
- def listen_ignore_paths(base, options)
- [
- /_config\.ya?ml/,
- /_site/,
- /\.jekyll-metadata/
- ]
- end
- def listen_handler(base, options)
- site = Jekyll::Site.new(options)
- Jekyll::Command.process_site(site)
- proc do |modified, added, removed|
- t = Time.now
- c = modified + added + removed
- n = c.length
- relative_paths = c.map{ |p| Pathname.new(p).relative_path_from(base).to_s }
- print Jekyll.logger.message("Regenerating:", "#{relative_paths.join(", ")} changed... ")
- begin
- Jekyll::Command.process_site(site)
- puts "regenerated in #{Time.now - t} seconds."
- rescue => e
- puts "error:"
- Jekyll.logger.warn "Error:", e.message
- Jekyll.logger.warn "Error:", "Run jekyll build --trace for more information."
- end
- end
- end
- task :preview do
- base = Pathname.new('.').expand_path
- options = {
- "source" => base.join('test').to_s,
- "destination" => base.join('test/_site').to_s,
- "force_polling" => false,
- "serving" => true,
- "theme" => "minimal-mistakes-jekyll"
- }
- options = Jekyll.configuration(options)
- ENV["LISTEN_GEM_DEBUGGING"] = "1"
- listener = Listen.to(
- base.join("_data"),
- base.join("_includes"),
- base.join("_layouts"),
- base.join("_sass"),
- base.join("assets"),
- options["source"],
- :ignore => listen_ignore_paths(base, options),
- :force_polling => options['force_polling'],
- &(listen_handler(base, options))
- )
- begin
- listener.start
- Jekyll.logger.info "Auto-regeneration:", "enabled for '#{options["source"]}'"
- unless options['serving']
- trap("INT") do
- listener.stop
- puts " Halting auto-regeneration."
- exit 0
- end
- loop { sleep 1000 }
- end
- rescue ThreadError
- # You pressed Ctrl-C, oh my!
- end
- Jekyll::Commands::Serve.process(options)
- end
|