Revert "Don't anchor the regexp to EOL to fix matching issues that were causing the entire block of crontab entries to appear twice in the crontab. This could be due to the way cron is adding newlines or some other post-processing that occurs on the cron. This bug was reproduced in the following environment: Ubuntu 10.04.2 LTS, rvm 1.0.14, ruby 1.8.7 patchlevel 253, capistrano 2.5.19, capistrano-ext 1.2.1, bundler 1.0.10"

This reverts commit 1f11510d87.
This commit is contained in:
Jeremy Lingmann 2011-03-10 22:00:41 -08:00
parent 7dd0a046ae
commit 971854528b

View File

@ -89,19 +89,19 @@ module Whenever
def updated_crontab def updated_crontab
# Check for unopened or unclosed identifier blocks # Check for unopened or unclosed identifier blocks
if read_crontab =~ Regexp.new("^#{comment_open}") && (read_crontab =~ Regexp.new("^#{comment_close}")).nil? if read_crontab =~ Regexp.new("^#{comment_open}$") && (read_crontab =~ Regexp.new("^#{comment_close}")).nil?
warn "[fail] Unclosed indentifier; Your crontab file contains '#{comment_open}', but no '#{comment_close}'" warn "[fail] Unclosed indentifier; Your crontab file contains '#{comment_open}', but no '#{comment_close}'"
exit(1) exit(1)
elsif (read_crontab =~ Regexp.new("^#{comment_open}")).nil? && read_crontab =~ Regexp.new("^#{comment_close}") elsif (read_crontab =~ Regexp.new("^#{comment_open}$")).nil? && read_crontab =~ Regexp.new("^#{comment_close}")
warn "[fail] Unopened indentifier; Your crontab file contains '#{comment_close}', but no '#{comment_open}'" warn "[fail] Unopened indentifier; Your crontab file contains '#{comment_close}', but no '#{comment_open}'"
exit(1) exit(1)
end end
# If an existing identier block is found, replace it with the new cron entries # If an existing identier block is found, replace it with the new cron entries
if read_crontab =~ Regexp.new("^#{comment_open}") && read_crontab =~ Regexp.new("^#{comment_close}") if read_crontab =~ Regexp.new("^#{comment_open}$") && read_crontab =~ Regexp.new("^#{comment_close}$")
# If the existing crontab file contains backslashes they get lost going through gsub. # If the existing crontab file contains backslashes they get lost going through gsub.
# .gsub('\\', '\\\\\\') preserves them. Go figure. # .gsub('\\', '\\\\\\') preserves them. Go figure.
read_crontab.gsub(Regexp.new("^#{comment_open}.+^#{comment_close}", Regexp::MULTILINE), whenever_cron.chomp.gsub('\\', '\\\\\\')) read_crontab.gsub(Regexp.new("^#{comment_open}$.+^#{comment_close}$", Regexp::MULTILINE), whenever_cron.chomp.gsub('\\', '\\\\\\'))
else # Otherwise, append the new cron entries after any existing ones else # Otherwise, append the new cron entries after any existing ones
[read_crontab, whenever_cron].join("\n\n") [read_crontab, whenever_cron].join("\n\n")
end.gsub(/\n{3,}/, "\n\n") # More than two newlines becomes just two. end.gsub(/\n{3,}/, "\n\n") # More than two newlines becomes just two.