X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=bin%2Fmailshears;h=2c91f17de15408283de45cf48fad6f79cd95dfc7;hp=4d69f8fb67ab2df8a7615e4601b01e8228617a84;hb=3de4ec0727320a41d1be4f37973ffc81abc91d36;hpb=95436a8be4f7d084e0a300fd5233975d5eba3926 diff --git a/bin/mailshears b/bin/mailshears index 4d69f8f..2c91f17 100755 --- a/bin/mailshears +++ b/bin/mailshears @@ -30,16 +30,27 @@ end require 'mailshears' # Since we removed both the executable name and the mode name (if it -# existed) from ARGV, what remains should be the required -# arguments. -if (mode == :prune and (ARGV.length() != 0)) or - (mode == :rm and (ARGV.length() < 1)) or - (mode == :mv and (ARGV.length() != 2)) then - puts "ERROR: missing (or extra) command-line arguments." +# existed) from ARGV, what remains should be the required arguments. +# Figure out if we have the wrong number of arguments, and store the +# associated error message in args_error_message if we do. +args_error_message = nil +if mode == :prune and ARGV.length() != 0 then + args_error_message = "ERROR: prune mode takes no additional arguments." +elsif mode == :rm and ARGV.length() < 1 then + args_error_message = "ERROR: rm mode takes two or more user arguments." +elsif mode == :mv and ARGV.length() != 2 then + args_error_message = "ERROR: mv mode takes exactly two user arguments." +end + +# If we got the wrong number of arguments, we'll have some error +# message. Report it and quit. +if not args_error_message.nil? then + STDERR.puts args_error_message puts "Usage: #{usage}" Kernel.exit(ExitCodes::BAD_COMMAND_LINE) end + cfg = Configuration.new() # Load each of the plugins that we'll need. @@ -84,15 +95,32 @@ else plugin_module = PrunePlugin end - # Buffer the output so that we can avoid printing the informational # header when no plugins produce output. require 'stringio' output_buffer = StringIO.new() $stdout = output_buffer +# Parse the remaining arguments as User/Domain objects. If we get some +# other argument that isn't one of those, it's an error. +parsed_args = [] +ARGV.each do |arg| + begin + u = User.new(arg) + parsed_args << u + rescue InvalidUserError + begin + d = Domain.new(arg) + parsed_args << d + rescue InvalidDomainError + STDERR.puts "ERROR: invalid user/domain argument #{arg}" + Kernel.exit(ExitCodes::BAD_COMMAND_LINE) + end + end +end + begin - plugin_module.run(cfg, *ARGV) + plugin_module.run(cfg, *parsed_args) ensure # Now restore stdout, and print the header plus whatever the plugins # produced if they produced anything. If they didn't produce any