- if leftover_domains.size > 0 or leftover_accounts.size > 0
- # The header that we output before the list of domains/accounts.
- # Just the path of this script, the current time, and the plugin name.
- header = "#{$0}, "
-
- current_time = Time.now()
- if current_time.respond_to?(:iso8601)
- # Somehow this method is missing on some machines.
- header += current_time.iso8601.to_s
- else
- # Fall back to whatever this looks like.
- header += current_time.to_s + "\n"
- end
-
- header += 'Plugin: ' + plugin_class.to_s + "\n"
- puts header
- puts '-' * header.size # Underline the header.
-
- leftover_domains.each do |domain|
- puts "Found: #{domain} (#{plugin.describe_domain(domain)})"
- end
-
- leftover_accounts.each do |account|
- puts "Found: #{account} (#{plugin.describe_account(account)})"
- end
-
- if Configuration::I_MEAN_BUSINESS
- leftover_domains.each do |domain|
- plugin.delete_domain(domain)
- puts "Removed: #{domain} (#{plugin.describe_domain(domain)})"
- end
-
- leftover_accounts.each do |account|
- begin
- plugin.delete_account(account)
- puts "Removed: #{account} (#{plugin.describe_account(account)})"
- rescue NonexistentAccountError => e
- # This usually happens after an account's domain is deleted.
- # When we try to delete the account, it's already gone.
- puts "Gone: #{account} (#{plugin.describe_account(account)})"
- end
- end
- end
-
- puts ""
+begin
+ plugin_module.run(cfg, *ARGV)
+ensure
+ # Now restore stdout, and print the header plus whatever the plugins
+ # produced if they produced anything. If they didn't produce any
+ # output, then we avoid printing the header.
+ #
+ # This gets wrapped in an "ensure" block because otherwise, if
+ # plugin_module.run() crashes, the traceback will get stored in
+ # output_buffer and never get printed.
+ $stdout = STDOUT
+ if output_buffer.size > 0 then
+ puts make_header(plugin_module.to_s())
+ puts output_buffer.string()