lib/taskjuggler/Tj3AppBase.rb in taskjuggler-3.1.0 vs lib/taskjuggler/Tj3AppBase.rb in taskjuggler-3.2.0
- old
+ new
@@ -16,19 +16,19 @@
require 'term/ansicolor'
require 'taskjuggler/Tj3Config'
require 'taskjuggler/RuntimeConfig'
require 'taskjuggler/TjTime'
require 'taskjuggler/TextFormatter'
+require 'taskjuggler/MessageHandler'
require 'taskjuggler/Log'
class TaskJuggler
- class TjRuntimeError < RuntimeError
- end
-
class Tj3AppBase
+ include MessageHandler
+
def initialize
# Indent and width of options. The deriving class may has to change
# this.
@optsSummaryWidth = 22
@optsSummaryIndent = 5
@@ -40,10 +40,13 @@
# If stdout is not a tty, we don't use ANSI escape sequences to color
# the terminal output. Additionally, we have the --no-color option to
# force colors off in case this does not work properly.
Term::ANSIColor.coloring = STDOUT.tty?
+
+ # Make sure the MessageHandler is set to default values.
+ MessageHandlerInstance.instance.reset
end
def processArguments(argv)
@opts = OptionParser.new
@opts.summary_width = @optsSummaryWidth
@@ -64,10 +67,11 @@
@configFile = arg
end
@opts.on('--silent',
format("Don't show program and progress information")) do
@silent = true
+ MessageHandlerInstance.instance.outputLevel = :warning
TaskJuggler::Log.silent = true
end
@opts.on('--no-color',
format(<<'EOT'
Don't use ANSI contol sequences to color the terminal output. Colors should
@@ -95,28 +99,34 @@
begin
files = @opts.parse(argv)
rescue OptionParser::ParseError => msg
puts @opts.to_s + "\n"
- error(msg.message, 2)
+ error('tj3app_bad_cmd_options', msg.message)
end
files
end
def main(argv = ARGV)
if Gem::Version.new(RUBY_VERSION.dup) <
Gem::Version.new(@mininumRubyVersion)
- error('This program requires at least Ruby version ' +
+ error('tj3app_ruby_version',
+ 'This program requires at least Ruby version ' +
"#{@mininumRubyVersion}!")
end
# Install signal handler to exit gracefully on CTRL-C.
intHandler = Kernel.trap('INT') do
- error("Aborting on user request!")
+ begin
+ fatal('tj3app_user_abort', "Aborting on user request!")
+ rescue RuntimeError
+ exit 1
+ end
end
+ retVal = 0
begin
args = processArguments(argv)
# If DEBUG mode has been enabled, we restore the INT trap handler again
# to get Ruby backtrackes.
@@ -130,33 +140,42 @@
"#{AppConfig.license}\n"
end
@rc = RuntimeConfig.new(AppConfig.packageName, @configFile)
- appMain(args)
+ begin
+ MessageHandlerInstance.instance.trapSetup = true
+ retVal = appMain(args)
+ MessageHandlerInstance.instance.trapSetup = false
+ rescue TjRuntimeError
+ # We have hit a sitatuation that we can't recover from. A message
+ # was severed via the MessageHandler to inform the user and we now
+ # abort the program.
+ return 1
+ end
+
rescue Exception => e
if e.is_a?(SystemExit) || e.is_a?(Interrupt)
# Don't show backtrace on user interrupt unless we are in debug mode.
$stderr.puts e.backtrace.join("\n") if $DEBUG
1
else
- error("Ups, you have triggered a bug in #{AppConfig.softwareName}!\n" +
- "#{e}\n" +
- e.backtrace.join("\n") +
- "Please see the user manual on how to get this bug fixed!")
+ fatal('crash_trap', "#{e}\n#{e.backtrace.join("\n")}\n\n" +
+ "#{'*' * 79}\nYou have triggered a bug in " +
+ "#{AppConfig.softwareName} version #{AppConfig.version}!\n" +
+ "Please see the user manual on how to get this bug fixed!\n" +
+ "#{'*' * 79}\n")
end
end
+
+ # Exit value in case everything was fine.
+ retVal
end
private
def quit
exit 0
- end
-
- def error(message, exitVal = 1)
- $stderr.puts "\nERROR: #{message}"
- exit exitVal
end
def format(str, indent = nil)
indent = @optsSummaryWidth + @optsSummaryIndent + 1 unless indent
TextFormatter.new(79, indent).format(str)[indent..-1]