Opening a submodule bump in the PR changes view fails: "Unable to read file ... that is actually a directory" · Issue #8981 · microsoft/vscode-pull-request-github · GitHub
You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Opening a submodule bump in the PR changes view fails: "Unable to read file ... that is actually a directory" #8981
When a PR bumps a git submodule (a 160000 gitlink tree entry), clicking that file in the PR's changed-files list fails to open, instead of showing a diff of the submodule commit pointer (old SHA → new SHA).
Error
The editor could not be opened due to an unexpected error. Please consult the log for more details.
From remoteexthost.log (Remote-SSH):
CodeExpectedError: cannot open vscode-remote://ssh-remote+<host>/<path>/<submodule-dir>. Detail: Unable to read file 'vscode-remote://ssh-remote+<host>/<path>/<submodule-dir>' (Error: Unable to read file 'vscode-remote://ssh-remote+<host>/<path>/<submodule-dir>' that is actually a directory)
at THe.$tryOpenDocument (.../workbench.desktop.main.js:699:10890)
Root cause (from log inspection)
The extension calls vscode.open() on the submodule's literal filesystem path — the same as for a normal changed file — instead of constructing a diff/content-provider URI. Since a submodule tree entry has no blob content of its own (it's a directory containing a nested checkout), the remote file service stats it, finds a directory, and throws EISDIR.
Separately, in another context (opening the same kind of change from the PR description's "Changes" webview), the extension does construct a pr: scheme URI with baseCommit/headCommit/fileName, e.g.:
CodeExpectedError: cannot open pr:/<path>?{...}. Detail: Could not show object.
So neither code path currently special-cases gitlink (160000) entries — one falls back to opening the raw directory, the other tries to fetch blob content for a commit pointer that has none.
Expected behavior
Clicking a submodule entry in the PR changes view should show a minimal diff of the submodule pointer, e.g.:
Activity