| #!/usr/bin/env ruby |
| |
| require 'optparse' |
| require 'pathname' |
| require 'webrick/htmlutils' |
| |
| $LOAD_PATH << Pathname.new(__FILE__).dirname.realpath.to_s |
| |
| require 'PrettyPatch' |
| |
| BACKTRACE_SEPARATOR = "\n\tfrom " |
| |
| options = { :html_exceptions => false } |
| OptionParser.new do |opts| |
| opts.banner = "Usage: #{File.basename($0)} [options] [patch-file]" |
| |
| opts.separator "" |
| |
| opts.on("--html-exceptions", "Print exceptions to stdout as HTML") { |h| options[:html_exceptions] = h } |
| end.parse! |
| |
| patch_data = nil |
| if ARGV.length == 0 || ARGV[0] == '-' then |
| patch_data = $stdin.read |
| else |
| File.open(ARGV[0]) { |file| patch_data = file.read } |
| end |
| |
| begin |
| puts PrettyPatch.prettify(patch_data) |
| rescue => exception |
| raise unless options[:html_exceptions] |
| |
| backtrace = exception.backtrace |
| backtrace[0] += ": " + exception + " (" + exception.class.to_s + ")" |
| print "<pre>\n", WEBrick::HTMLUtils::escape(backtrace.join(BACKTRACE_SEPARATOR)), "\n</pre>\n" |
| end |