merge revision(s) 56374: [Backport #12822]

* lib/logger.rb (Logger::Period#next_rotate_time): fix monthly log
	  rotate when DST is applied during a month of 31 days.
	  [Fix GH-1458]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@56438 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagachika 2016-10-17 17:38:53 +00:00
parent 55f7a78ca3
commit 7c0c4c8e5e
4 changed files with 99 additions and 3 deletions

View file

@ -1,3 +1,9 @@
Tue Oct 18 02:24:29 2016 Aurelien Jacobs <aurel@gnuage.org>
* lib/logger.rb (Logger::Period#next_rotate_time): fix monthly log
rotate when DST is applied during a month of 31 days.
[Fix GH-1458]
Wed Oct 12 22:31:09 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org> Wed Oct 12 22:31:09 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
* tool/downloader.rb: Removed verification of gem certification. * tool/downloader.rb: Removed verification of gem certification.

View file

@ -593,8 +593,8 @@ private
when 'weekly' when 'weekly'
t = Time.mktime(now.year, now.month, now.mday) + SiD * (7 - now.wday) t = Time.mktime(now.year, now.month, now.mday) + SiD * (7 - now.wday)
when 'monthly' when 'monthly'
t = Time.mktime(now.year, now.month, 1) + SiD * 31 t = Time.mktime(now.year, now.month, 1) + SiD * 32
return Time.mktime(t.year, t.month, 1) if t.mday > 1 return Time.mktime(t.year, t.month, 1)
else else
return now return now
end end

View file

@ -483,6 +483,49 @@ class TestLogDevice < Test::Unit::TestCase
end end
end if env_tz_works end if env_tz_works
def test_shifting_monthly
Dir.mktmpdir do |tmpdir|
assert_in_out_err([{"TZ"=>"UTC"}, *%W"-rlogger -C#{tmpdir} -"], <<-'end;')
begin
module FakeTime
attr_accessor :now
end
class << Time
prepend FakeTime
end
log = "log"
File.open(log, "w") {}
Time.now = Time.utc(2015, 12, 14, 0, 1, 1)
dev = Logger::LogDevice.new("log", shift_age: 'monthly')
Time.now = Time.utc(2015, 12, 31, 12, 34, 56)
dev.write("#{Time.now} hello-1\n")
File.utime(Time.now, Time.now, log)
Time.now = Time.utc(2016, 1, 1, 0, 1, 1)
File.utime(Time.now, Time.now, log)
dev.write("#{Time.now} hello-2\n")
ensure
dev.close if dev
end
end;
log = File.join(tmpdir, "log")
cont = File.read(log)
assert_match(/hello-2/, cont)
assert_not_match(/hello-1/, cont)
log = Dir.glob(log+".*")
assert_equal(1, log.size)
log, = *log
cont = File.read(log)
assert_match(/hello-1/, cont)
assert_equal("2015-12-31", cont[/^[-\d]+/])
assert_equal("20151231", log[/\d+\z/])
end
end if env_tz_works
def test_shifting_dst_change def test_shifting_dst_change
Dir.mktmpdir do |tmpdir| Dir.mktmpdir do |tmpdir|
assert_in_out_err([{"TZ"=>"Europe/London"}, *%W"--disable=gems -rlogger -C#{tmpdir} -"], <<-'end;') assert_in_out_err([{"TZ"=>"Europe/London"}, *%W"--disable=gems -rlogger -C#{tmpdir} -"], <<-'end;')
@ -549,6 +592,53 @@ class TestLogDevice < Test::Unit::TestCase
end end
end if env_tz_works end if env_tz_works
def test_shifting_monthly_dst_change
Dir.mktmpdir do |tmpdir|
assert_separately([{"TZ"=>"Europe/London"}, *%W"-rlogger -C#{tmpdir} -"], <<-'end;')
begin
module FakeTime
attr_accessor :now
end
class << Time
prepend FakeTime
end
log = "log"
File.open(log, "w") {}
Time.now = Time.utc(2016, 9, 1, 0, 1, 1)
dev = Logger::LogDevice.new("log", shift_age: 'monthly')
Time.now = Time.utc(2016, 9, 8, 7, 6, 5)
dev.write("#{Time.now} hello-1\n")
File.utime(Time.now, Time.now, log)
Time.now = Time.utc(2016, 10, 9, 8, 7, 6)
File.utime(Time.now, Time.now, log)
dev.write("#{Time.now} hello-2\n")
Time.now = Time.utc(2016, 10, 9, 8, 7, 7)
File.utime(Time.now, Time.now, log)
dev.write("#{Time.now} hello-3\n")
ensure
dev.close if dev
end
end;
log = File.join(tmpdir, "log")
cont = File.read(log)
assert_match(/hello-2/, cont)
assert_not_match(/hello-1/, cont)
log = Dir.glob(log+".*")
assert_equal(1, log.size)
log, = *log
cont = File.read(log)
assert_match(/hello-1/, cont)
assert_equal("2016-09-08", cont[/^[-\d]+/])
assert_equal("20160930", log[/\d+\z/])
end
end if env_tz_works
private private
def run_children(n, args, src) def run_children(n, args, src)

View file

@ -1,6 +1,6 @@
#define RUBY_VERSION "2.3.2" #define RUBY_VERSION "2.3.2"
#define RUBY_RELEASE_DATE "2016-10-18" #define RUBY_RELEASE_DATE "2016-10-18"
#define RUBY_PATCHLEVEL 196 #define RUBY_PATCHLEVEL 197
#define RUBY_RELEASE_YEAR 2016 #define RUBY_RELEASE_YEAR 2016
#define RUBY_RELEASE_MONTH 10 #define RUBY_RELEASE_MONTH 10