Suggest re-running command with --trace on fail (#6551)

Merge pull request 6551
This commit is contained in:
Ashwin Maroli 2018-05-03 18:23:30 +05:30 committed by jekyllbot
parent 1eff0214d1
commit 7e1afd32a5
3 changed files with 34 additions and 18 deletions

View File

@ -73,6 +73,30 @@ module Jekyll
"Fail if errors are present in front matter"
end
# rubocop:enable Metrics/MethodLength
# Run ::process method in a given set of Jekyll::Command subclasses and suggest
# re-running the associated command with --trace switch to obtain any additional
# information or backtrace regarding the encountered Exception.
#
# cmd - the Jekyll::Command to be handled
# options - configuration overrides
# klass - an array of Jekyll::Command subclasses associated with the command
#
# Note that all exceptions are rescued..
# rubocop: disable RescueException
def process_with_graceful_fail(cmd, options, *klass)
klass.each { |k| k.process(options) if k.respond_to?(:process) }
rescue Exception => e
raise e if cmd.trace
msg = " Please append `--trace` to the `#{cmd.name}` command "
dashes = "-" * msg.length
Jekyll.logger.error "", dashes
Jekyll.logger.error "Jekyll #{Jekyll::VERSION} ", msg
Jekyll.logger.error "", " for any additional information or backtrace. "
Jekyll.logger.abort_with "", dashes
end
# rubocop: enable RescueException
end
end
end

View File

@ -15,7 +15,7 @@ module Jekyll
c.action do |_, options|
options["serving"] = false
Jekyll::Commands::Build.process(options)
process_with_graceful_fail(c, options, self)
end
end
end

View File

@ -72,25 +72,17 @@ module Jekyll
opts["serving"] = true
opts["watch"] = true unless opts.key?("watch")
start(opts)
end
end
end
#
def start(opts)
# Set the reactor to nil so any old reactor will be GCed.
# We can't unregister a hook so in testing when Serve.start is
# called multiple times we don't want to inadvertently keep using
# a reactor created by a previous test when our test might not
# We can't unregister a hook so while running tests we don't want to
# inadvertently keep using a reactor created by a previous test.
@reload_reactor = nil
config = configuration_from_options(opts)
if Jekyll.env == "development"
config["url"] = default_url(config)
config["url"] = default_url(config) if Jekyll.env == "development"
process_with_graceful_fail(cmd, config, Build, Serve)
end
end
[Build, Serve].each { |klass| klass.process(config) }
end
#