Commits
Tarun Sukhani authored 47600c956ba
fix: deps --sync no longer deletes its own work on symlinked app paths (PF-70, release 1.12.21)
DependenciesManager.install() canonicalizes its return path while sync()
walks path.listFiles() which returns raw, non-canonicalized Files. When
the application root traverses a symlink (e.g. /tmp -> /private/tmp on
macOS, or any user with a symlinked workspace dir), the two File forms
aren't .equals(), so every freshly installed jar/module gets reported as
"unknown" and deleted within the same play deps invocation that just
installed it.
Net effect on macOS: every fresh play new under /tmp produced an empty
modules/, no docviewer marker file, and 500 on the welcome page because
@{'/public/playmanual/logo.png'} couldn't reverse-route. Surfaced during
PF-69 end-to-end verification.
Fix: canonicalize both sides of the comparison in sync(). New helper
canonicalOrSelf(File) falls back to the raw File if getCanonicalFile()
throws (defensive — getCanonicalFile only throws on truly pathological
filesystems).
End-to-end verified on a fresh play new /tmp/mytestingapp --frontend +
play enable-https + play start: docviewer module loads, GET / returns
200 with the welcome page rendering the logo, GET /api/status returns
JSON, Nuxt 3 frontend at :3000 fetches /api/status successfully and
renders all five status fields. Re-running play deps --sync is
idempotent — the docviewer marker file is preserved.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>