我试图在vscode中创建一个版本控制扩展。我试图查看vscode中的Git实现。令人困惑的部分是文件差异。在git扩展源代码中,为了查看文件更改,使用了vscode.diff
。要获得原始文件的uri
,通过更改修改文件的uri
的scheme
来生成新的uri
。这是怎么回事?
例如,在https://github.com/Microsoft/vscode/blob/master/extensions/git/src/commands.ts,getRightResource
方法中,使用文件的uri调用toGitUri
。toGitUri
实现如下,
export function toGitUri(uri: Uri, ref: string, replaceFileExtension = false): Uri {
return uri.with({
scheme: 'git',
path: replaceFileExtension ? `${uri.path}.git` : uri.path,
query: JSON.stringify({
path: uri.fsPath,
ref
})
});
}
在这里,toGitUri
只是将文件的方案从file
更改为git
。然后将此uri
连同文件的原始uri
一起提供给vscode.diff
,以显示git。toGitUri
在这里是如何工作的?
发布于 2017-05-15 07:18:30
我认为这种差别不会发生在这里。我还认为您正确地理解了这个函数的作用:它为磁盘上的文件获取一个文件URI,并为git找到相应的URI。然后对2种资源进行比较。
然后,这2个资源被传递到内置的扩展功能中。
让我们在1.12.1中跟踪代码(一个接一个地链接):
https://stackoverflow.com/questions/43848239
复制相似问题