2017-05-08 192 views
7

我试图在vscode中创建一个版本控制扩展。我试图看看vscode中的git实现。令人困惑的部分是文件差异。在git扩展源代码中,为了查看文件更改,使用了vscode.diff。为了得到原始文件的uri,新的uri是通过更改修改文件的urischeme而生成的。这是如何工作的?git diff如何在vscode git扩展中工作?

例如,

https://github.com/Microsoft/vscode/blob/master/extensions/git/src/commands.tsgetRightResource方法,toGitUri被称为与该文件的URI。 toGitUri FPGA实现如下,

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只是改变文件的方案从filegit与查询。然后将这个uri连同原始文件uri一起提供给vscode.diff以显示git diff。 toGitUri如何在这里工作?

感谢和问候,

Sathish所在V

回答

3

我觉得差异不会发生在这里。我也认为你已经正确理解了这个函数的作用:它为磁盘上的文件获取文件URI并为git repo找到相应的URI。然后它有2个资源进行比较。

然后将这2个资源传递给内置的差异功能。

让我们跟踪1.12.1代码(按照链接逐一):

  • vscode.diff注册here

  • delegates_workbench.diff

  • ,一个是注册heredelegates以编辑器的内置差异...

  • ...像这样:editorService.openEditor({ leftResource, rightResource, ...) ...

  • ...其中leftResource是在磁盘和rightResource文件URI在混帐回购协议文件。