Mangled generated path on `ln_s` with `relative: true`
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 68/100
Hướng nghiên cứu
Bắt đầu với fileutils.rb quanh dòng 709 và 760, nơi stack trace cho thấy FileUtils.ln_s và FileUtils.ln_sr xử lý liên kết tương đối. Tái hiện các snippet bị lỗi và hoạt động với relative: true, kiểm tra cả hai chế độ noop. Công việc được hoàn tất khi trường hợp thư mục cấp cao hơn tạo ra đích tương đối chính xác trong đầu ra verbose và tạo symlink thành công.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
I found this accidently when trying to wrote a dotfile linker utility.
Seems like FileUtils.ln_s will fail when the resulting relative path contains ../ (one directory hierarchy higher) as the relative path being generated is mangled.
Sample snippets to reproduce:
FileUtils.ln_s(
"/home/mipan/.dotfiles/zsh", "/home/mipan/.config/zsh",
verbose: true, noop: true, relative: true
)
Output: ln -s /home/mipan/.config/zsh/zsh
And this is not a pure logging bug, when the noop set to false:
FileUtils.ln_s(
"/home/mipan/.dotfiles/zsh", "/home/mipan/.config/zsh",
verbose: true, noop: false, relative: true
)
ln -s /home/mipan/.config/zsh/zsh
/usr/lib/ruby/3.4.0/fileutils.rb:760:in 'File.symlink': No such file or directory @ rb_file_s_symlink - (, /home/mipan/.config/zsh/zsh) (Errno::ENOENT)
from /usr/lib/ruby/3.4.0/fileutils.rb:760:in 'block in FileUtils.ln_sr'
from /usr/lib/ruby/3.4.0/fileutils.rb:765:in 'FileUtils.ln_sr'
from /usr/lib/ruby/3.4.0/fileutils.rb:709:in 'FileUtils.ln_s'
from ./dot_linker.rb:362:in '<main>'
Sample for working parameters:
FileUtils.ln_s(
"/home/mipan/.dotfiles/zsh", "/home/mipan/zsh",
verbose: true, noop: true, relative: true
)
Output: ln -s .dotfiles/zsh /home/mipan/zsh
Ruby version:
❯ ruby --version
ruby 3.4.4 (2025-05-14 revision a38531fd3f) +PRISM [x86_64-linux]
- Ngôn ngữ chính
- Ruby
- Star
- 69
- Fork
- 37
- Merge trung bình
- 3 giờ 38 phút
- Pull request đã merge (30 ngày)
- 19
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của ruby/fileutils
Tất cả issue của ruby/fileutils
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
simp/pupmod-simp-simp#395 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
simp/pupmod-simp-rsyslog#219 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
simp/pupmod-simp-pupmod#256 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
simp/pupmod-simp-sudo#150 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100