[ruby-core:102209] [Ruby master Feature#16978] Ruby should not use realpath for __FILE__
From:
daniel@...42.com
Date:
2021-01-23 02:38:48 UTC
List:
ruby-core #102209
Issue #16978 has been updated by Dan0042 (Daniel DeLorme).
Interestingly, ruby does _not_ use realpath for `__FILE__`, only for `__dir__` and `require_relative`
```
$ cat test.rb
p __dir__ => __FILE__
require_relative "b"
$ cat a/b.rb
p __dir__ => __FILE__
require_relative "c"
$ ln -s a/b.rb
$ touch c.rb
$ ruby test.rb
{"/home/dan42/16978"=>"test.rb"}
{"/home/dan42/16978/a"=>"/home/dan42/16978/b.rb"}
Traceback (most recent call last):
3: from test.rb:2:in `<main>'
2: from test.rb:2:in `require_relative'
1: from /home/dan42/16978/b.rb:2:in `<top (required)>'
/home/dan42/16978/b.rb:2:in `require_relative': cannot load such file -- /home/dan42/16978/a/c (LoadError)
```
----------------------------------------
Feature #16978: Ruby should not use realpath for __FILE__
https://bugs.ruby-lang.org/issues/16978#change-90056
* Author: vo.x (Vit Ondruch)
* Status: Open
* Priority: Normal
----------------------------------------
This is the simplest test case:
~~~
$ mkdir a
$ echo "puts __FILE__" > a/test.rb
$ ln -s a b
$ ruby -Ib -e "require 'test'"
/builddir/a/test.rb
~~~
This behavior is problematic, because Ruby should not know nothing about the `a` directory. It was not instructed to use it. I should always refer to the file using the original path and do not dig into the underlying details, otherwise depending on file system setup, one might be forced to used `File.realpath` everywhere trying to use `__FILE__`.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>