Mangled generated path on `ln_s` with `relative: true`
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Ruby
- Sterne
- 69
- Forks
- 37
- Ø Merge
- 5 Std. 34 Min.
- Gemergte PRs (30 T.)
- 2
Beschreibung
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]
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne in fileutils.rb ungefähr bei den Zeilen 709 und 760, wo der Stacktrace zeigt, dass FileUtils.ln_s und FileUtils.ln_sr den relativen Link behandeln. Reproduziere die fehlschlagenden und funktionierenden Snippets mit relative: true und prüfe beide noop-Modi. Abgeschlossen ist die Aufgabe, wenn der Fall mit dem übergeordneten Verzeichnis im ausführlichen Output das korrekte relative Ziel erzeugt und den Symlink erfolgreich erstellt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- ruby
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 68/100