Skip to content

Opening a submodule bump in the PR changes view fails: "Unable to read file ... that is actually a directory" #8981

Description

Description

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.:

pr:/<path>?{"baseCommit":"<sha>","headCommit":"<sha>","isBase":false,"fileName":"<submodule-path>","prNumber":<n>,"status":3,"remoteName":"origin"}

but this fails too, with a different error:

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.:

Subproject commit <old-sha>
Subproject commit <new-sha>

(similar to git diff output for a submodule, and to how github.com renders it in the PR's "Files changed" tab).

Environment

  • Extension: github.vscode-pull-request-github v0.167.2026092404
  • VS Code Remote - SSH
  • Linux remote host

Related issues

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions