Project

General

Profile

Actions

Bug #17885

open

require_relative and require should be compatible with each other when symlinked files are used

Added by john_firebaugh (John Firebaugh) 2 months ago. Updated about 1 month ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin19]
[ruby-core:104010]

Description

This is similar to #10222 (which was fixed), but it's with symlinked files. #10222 was with symlinked directories.

If files are symlinked, then mixing require and require_relative can result in the same file being loaded twice.

mkdir a
echo "require_relative 'b'" > a/a.rb
echo "p 'b loaded'" > a/b.rb
mkdir b
ln -s ../a/a.rb b
ln -s ../a/b.rb b
echo "$: << File.expand_path('../b', __FILE__); require 'b'; require 'a'" > c.rb
ruby c.rb

Expected behavior is that this prints "b loaded" once. Actual behavior is that it prints "b loaded" twice.


Related issues

Is duplicate of Ruby master - Bug #10222: require_relative and require should be compatible with each other when symlinks are usedClosedActions

Updated by john_firebaugh (John Firebaugh) 2 months ago

This causes an issue with rules_ruby for Bazel. Bazel uses symlinks extensively to implement hermetic build sandboxing.

Updated by vo.x (Vit Ondruch) 2 months ago

I totally support this. And there is more to this #16978

Actions #3

Updated by shyouhei (Shyouhei Urabe) 2 months ago

  • Is duplicate of Bug #10222: require_relative and require should be compatible with each other when symlinks are used added

Updated by jeremyevans0 (Jeremy Evans) about 1 month ago

I've submitted a pull request to prevent loading the same realpath multiple times: https://github.com/ruby/ruby/pull/4615

Actions

Also available in: Atom PDF