Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
一杯枸杞茶ya
csdn-workflow
提交
0fe4c5fb
C
csdn-workflow
项目概览
一杯枸杞茶ya
/
csdn-workflow
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
csdn-workflow
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0fe4c5fb
编写于
3月 26, 2021
作者:
T
Tomas Vik
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: use the same git binary as VS Code
上级
36fd8f83
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
49 addition
and
33 deletion
+49
-33
src/extension.js
src/extension.js
+2
-2
src/git/git_extension_wrapper.test.ts
src/git/git_extension_wrapper.test.ts
+4
-7
src/git/git_extension_wrapper.ts
src/git/git_extension_wrapper.ts
+30
-20
src/git_service.test.ts
src/git_service.test.ts
+2
-0
src/git_service.ts
src/git_service.ts
+3
-2
src/utils/get_instance_url.test.ts
src/utils/get_instance_url.test.ts
+5
-0
src/utils/get_instance_url.ts
src/utils/get_instance_url.ts
+3
-2
未找到文件。
src/extension.js
浏览文件 @
0fe4c5fb
...
...
@@ -17,7 +17,7 @@ const { GitContentProvider } = require('./review/git_content_provider');
const
{
REVIEW_URI_SCHEME
}
=
require
(
'
./constants
'
);
const
{
USER_COMMANDS
,
PROGRAMMATIC_COMMANDS
}
=
require
(
'
./command_names
'
);
const
{
CiCompletionProvider
}
=
require
(
'
./completion/ci_completion_provider
'
);
const
{
G
itExtensionWrapper
}
=
require
(
'
./git/git_extension_wrapper
'
);
const
{
g
itExtensionWrapper
}
=
require
(
'
./git/git_extension_wrapper
'
);
const
{
toggleResolved
,
deleteComment
,
...
...
@@ -112,7 +112,7 @@ const activate = context => {
tokenService
.
init
(
context
);
tokenServiceWrapper
.
init
(
context
);
registerCiCompletion
(
context
);
context
.
subscriptions
.
push
(
GitExtensionWrapper
.
registerToGitExtension
()
);
gitExtensionWrapper
.
init
(
);
};
exports
.
activate
=
activate
;
src/git/git_extension_wrapper.test.ts
浏览文件 @
0fe4c5fb
import
{
GitExtension
}
from
'
../api/git
'
;
import
*
as
vscode
from
'
vscode
'
;
import
{
GitExtensionWrapper
}
from
'
./git_extension_wrapper
'
;
import
{
GitLabRemoteSourceProviderRepository
}
from
'
../gitlab/clone/gitlab_remote_source_provider_repository
'
;
import
{
gitlabCredentialsProvider
}
from
'
../gitlab/clone/gitlab_credentials_provider
'
;
...
...
@@ -12,20 +12,17 @@ describe('GitExtensionWrapper', () => {
beforeEach
(
async
()
=>
{
fakeExtension
=
new
FakeGitExtension
();
(
vscode
.
extensions
.
getExtension
as
jest
.
Mock
).
mockReturnValue
({
exports
:
fakeExtension
});
});
it
(
'
creates a new GitLabRemoteSourceProviderRepository
'
,
async
()
=>
{
// TODO: maybe introduce something like an initialize method instead of doing the work in constructor
// eslint-disable-next-line no-new
new
GitExtensionWrapper
((
fakeExtension
as
unknown
)
as
GitExtension
);
new
GitExtensionWrapper
().
init
();
expect
(
GitLabRemoteSourceProviderRepository
).
toHaveBeenCalledWith
(
fakeExtension
.
gitApi
);
});
it
(
'
adds credentials provider to the Git Extension
'
,
async
()
=>
{
// TODO: maybe introduce something like an initialize method instead of doing the work in constructor
// eslint-disable-next-line no-new
new
GitExtensionWrapper
((
fakeExtension
as
unknown
)
as
GitExtension
);
new
GitExtensionWrapper
().
init
();
expect
(
fakeExtension
.
gitApi
.
credentialsProviders
).
toEqual
([
gitlabCredentialsProvider
]);
});
...
...
src/git/git_extension_wrapper.ts
浏览文件 @
0fe4c5fb
...
...
@@ -3,56 +3,66 @@
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
extensions
,
Disposable
}
from
'
vscode
'
;
import
{
GitExtension
}
from
'
../api/git
'
;
import
*
as
assert
from
'
assert
'
;
import
*
as
vscode
from
'
vscode
'
;
import
{
API
,
GitExtension
}
from
'
../api/git
'
;
import
{
gitlabCredentialsProvider
}
from
'
../gitlab/clone/gitlab_credentials_provider
'
;
import
{
GitLabRemoteSourceProviderRepository
}
from
'
../gitlab/clone/gitlab_remote_source_provider_repository
'
;
import
{
handleError
,
log
}
from
'
../log
'
;
export
class
GitExtensionWrapper
implements
Disposable
{
disposables
=
new
Set
<
Disposable
>
();
export
class
GitExtensionWrapper
implements
vscode
.
Disposable
{
disposables
=
new
Set
<
vscode
.
Disposable
>
();
constructor
(
private
gitExtension
:
GitExtension
)
{
this
.
disposables
.
add
(
gitExtension
.
onDidChangeEnablement
(
this
.
onDidChangeGitExtensionEnablement
,
this
),
);
this
.
onDidChangeGitExtensionEnablement
(
gitExtension
.
enabled
);
}
private
gitApi
?:
API
;
private
gitExtension
?:
GitExtension
;
private
onDidChangeGitExtensionEnablement
(
enabled
:
boolean
)
{
if
(
enabled
)
{
this
.
initialize
();
this
.
register
();
}
else
{
this
.
dispose
();
}
}
private
initialize
()
{
get
gitBinaryPath
():
string
{
const
path
=
this
.
gitApi
?.
git
.
path
;
assert
(
path
,
'
Could not get git binary path from the Git extension.
'
);
return
path
;
}
private
register
()
{
assert
(
this
.
gitExtension
);
try
{
const
gitAPI
=
this
.
gitExtension
.
getAPI
(
1
);
this
.
gitApi
=
this
.
gitExtension
.
getAPI
(
1
);
this
.
disposables
.
add
(
new
GitLabRemoteSourceProviderRepository
(
gitAPI
));
this
.
disposables
.
add
(
gitAPI
.
registerCredentialsProvider
(
gitlabCredentialsProvider
));
this
.
disposables
.
add
(
new
GitLabRemoteSourceProviderRepository
(
this
.
gitApi
));
this
.
disposables
.
add
(
this
.
gitApi
.
registerCredentialsProvider
(
gitlabCredentialsProvider
));
}
catch
(
err
)
{
handleError
(
err
);
}
}
dispose
():
void
{
this
.
gitApi
=
undefined
;
this
.
disposables
.
forEach
(
d
=>
d
?.
dispose
());
this
.
disposables
.
clear
();
}
static
registerToGitExtension
():
Disposable
{
init
():
void
{
try
{
const
gitExtension
=
extensions
.
getExtension
<
GitExtension
>
(
'
vscode.git
'
)?.
exports
;
if
(
gitExtension
!==
undefined
)
{
return
new
GitExtensionWrapper
(
gitExtension
);
this
.
gitExtension
=
vscode
.
extensions
.
getExtension
<
GitExtension
>
(
'
vscode.git
'
)?.
exports
;
if
(
this
.
gitExtension
!==
undefined
)
{
this
.
disposables
.
add
(
this
.
gitExtension
.
onDidChangeEnablement
(
this
.
onDidChangeGitExtensionEnablement
,
this
),
);
this
.
onDidChangeGitExtensionEnablement
(
this
.
gitExtension
.
enabled
);
}
log
(
'
Could not get Git Extension
'
);
}
catch
(
error
)
{
handleError
(
error
);
}
return
{
dispose
:
()
=>
undefined
};
}
}
export
const
gitExtensionWrapper
=
new
GitExtensionWrapper
();
src/git_service.test.ts
浏览文件 @
0fe4c5fb
...
...
@@ -4,6 +4,7 @@ import { promises as fs } from 'fs';
import
*
as
path
from
'
path
'
;
import
simpleGit
,
{
SimpleGit
}
from
'
simple-git
'
;
import
{
GitService
,
GitServiceOptions
}
from
'
./git_service
'
;
import
{
gitExtensionWrapper
}
from
'
./git/git_extension_wrapper
'
;
describe
(
'
git_service
'
,
()
=>
{
const
ORIGIN
=
'
origin
'
;
...
...
@@ -38,6 +39,7 @@ describe('git_service', () => {
(
vscode
.
workspace
.
getConfiguration
as
jest
.
Mock
).
mockReturnValue
({
instanceUrl
:
'
https://gitlab.com
'
,
});
jest
.
spyOn
(
gitExtensionWrapper
,
'
gitBinaryPath
'
,
'
get
'
).
mockReturnValue
(
'
git
'
);
});
afterEach
(()
=>
{
...
...
src/git_service.ts
浏览文件 @
0fe4c5fb
import
*
as
execa
from
'
execa
'
;
import
{
UserFriendlyError
}
from
'
./errors/user_friendly_error
'
;
import
{
gitExtensionWrapper
}
from
'
./git/git_extension_wrapper
'
;
import
{
parseGitRemote
,
GitRemote
}
from
'
./git/git_remote_parser
'
;
import
{
log
}
from
'
./log
'
;
import
{
getInstanceUrl
}
from
'
./utils/get_instance_url
'
;
...
...
@@ -20,8 +21,8 @@ export class GitService {
}
private
async
fetch
(
cmd
:
string
):
Promise
<
string
>
{
const
[
git
,
...
args
]
=
cmd
.
trim
().
split
(
'
'
);
const
{
stdout
}
=
await
execa
(
git
,
args
,
{
const
[,
...
args
]
=
cmd
.
trim
().
split
(
'
'
);
const
{
stdout
}
=
await
execa
(
git
ExtensionWrapper
.
gitBinaryPath
,
args
,
{
cwd
:
this
.
workspaceFolder
,
preferLocal
:
false
,
});
...
...
src/utils/get_instance_url.test.ts
浏览文件 @
0fe4c5fb
...
...
@@ -4,6 +4,7 @@ import simpleGit, { SimpleGit } from 'simple-git';
import
{
getInstanceUrl
}
from
'
./get_instance_url
'
;
import
{
tokenService
}
from
'
../services/token_service
'
;
import
{
GITLAB_COM_URL
}
from
'
../constants
'
;
import
{
gitExtensionWrapper
}
from
'
../git/git_extension_wrapper
'
;
describe
(
'
get_instance_url
'
,
()
=>
{
const
ORIGIN
=
'
origin
'
;
...
...
@@ -22,6 +23,10 @@ describe('get_instance_url', () => {
});
});
beforeEach
(()
=>
{
jest
.
spyOn
(
gitExtensionWrapper
,
'
gitBinaryPath
'
,
'
get
'
).
mockReturnValue
(
'
git
'
);
});
it
(
'
returns configured instanceUrl if the config contains one
'
,
async
()
=>
{
(
vscode
.
workspace
.
getConfiguration
as
jest
.
Mock
).
mockReturnValue
({
instanceUrl
:
'
https://test.com
'
,
...
...
src/utils/get_instance_url.ts
浏览文件 @
0fe4c5fb
...
...
@@ -5,10 +5,11 @@ import { GITLAB_COM_URL } from '../constants';
import
{
tokenService
}
from
'
../services/token_service
'
;
import
{
log
}
from
'
../log
'
;
import
{
parseGitRemote
}
from
'
../git/git_remote_parser
'
;
import
{
gitExtensionWrapper
}
from
'
../git/git_extension_wrapper
'
;
async
function
fetch
(
cmd
:
string
,
workspaceFolder
:
string
):
Promise
<
string
|
null
>
{
const
[
git
,
...
args
]
=
cmd
.
trim
().
split
(
'
'
);
const
{
stdout
}
=
await
execa
(
git
,
args
,
{
const
[,
...
args
]
=
cmd
.
trim
().
split
(
'
'
);
const
{
stdout
}
=
await
execa
(
git
ExtensionWrapper
.
gitBinaryPath
,
args
,
{
cwd
:
workspaceFolder
,
preferLocal
:
false
,
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录