Issue #13695 has been updated by shyouhei (Shyouhei Urabe).


I guess this is a dup of #10222.

----------------------------------------
Bug #13695: Issue with require and require_relative with symlinked directories
https://bugs.ruby-lang.org/issues/13695#change-65517

* Author: fidothe (Matt Patterson)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
Symlinked directories cause an issue with require_relative where libraries loaded from a symlinked path (e.g. in a typical Capistrano / Bundler deployment) can be double-loaded.

Reproduce process: 

1. Clone git repo from https://github.com/fidothe/symlink-require
2. Run `use-symlink.rb` script: 

~~~ bash
$ ruby use-symlink.rb
~~~
 
Expected result: No warning from double-loading of constants issued.
Actual result: double-loading of file causing already-initialised constant warning.

In the example I linked above, `target.rb` uses `require_relative` to load `dependent.rb`.

When the example also requires `dependent.rb` the file is double-loaded and we see a warning about already-initialized constant.

The problem is that when `require` in `use-symlink.rb` (line 7) checks the set of loaded files it uses an absolute path containing the symlink (since that is what was added to $LOAD_PATH), but when `require_relative` in target.rb is called, it uses an absolute path containing target of the symlink, causing the double-load.

Is this discrepancy intended behaviour on Ruby's part?



-- 
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>