Project

General

Profile

Backport #6385

Updated by nobu (Nobuyoshi Nakada) over 12 years ago

=begin 
 Seems that File.stat is not working well under Windows, specifically the mtime member. 
 This thing maybe related to local time (timezones) which should not because time which is used is unixtime. 
 On Mac works fine. 

 Windows: ruby 1.9.3p194 (2012-04-20) [i386-mingw32] 
 Mac: ruby 1.9.3p202 (2012-04-27 revision 35484) [x86_64-darwin11.3.0] 

 To reproduce: 
   
 RESOURCES_DIR = File.expand_path(File.dirname(__FILE__) + "/test") 
   
 MOD_TIME_CONTENTS = Time.at 1306527039 

   

 def test_local_os 
     
   Dir.mkdir(RESOURCES_DIR) unless (File.exists?(RESOURCES_DIR)) 
     
   file_path = "#{RESOURCES_DIR}/local_os_test.test" 
     
   file = File.open(file_path, "w", 0777) do |file| 
       
     file.puts("kuku") 
     
   end 
     
   file_stats = File.stat(file_path) 
     
   p "MOD_TIME_CONTENTS: #{MOD_TIME_CONTENTS}." 
     
   p "MOD_TIME_CONTENTS: #{MOD_TIME_CONTENTS.to_i}." 
     
   p "file_stat.mtime: #{file_stats.mtime}." 
     
   p "file_stat.mtime: #{file_stats.mtime.to_i}." 
     
   p "File.mtime: #{File.mtime(file_path)}." 
     
   p "File.mtime: #{File.mtime(file_path).to_i}." 
     
   File.utime File.atime(file_path), MOD_TIME_CONTENTS, file_path 
     
   file_stats = File.stat(file_path) 
     
   p "file_stat.mtime: #{file_stats.mtime}." 
     
   p "file_stat.mtime: #{file_stats.mtime.to_i}." 
     
   p "File.mtime: #{File.mtime(file_path)}." 
     
   p "File.mtime: #{File.mtime(file_path).to_i}." 
  
     
		  
   file_mtime = nil 
     
   file = File.open(file_path, 'r') do |file| 
       
     p "file.open.mtime = #{file.mtime}" 
       
     p "file.open.mtime = #{file.mtime.to_i}" 
       
     file_mtime = file.mtime 
     
   end 
  
     
		  
   assert_equal(MOD_TIME_CONTENTS, file_mtime) 
  
     
		  
   # !!! This fails on windows with different timezone 
     
   assert_equal(MOD_TIME_CONTENTS, file_stats.mtime) 
   
 end 

   

 Second assertion fails: 
     
   1) Failure: 
   
 test_local_os(BBFS::FileUtils::Test::TestTimeModification) [test/file_utils/time_modification_test.rb:89]: 
   
 <2011-05-27 20:10:39 +0000> expected but was 
   
 <2011-05-27 18:10:39 +0000>. 

Back