From: Urabe Shyouhei Date: 2012-08-27T12:17:01+09:00 Subject: [ruby-core:47322] Re: [ruby-cvs:43987] luislavena:r36811 (trunk): Improve require/File.expand_path performance on Windows Hello Luis, On 08/24/2012 12:44 PM, luislavena@ruby-lang.org wrote: > luislavena 2012-08-24 12:44:56 +0900 (Fri, 24 Aug 2012) > > New Revision: 36811 > > http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36811 > > Log: > Improve require/File.expand_path performance on Windows > > * configure.in (mingw): add shlwapi to the list of dependency > libs for Windows. > * win32/Makefile.sub (EXTSOLIBS): ditto. > > * internal.h: declare internal functions rb_w32_init_file, > rb_file_expand_path_internal and rb_file_expand_path_fast. > > * file.c (Init_File): invoke Windows initialization rb_w32_init_file > > * win32/file.c (rb_file_load_path_internal): new function. > Windows-specific implementation that replaces file_expand_path. > [Bug #6836][ruby-core:46996] > > * win32/file.c (rb_w32_init_file): new function. Initialize codepage > cache for faster conversion encodings lookup. > > * file.c (file_expand_path): rename to rb_file_expand_path_internal. > Conditionally exclude from Windows. > > * file.c (rb_file_expand_path_fast): new function. delegates to > rb_file_expand_path_internal without performing a hit to the > filesystem. > > * file.c (file_expand_path_1): use rb_file_expand_path_internal without > path expansion (used by require). > * file.c (rb_find_file_ext_safe): ditto. > * file.c (rb_find_file_safe): ditto. > > * load.c (rb_get_expanded_load_path): use rb_file_expand_path_fast. > * load.c (rb_feature_provided): ditto. > > * file.c (rb_file_expand_path): use rb_file_expand_path_internal with > path expansion. > * file.c (rb_file_absolute_path): ditto. > > * test/ruby/test_file_exhaustive.rb: new tests to exercise > rb_file_expand_path_internal implementation and compliance with > existing behaviors. > > Added files: > trunk/win32/.time > Modified files: > trunk/ChangeLog > trunk/configure.in > trunk/file.c > trunk/internal.h > trunk/load.c > trunk/test/ruby/test_file_exhaustive.rb > trunk/win32/Makefile.sub > trunk/win32/file.c Thank you, but this one increased failures on my machine (Linux box, but $HOME is unset). 55) Error: test_expand_path_returns_tainted_strings_or_not(TestFileExhaustive): ArgumentError: couldn't find HOME environment -- expanding `~' /src/test/ruby/test_file_exhaustive.rb:598:in `expand_path' /src/test/ruby/test_file_exhaustive.rb:598:in `test_expand_path_returns_tainted_strings_or_not' 56) Error: test_expand_path_encoding_filesystem(TestFileExhaustive): ArgumentError: couldn't find HOME environment -- expanding `~' /src/test/ruby/test_file_exhaustive.rb:468:in `expand_path' /src/test/ruby/test_file_exhaustive.rb:468:in `test_expand_path_encoding_filesystem' Please consider looking at them?