Added --cut option to the command line to allow pruning of the crontab

This commit is contained in:
Peer Allan 2010-09-09 00:58:19 +08:00 committed by Javan Makhmali
parent f17c8d8cd2
commit 3e20f936eb
3 changed files with 60 additions and 2 deletions

View File

@ -10,6 +10,9 @@ OptionParser.new do |opts|
opts.banner = "Usage: whenever [options]"
opts.on('-v', '--version') { puts "Whenever v#{Whenever::VERSION}"; exit(0) }
opts.on('-w', '--write-crontab') { options[:write] = true }
opts.on('-c', '--cut [lines]', 'Cut lines from the top of the cronfile') do |lines|
options[:cut] = lines.to_i if lines
end
opts.on('-i', '--update-crontab [identifier]', 'Default: full path to schedule.rb file') do |identifier|
options[:update] = true
options[:identifier] = identifier if identifier

View File

@ -12,6 +12,7 @@ module Whenever
@options = options
@options[:file] ||= 'config/schedule.rb'
@options[:cut] ||= 0
@options[:identifier] ||= default_identifier
unless File.exists?(@options[:file])
@ -23,6 +24,13 @@ module Whenever
warn("[fail] Can only update, write or clear. Choose one.")
exit(1)
end
unless @options[:cut].to_s =~ /[0-9]*/
warn("[fail] Can't cut negative lines from the crontab #{options[:cut]}")
exit(1)
end
@options[:cut] = @options[:cut].to_i
end
def run
@ -53,7 +61,7 @@ module Whenever
command << "-u #{@options[:user]}" if @options[:user]
command_results = %x[#{command.join(' ')} 2> /dev/null]
@current_crontab = $?.exitstatus.zero? ? command_results : ''
@current_crontab = $?.exitstatus.zero? ? prepare(command_results) : ''
end
def write_crontab(contents)
@ -95,6 +103,11 @@ module Whenever
end
end
#
def prepare(contents)
contents.split("\n")[@options[:cut]..-1].join("\n")
end
def comment_base
"Whenever generated tasks for: #{@options[:identifier]}"
end

View File

@ -242,5 +242,47 @@ NEW_CRON
assert_match two_hours + %( cd /silly/path && script/runner -e silly 'blahblah'), @output
end
end
context "prepare-ing the output" do
setup do
File.expects(:exists?).with('config/schedule.rb').returns(true)
end
should "not trim off the top lines of the file" do
@command = Whenever::CommandLine.new(:update => true, :identifier => 'My identifier', :cut => 0)
existing = <<-EXISTING_CRON
# Useless Comments
# at the top of the file
# Begin Whenever generated tasks for: My identifier
My whenever job that was already here
# End Whenever generated tasks for: My identifier
EXISTING_CRON
# here-doc adds an extra newline we need removed
assert_equal existing.strip, @command.send(:prepare, existing)
end
should "trim off the top lines of the file" do
@command = Whenever::CommandLine.new(:update => true, :identifier => 'My identifier', :cut => '3')
existing = <<-EXISTING_CRON
# Useless Comments
# at the top of the file
# Begin Whenever generated tasks for: My identifier
My whenever job that was already here
# End Whenever generated tasks for: My identifier
EXISTING_CRON
new_cron = <<-NEW_CRON
# Begin Whenever generated tasks for: My identifier
My whenever job that was already here
# End Whenever generated tasks for: My identifier
NEW_CRON
# here-doc adds an extra newline we need removed
assert_equal new_cron.strip, @command.send(:prepare, existing)
end
end
end