From: sonots@... Date: 2017-05-31T02:00:14+00:00 Subject: [ruby-core:81479] [Ruby trunk Feature#13613] Prefer that require/require_relative/load to tell us permission error if the target file is unreadable Issue #13613 has been updated by sonots (Naotoshi Seo). I am thinking to apply a patch like: ``` diff --git a/load.c b/load.c index 75ac4df..a8175ca 100644 --- a/load.c +++ b/load.c @@ -708,7 +708,7 @@ rb_f_load(int argc, VALUE *argv) path = rb_find_file(fname); if (!path) { if (!rb_file_load_ok(RSTRING_PTR(fname))) - load_failed(orig_fname); + rb_load_fail(orig_fname, strerror(errno)); path = fname; } rb_load_internal(path, RTEST(wrap)); @@ -1049,7 +1049,7 @@ rb_require_safe(VALUE fname, int safe) JUMP_TAG(result); } if (result < 0) { - load_failed(fname); + rb_load_fail(fname, strerror(errno)); } return result ? Qtrue : Qfalse; ``` However, it was not sufficient because `require 'foo'` first tries to load `foo.rb`, and if it does not exist or not readable, load `foo.so` next. So, we get ENOENT in errno although I want to get EACCESS in this situation. Any advice is welcome. ---------------------------------------- Feature #13613: Prefer that require/require_relative/load to tell us permission error if the target file is unreadable https://bugs.ruby-lang.org/issues/13613#change-65188 * Author: sonots (Naotoshi Seo) * Status: Feedback * Priority: Normal * Assignee: * Target version: ---------------------------------------- ### Background https://github.com/google/google-api-ruby-client/issues/205 We've ever met a situation that read-permissions of files in released google-api-client gem were lost as: ``` $ ls -l ~/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/google-api-client-0.8.3/lib/google -rw-r----- 1 sonots sonots 27249 March 24 18:32 2015 api_client.rb ``` The error message was ``` in `require': cannot load such file -- api_client.rb (LoadError) ``` At that time, it took 30 minutes for me to find the reason why we get LoadError with the gem because the file exists. I looked the source codes load.c, and finally I found the reason as it is because of permission with my intuition. ### What I Want If `require` tells us PermissionError in addition to LoadError, I could figure out the reason soon. I think the additional information is helpful for finding such issues. -- https://bugs.ruby-lang.org/ Unsubscribe: