Mangled generated path on `ln_s` with `relative: true`
Nessuno ha ancora preso questa issue.
- Lingua principale
- Ruby
- Stelle
- 69
- Fork
- 37
- Merge medio
- 5h 34m
- PR unite (30g)
- 2
Descrizione
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]
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia da fileutils.rb intorno alle righe 709 e 760, dove lo stack trace mostra che FileUtils.ln_s e FileUtils.ln_sr gestiscono il link relativo. Riproduci gli snippet che falliscono e quelli funzionanti con relative: true, verificando entrambe le modalità noop. Il lavoro è completato quando il caso della directory superiore produce il target relativo corretto nell'output dettagliato e crea correttamente il symlink.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- ruby
- Ambito
- tooling
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 68/100