Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
222af4b8
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
222af4b8
编写于
5月 22, 2019
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix microsoft/vscode-remote-release/issues/11
上级
8e39622c
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
60 addition
and
89 deletion
+60
-89
src/vs/platform/extensionManagement/common/extensionManagement.ts
...latform/extensionManagement/common/extensionManagement.ts
+0
-1
src/vs/platform/extensionManagement/node/extensionGalleryService.ts
...tform/extensionManagement/node/extensionGalleryService.ts
+0
-67
src/vs/platform/extensions/node/extensionsUtil.ts
src/vs/platform/extensions/node/extensionsUtil.ts
+7
-1
src/vs/workbench/browser/web.simpleservices.ts
src/vs/workbench/browser/web.simpleservices.ts
+0
-5
src/vs/workbench/services/extensions/node/multiExtensionManagement.ts
...ench/services/extensions/node/multiExtensionManagement.ts
+53
-15
未找到文件。
src/vs/platform/extensionManagement/common/extensionManagement.ts
浏览文件 @
222af4b8
...
...
@@ -158,7 +158,6 @@ export interface IExtensionGalleryService {
getChangelog
(
extension
:
IGalleryExtension
,
token
:
CancellationToken
):
Promise
<
string
>
;
getCoreTranslation
(
extension
:
IGalleryExtension
,
languageId
:
string
):
Promise
<
ITranslation
|
null
>
;
getAllVersions
(
extension
:
IGalleryExtension
,
compatible
:
boolean
):
Promise
<
IGalleryExtensionVersion
[]
>
;
loadAllDependencies
(
dependencies
:
IExtensionIdentifier
[],
token
:
CancellationToken
):
Promise
<
IGalleryExtension
[]
>
;
getExtensionsReport
():
Promise
<
IReportedExtension
[]
>
;
getCompatibleExtension
(
extension
:
IGalleryExtension
):
Promise
<
IGalleryExtension
|
null
>
;
getCompatibleExtension
(
id
:
IExtensionIdentifier
,
version
?:
string
):
Promise
<
IGalleryExtension
|
null
>
;
...
...
src/vs/platform/extensionManagement/node/extensionGalleryService.ts
浏览文件 @
222af4b8
...
...
@@ -5,7 +5,6 @@
import
{
tmpdir
}
from
'
os
'
;
import
*
as
path
from
'
vs/base/common/path
'
;
import
{
distinct
}
from
'
vs/base/common/arrays
'
;
import
{
getErrorMessage
,
isPromiseCanceledError
,
canceled
}
from
'
vs/base/common/errors
'
;
import
{
StatisticType
,
IGalleryExtension
,
IExtensionGalleryService
,
IGalleryExtensionAsset
,
IQueryOptions
,
SortBy
,
SortOrder
,
IExtensionIdentifier
,
IReportedExtension
,
InstallOperation
,
ITranslation
,
IGalleryExtensionVersion
,
IGalleryExtensionAssets
,
isIExtensionIdentifier
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
getGalleryExtensionId
,
getGalleryExtensionTelemetryData
,
adoptToGalleryExtensionId
}
from
'
vs/platform/extensionManagement/common/extensionManagementUtil
'
;
...
...
@@ -595,10 +594,6 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
return
Promise
.
resolve
(
''
);
}
loadAllDependencies
(
extensions
:
IExtensionIdentifier
[],
token
:
CancellationToken
):
Promise
<
IGalleryExtension
[]
>
{
return
this
.
getDependenciesRecursively
(
extensions
.
map
(
e
=>
e
.
id
),
[],
token
);
}
getAllVersions
(
extension
:
IGalleryExtension
,
compatible
:
boolean
):
Promise
<
IGalleryExtensionVersion
[]
>
{
let
query
=
new
Query
()
.
withFlags
(
Flags
.
IncludeVersions
,
Flags
.
IncludeFiles
,
Flags
.
IncludeVersionProperties
,
Flags
.
ExcludeNonValidated
)
...
...
@@ -627,59 +622,6 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
});
}
private
loadDependencies
(
extensionNames
:
string
[],
token
:
CancellationToken
):
Promise
<
IGalleryExtension
[]
>
{
if
(
!
extensionNames
||
extensionNames
.
length
===
0
)
{
return
Promise
.
resolve
([]);
}
let
query
=
new
Query
()
.
withFlags
(
Flags
.
IncludeLatestVersionOnly
,
Flags
.
IncludeAssetUri
,
Flags
.
IncludeStatistics
,
Flags
.
IncludeFiles
,
Flags
.
IncludeVersionProperties
)
.
withPage
(
1
,
extensionNames
.
length
)
.
withFilter
(
FilterType
.
Target
,
'
Microsoft.VisualStudio.Code
'
)
.
withFilter
(
FilterType
.
ExcludeWithFlags
,
flagsToString
(
Flags
.
Unpublished
))
.
withAssetTypes
(
AssetType
.
Icon
,
AssetType
.
License
,
AssetType
.
Details
,
AssetType
.
Manifest
,
AssetType
.
VSIX
)
.
withFilter
(
FilterType
.
ExtensionName
,
...
extensionNames
);
return
this
.
queryGallery
(
query
,
token
).
then
(
result
=>
{
const
dependencies
:
IGalleryExtension
[]
=
[];
const
ids
:
string
[]
=
[];
for
(
let
index
=
0
;
index
<
result
.
galleryExtensions
.
length
;
index
++
)
{
const
rawExtension
=
result
.
galleryExtensions
[
index
];
if
(
ids
.
indexOf
(
rawExtension
.
extensionId
)
===
-
1
)
{
dependencies
.
push
(
toExtension
(
rawExtension
,
rawExtension
.
versions
[
0
],
index
,
query
,
'
dependencies
'
));
ids
.
push
(
rawExtension
.
extensionId
);
}
}
return
dependencies
;
});
}
private
getDependenciesRecursively
(
toGet
:
string
[],
result
:
IGalleryExtension
[],
token
:
CancellationToken
):
Promise
<
IGalleryExtension
[]
>
{
if
(
!
toGet
||
!
toGet
.
length
)
{
return
Promise
.
resolve
(
result
);
}
toGet
=
result
.
length
?
toGet
.
filter
(
e
=>
!
ExtensionGalleryService
.
hasExtensionByName
(
result
,
e
))
:
toGet
;
if
(
!
toGet
.
length
)
{
return
Promise
.
resolve
(
result
);
}
return
this
.
loadDependencies
(
toGet
,
token
)
.
then
(
loadedDependencies
=>
{
const
dependenciesSet
=
new
Set
<
string
>
();
for
(
const
dep
of
loadedDependencies
)
{
if
(
dep
.
properties
.
dependencies
)
{
dep
.
properties
.
dependencies
.
forEach
(
d
=>
dependenciesSet
.
add
(
d
));
}
}
result
=
distinct
(
result
.
concat
(
loadedDependencies
),
d
=>
d
.
identifier
.
uuid
);
const
dependencies
:
string
[]
=
[];
dependenciesSet
.
forEach
(
d
=>
!
ExtensionGalleryService
.
hasExtensionByName
(
result
,
d
)
&&
dependencies
.
push
(
d
));
return
this
.
getDependenciesRecursively
(
dependencies
,
result
,
token
);
});
}
private
getAsset
(
asset
:
IGalleryExtensionAsset
,
options
:
IRequestOptions
=
{},
token
:
CancellationToken
=
CancellationToken
.
None
):
Promise
<
IRequestContext
>
{
return
this
.
commonHeadersPromise
.
then
(
commonHeaders
=>
{
const
baseOptions
=
{
type
:
'
GET
'
};
...
...
@@ -798,15 +740,6 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
});
}
private
static
hasExtensionByName
(
extensions
:
IGalleryExtension
[],
name
:
string
):
boolean
{
for
(
const
extension
of
extensions
)
{
if
(
`
${
extension
.
publisher
}
.
${
extension
.
name
}
`
===
name
)
{
return
true
;
}
}
return
false
;
}
getExtensionsReport
():
Promise
<
IReportedExtension
[]
>
{
if
(
!
this
.
isEnabled
())
{
return
Promise
.
reject
(
new
Error
(
'
No extension gallery service configured.
'
));
...
...
src/vs/platform/extensions/node/extensionsUtil.ts
浏览文件 @
222af4b8
...
...
@@ -16,18 +16,24 @@ export function isUIExtension(manifest: IExtensionManifest, uiContributions: str
case
'
ui
'
:
return
true
;
case
'
workspace
'
:
return
false
;
default
:
{
// Tagged as UI extension in product
if
(
isNonEmptyArray
(
product
.
uiExtensions
)
&&
product
.
uiExtensions
.
some
(
id
=>
areSameExtensions
({
id
},
{
id
:
extensionId
})))
{
return
true
;
}
// Not an UI extension if it has main
if
(
manifest
.
main
)
{
return
false
;
}
// Not an UI extension if it has dependencies or an extension pack
if
(
isNonEmptyArray
(
manifest
.
extensionDependencies
)
||
isNonEmptyArray
(
manifest
.
extensionPack
))
{
return
false
;
}
if
(
manifest
.
contributes
)
{
// Not an UI extension if it has no ui contributions
if
(
!
uiContributions
.
length
||
Object
.
keys
(
manifest
.
contributes
).
some
(
contribution
=>
uiContributions
.
indexOf
(
contribution
)
===
-
1
))
{
return
false
;
}
}
// Default is UI Extension
return
true
;
}
}
...
...
src/vs/workbench/browser/web.simpleservices.ts
浏览文件 @
222af4b8
...
...
@@ -333,11 +333,6 @@ export class SimpleExtensionGalleryService implements IExtensionGalleryService {
return
Promise
.
resolve
(
undefined
);
}
loadAllDependencies
(
dependencies
:
IExtensionIdentifier
[],
token
:
CancellationToken
):
Promise
<
IGalleryExtension
[]
>
{
// @ts-ignore
return
Promise
.
resolve
(
undefined
);
}
getExtensionsReport
():
Promise
<
IReportedExtension
[]
>
{
// @ts-ignore
return
Promise
.
resolve
(
undefined
);
...
...
src/vs/workbench/services/extensions/node/multiExtensionManagement.ts
浏览文件 @
222af4b8
...
...
@@ -18,6 +18,8 @@ import { areSameExtensions } from 'vs/platform/extensionManagement/common/extens
import
{
localize
}
from
'
vs/nls
'
;
import
{
isUIExtension
}
from
'
vs/workbench/services/extensions/node/extensionsUtil
'
;
import
{
registerSingleton
}
from
'
vs/platform/instantiation/common/extensions
'
;
import
{
isNonEmptyArray
}
from
'
vs/base/common/arrays
'
;
import
{
values
}
from
'
vs/base/common/map
'
;
export
class
MultiExtensionManagementService
extends
Disposable
implements
IExtensionManagementService
{
...
...
@@ -145,7 +147,7 @@ export class MultiExtensionManagementService extends Disposable implements IExte
// Install only on remote server
const
promise
=
this
.
extensionManagementServerService
.
remoteExtensionManagementServer
.
extensionManagementService
.
install
(
vsix
);
// Install UI Dependencies on local server
await
this
.
installUIDependencies
(
manifest
);
await
this
.
installUIDependencies
AndPackedExtensions
(
manifest
);
return
promise
;
}
return
this
.
extensionManagementServerService
.
localExtensionManagementServer
.
extensionManagementService
.
install
(
vsix
);
...
...
@@ -165,8 +167,8 @@ export class MultiExtensionManagementService extends Disposable implements IExte
}
// Install only on remote server
const
promise
=
this
.
extensionManagementServerService
.
remoteExtensionManagementServer
.
extensionManagementService
.
installFromGallery
(
gallery
);
// Install UI
Dependencie
s on local server
await
this
.
installUIDependencies
(
manifest
);
// Install UI
dependencies and packed extension
s on local server
await
this
.
installUIDependencies
AndPackedExtensions
(
manifest
);
return
promise
;
}
else
{
return
Promise
.
reject
(
localize
(
'
Manifest is not found
'
,
"
Installing Extension {0} failed: Manifest is not found.
"
,
gallery
.
displayName
||
gallery
.
name
));
...
...
@@ -175,18 +177,11 @@ export class MultiExtensionManagementService extends Disposable implements IExte
return
this
.
extensionManagementServerService
.
localExtensionManagementServer
.
extensionManagementService
.
installFromGallery
(
gallery
);
}
private
async
installUIDependencies
(
manifest
:
IExtensionManifest
):
Promise
<
void
>
{
if
(
manifest
.
extensionDependencies
&&
manifest
.
extensionDependencies
.
length
)
{
const
dependencies
=
await
this
.
extensionGalleryService
.
loadAllDependencies
(
manifest
.
extensionDependencies
.
map
(
id
=>
({
id
})),
CancellationToken
.
None
);
if
(
dependencies
.
length
)
{
await
Promise
.
all
(
dependencies
.
map
(
async
d
=>
{
const
manifest
=
await
this
.
extensionGalleryService
.
getManifest
(
d
,
CancellationToken
.
None
);
if
(
manifest
&&
isUIExtension
(
manifest
,
this
.
configurationService
))
{
await
this
.
extensionManagementServerService
.
localExtensionManagementServer
.
extensionManagementService
.
installFromGallery
(
d
);
}
}));
}
}
private
async
installUIDependenciesAndPackedExtensions
(
manifest
:
IExtensionManifest
):
Promise
<
void
>
{
const
uiExtensions
=
await
this
.
getAllUIDependenciesAndPackedExtensions
(
manifest
,
CancellationToken
.
None
);
const
installed
=
await
this
.
extensionManagementServerService
.
localExtensionManagementServer
.
extensionManagementService
.
getInstalled
();
const
toInstall
=
uiExtensions
.
filter
(
e
=>
installed
.
every
(
i
=>
!
areSameExtensions
(
i
.
identifier
,
e
.
identifier
)));
await
Promise
.
all
(
toInstall
.
map
(
d
=>
this
.
extensionManagementServerService
.
localExtensionManagementServer
.
extensionManagementService
.
installFromGallery
(
d
)));
}
getExtensionsReport
():
Promise
<
IReportedExtension
[]
>
{
...
...
@@ -196,6 +191,49 @@ export class MultiExtensionManagementService extends Disposable implements IExte
private
getServer
(
extension
:
ILocalExtension
):
IExtensionManagementServer
|
null
{
return
this
.
extensionManagementServerService
.
getExtensionManagementServer
(
extension
.
location
);
}
private
async
getAllUIDependenciesAndPackedExtensions
(
manifest
:
IExtensionManifest
,
token
:
CancellationToken
):
Promise
<
IGalleryExtension
[]
>
{
const
result
=
new
Map
<
string
,
IGalleryExtension
>
();
const
extensions
=
[...(
manifest
.
extensionPack
||
[]),
...(
manifest
.
extensionDependencies
||
[])];
await
this
.
getAllUIDependenciesAndPackedExtensionsRecursively
(
extensions
,
result
,
token
);
return
values
(
result
);
}
private
async
getAllUIDependenciesAndPackedExtensionsRecursively
(
toGet
:
string
[],
result
:
Map
<
string
,
IGalleryExtension
>
,
token
:
CancellationToken
):
Promise
<
void
>
{
if
(
toGet
.
length
===
0
)
{
return
Promise
.
resolve
();
}
const
extensions
=
(
await
this
.
extensionGalleryService
.
query
({
names
:
toGet
,
pageSize
:
toGet
.
length
},
token
)).
firstPage
;
const
manifests
=
await
Promise
.
all
(
extensions
.
map
(
e
=>
this
.
extensionGalleryService
.
getManifest
(
e
,
token
)));
const
uiExtensionsManifests
:
IExtensionManifest
[]
=
[];
for
(
let
idx
=
0
;
idx
<
extensions
.
length
;
idx
++
)
{
const
extension
=
extensions
[
idx
];
const
manifest
=
manifests
[
idx
];
if
(
manifest
&&
isUIExtension
(
manifest
,
this
.
configurationService
))
{
result
.
set
(
extension
.
identifier
.
id
.
toLowerCase
(),
extension
);
uiExtensionsManifests
.
push
(
manifest
);
}
}
toGet
=
[];
for
(
const
uiExtensionManifest
of
uiExtensionsManifests
)
{
if
(
isNonEmptyArray
(
uiExtensionManifest
.
extensionDependencies
))
{
for
(
const
id
of
uiExtensionManifest
.
extensionDependencies
)
{
if
(
!
result
.
has
(
id
.
toLowerCase
()))
{
toGet
.
push
(
id
);
}
}
}
if
(
isNonEmptyArray
(
uiExtensionManifest
.
extensionPack
))
{
for
(
const
id
of
uiExtensionManifest
.
extensionPack
)
{
if
(
!
result
.
has
(
id
.
toLowerCase
()))
{
toGet
.
push
(
id
);
}
}
}
}
return
this
.
getAllUIDependenciesAndPackedExtensionsRecursively
(
toGet
,
result
,
token
);
}
}
registerSingleton
(
IExtensionManagementService
,
MultiExtensionManagementService
);
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录