|
1 | 1 | import { Uri } from 'vscode'; |
| 2 | +import { isWeb } from '@env/platform'; |
2 | 3 | import { getQueryDataFromScmGitUri } from '../@types/vscode.git.uri'; |
3 | 4 | import { Schemes } from '../constants'; |
4 | 5 | import { Container } from '../container'; |
5 | 6 | import type { GitHubAuthorityMetadata } from '../plus/remotehub'; |
| 7 | +import { configuration } from '../system/-webview/configuration'; |
6 | 8 | import { formatPath } from '../system/-webview/formatPath'; |
7 | 9 | import { getBestPath, relativeDir, splitPath } from '../system/-webview/path'; |
8 | 10 | import { isVirtualUri } from '../system/-webview/vscode/uris'; |
@@ -248,6 +250,21 @@ export class GitUri extends (Uri as any as UriEx) { |
248 | 250 | @debug({ exit: true }) |
249 | 251 | static async fromUri(uri: Uri): Promise<GitUri> { |
250 | 252 | if (isGitUri(uri)) return uri; |
| 253 | + |
| 254 | + // Check for symbolic links (Node.js only) |
| 255 | + if (configuration.get('realpath') && !isWeb && uri.scheme === 'file') { |
| 256 | + try { |
| 257 | + const { realpathSync } = await import('fs'); |
| 258 | + const realPath = realpathSync(uri.fsPath); |
| 259 | + if (uri.fsPath !== realPath) { |
| 260 | + const newUri = Uri.file(realPath); |
| 261 | + return await this.fromUri(newUri); |
| 262 | + } |
| 263 | + } catch { |
| 264 | + // Ignore errors (e.g., if path doesn't exist) |
| 265 | + } |
| 266 | + } |
| 267 | + |
251 | 268 | if (!Container.instance.git.isTrackable(uri)) return new GitUri(uri); |
252 | 269 | if (uri.scheme === Schemes.GitLens) return new GitUri(uri); |
253 | 270 |
|
|
0 commit comments