Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
4c8410c1
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4c8410c1
编写于
6月 16, 2016
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
extension.manifest
上级
60798fda
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
48 addition
and
48 deletion
+48
-48
src/vs/code/node/cliProcessMain.ts
src/vs/code/node/cliProcessMain.ts
+8
-5
src/vs/platform/extensionManagement/common/extensionManagement.ts
...latform/extensionManagement/common/extensionManagement.ts
+2
-1
src/vs/platform/extensionManagement/node/extensionManagementService.ts
...rm/extensionManagement/node/extensionManagementService.ts
+20
-24
src/vs/platform/extensionManagement/node/extensionManagementUtil.ts
...tform/extensionManagement/node/extensionManagementUtil.ts
+3
-7
src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts
...ch/parts/extensions/electron-browser/extensionsActions.ts
+15
-11
未找到文件。
src/vs/code/node/cliProcessMain.ts
浏览文件 @
4c8410c1
...
...
@@ -17,8 +17,7 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment'
import
{
EnvironmentService
}
from
'
vs/platform/environment/node/environmentService
'
;
import
{
IEventService
}
from
'
vs/platform/event/common/event
'
;
import
{
EventService
}
from
'
vs/platform/event/common/eventService
'
;
import
{
IExtensionManagementService
,
IExtensionGalleryService
,
IQueryResult
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
getExtensionId
}
from
'
vs/platform/extensionManagement/node/extensionManagementUtil
'
;
import
{
IExtensionManagementService
,
IExtensionGalleryService
,
IQueryResult
,
IExtensionManifest
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
ExtensionManagementService
}
from
'
vs/platform/extensionManagement/node/extensionManagementService
'
;
import
{
ExtensionGalleryService
}
from
'
vs/platform/extensionManagement/node/extensionGalleryService
'
;
import
{
ITelemetryService
,
combinedAppender
,
NullTelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
...
...
@@ -34,6 +33,10 @@ const notFound = id => localize('notFound', "Extension '{0}' not found.", id);
const
notInstalled
=
id
=>
localize
(
'
notInstalled
'
,
"
Extension '{0}' is not installed.
"
,
id
);
const
useId
=
localize
(
'
useId
'
,
"
Make sure you use the full extension ID, eg: {0}
"
,
'
ms-vscode.csharp
'
);
function
getId
(
manifest
:
IExtensionManifest
):
string
{
return
`
${
manifest
.
publisher
}
.
${
manifest
.
name
}
`
;
}
class
Main
{
constructor
(
...
...
@@ -59,14 +62,14 @@ class Main {
private
listExtensions
():
TPromise
<
any
>
{
return
this
.
extensionManagementService
.
getInstalled
().
then
(
extensions
=>
{
extensions
.
forEach
(
e
=>
console
.
log
(
get
ExtensionId
(
e
)));
extensions
.
forEach
(
e
=>
console
.
log
(
get
Id
(
e
.
manifest
)));
});
}
private
installExtension
(
ids
:
string
[]):
TPromise
<
any
>
{
return
sequence
(
ids
.
map
(
id
=>
()
=>
{
return
this
.
extensionManagementService
.
getInstalled
().
then
(
installed
=>
{
const
isInstalled
=
installed
.
some
(
e
=>
get
ExtensionId
(
e
)
===
id
);
const
isInstalled
=
installed
.
some
(
e
=>
get
Id
(
e
.
manifest
)
===
id
);
if
(
isInstalled
)
{
console
.
log
(
localize
(
'
alreadyInstalled
'
,
"
Extension '{0}' is already installed.
"
,
id
));
...
...
@@ -105,7 +108,7 @@ class Main {
private
uninstallExtension
(
ids
:
string
[]):
TPromise
<
any
>
{
return
sequence
(
ids
.
map
(
id
=>
()
=>
{
return
this
.
extensionManagementService
.
getInstalled
().
then
(
installed
=>
{
const
[
extension
]
=
installed
.
filter
(
e
=>
get
ExtensionId
(
e
)
===
id
);
const
[
extension
]
=
installed
.
filter
(
e
=>
get
Id
(
e
.
manifest
)
===
id
);
if
(
!
extension
)
{
return
TPromise
.
wrapError
(
`
${
notInstalled
(
id
)
}
\n
${
useId
}
`
);
...
...
src/vs/platform/extensionManagement/common/extensionManagement.ts
浏览文件 @
4c8410c1
...
...
@@ -39,7 +39,8 @@ export interface IGalleryMetadata {
versions
:
IGalleryVersion
[];
}
export
interface
IExtension
extends
IExtensionManifest
{
export
interface
IExtension
{
manifest
:
IExtensionManifest
;
path
?:
string
;
}
...
...
src/vs/platform/extensionManagement/node/extensionManagementService.ts
浏览文件 @
4c8410c1
...
...
@@ -38,7 +38,7 @@ function parseManifest(raw: string): TPromise<IExtensionManifest> {
});
}
function
validate
(
zipPath
:
string
,
extension
?:
IExtension
,
version
=
extension
&&
extension
.
version
):
TPromise
<
IExtension
>
{
function
validate
(
zipPath
:
string
,
extension
?:
IExtension
Manifest
,
version
=
extension
&&
extension
.
version
):
TPromise
<
IExtensionManifest
>
{
return
buffer
(
zipPath
,
'
extension/package.json
'
)
.
then
(
buffer
=>
parseManifest
(
buffer
.
toString
(
'
utf8
'
)))
.
then
(
manifest
=>
{
...
...
@@ -61,14 +61,7 @@ function validate(zipPath: string, extension?: IExtension, version = extension &
}
function
createExtension
(
manifest
:
IExtensionManifest
,
path
?:
string
):
IExtension
{
const
extension
:
IExtension
=
{
name
:
manifest
.
name
,
displayName
:
manifest
.
displayName
||
manifest
.
name
,
publisher
:
manifest
.
publisher
,
version
:
manifest
.
version
,
engines
:
{
vscode
:
manifest
.
engines
.
vscode
},
description
:
manifest
.
description
||
''
};
const
extension
:
IExtension
=
{
manifest
};
// if (galleryInformation) {
// extension.galleryInformation = galleryInformation;
...
...
@@ -133,10 +126,12 @@ export class ExtensionManagementService implements IExtensionManagementService {
return
this
.
installFromZip
(
arg
);
}
const
extension
=
arg
as
IExtension
;
const
extension
=
arg
as
IGalleryExtension
;
const
{
manifest
}
=
extension
;
return
this
.
isObsolete
(
extension
).
then
(
obsolete
=>
{
if
(
obsolete
)
{
return
TPromise
.
wrapError
<
void
>
(
new
Error
(
nls
.
localize
(
'
restartCode
'
,
"
Please restart Code before reinstalling {0}.
"
,
extension
.
name
)));
return
TPromise
.
wrapError
<
void
>
(
new
Error
(
nls
.
localize
(
'
restartCode
'
,
"
Please restart Code before reinstalling {0}.
"
,
manifest
.
name
)));
}
return
this
.
installFromGallery
(
arg
);
...
...
@@ -206,8 +201,9 @@ export class ExtensionManagementService implements IExtensionManagementService {
}
uninstall
(
extension
:
IExtension
):
TPromise
<
void
>
{
const
extensionPath
=
extension
.
path
||
path
.
join
(
this
.
extensionsPath
,
getExtensionId
(
extension
));
const
id
=
getExtensionId
(
extension
);
const
{
manifest
}
=
extension
;
const
id
=
getExtensionId
(
manifest
);
const
extensionPath
=
extension
.
path
||
path
.
join
(
this
.
extensionsPath
,
id
);
return
pfs
.
exists
(
extensionPath
)
.
then
(
exists
=>
exists
?
null
:
Promise
.
wrapError
(
new
Error
(
nls
.
localize
(
'
notExists
'
,
"
Could not find extension
"
))))
...
...
@@ -226,8 +222,8 @@ export class ExtensionManagementService implements IExtensionManagementService {
}
return
all
.
then
(
extensions
=>
{
const
byId
=
values
(
groupBy
(
extensions
,
p
=>
`
${
p
.
publisher
}
.
${
p
.
name
}
`
));
return
byId
.
map
(
p
=>
p
.
sort
((
a
,
b
)
=>
semver
.
rcompare
(
a
.
version
,
b
.
version
))[
0
]);
const
byId
=
values
(
groupBy
(
extensions
,
p
=>
`
${
p
.
manifest
.
publisher
}
.
${
p
.
manifest
.
name
}
`
));
return
byId
.
map
(
p
=>
p
.
sort
((
a
,
b
)
=>
semver
.
rcompare
(
a
.
manifest
.
version
,
b
.
manifest
.
version
))[
0
]);
});
}
...
...
@@ -254,7 +250,7 @@ export class ExtensionManagementService implements IExtensionManagementService {
removeDeprecatedExtensions
():
TPromise
<
void
>
{
const
outdated
=
this
.
getOutdatedExtensions
()
.
then
(
extensions
=>
extensions
.
map
(
e
=>
getExtensionId
(
e
)));
.
then
(
extensions
=>
extensions
.
map
(
({
manifest
})
=>
getExtensionId
(
manifest
)));
const
obsolete
=
this
.
getObsoleteExtensions
()
.
then
(
obsolete
=>
Object
.
keys
(
obsolete
));
...
...
@@ -271,26 +267,26 @@ export class ExtensionManagementService implements IExtensionManagementService {
private
getOutdatedExtensions
():
TPromise
<
IExtension
[]
>
{
return
this
.
getAllInstalled
().
then
(
plugins
=>
{
const
byId
=
values
(
groupBy
(
plugins
,
p
=>
`
${
p
.
publisher
}
.
${
p
.
name
}
`
));
const
extensions
=
flatten
(
byId
.
map
(
p
=>
p
.
sort
((
a
,
b
)
=>
semver
.
rcompare
(
a
.
version
,
b
.
version
)).
slice
(
1
)));
const
byId
=
values
(
groupBy
(
plugins
,
p
=>
`
${
p
.
manifest
.
publisher
}
.
${
p
.
manifest
.
name
}
`
));
const
extensions
=
flatten
(
byId
.
map
(
p
=>
p
.
sort
((
a
,
b
)
=>
semver
.
rcompare
(
a
.
manifest
.
version
,
b
.
manifest
.
version
)).
slice
(
1
)));
return
extensions
.
filter
(
e
=>
!!
e
.
path
);
});
}
private
isObsolete
(
extension
:
IExtension
):
TPromise
<
boolean
>
{
const
id
=
getExtensionId
(
extension
);
private
isObsolete
(
{
manifest
}
:
IExtension
):
TPromise
<
boolean
>
{
const
id
=
getExtensionId
(
manifest
);
return
this
.
withObsoleteExtensions
(
obsolete
=>
!!
obsolete
[
id
]);
}
private
setObsolete
(
extension
:
IExtension
):
TPromise
<
void
>
{
const
id
=
getExtensionId
(
extension
);
private
setObsolete
(
{
manifest
}
:
IExtension
):
TPromise
<
void
>
{
const
id
=
getExtensionId
(
manifest
);
return
this
.
withObsoleteExtensions
(
obsolete
=>
assign
(
obsolete
,
{
[
id
]:
true
}));
}
private
unsetObsolete
(
extension
:
IExtension
):
TPromise
<
void
>
{
const
id
=
getExtensionId
(
extension
);
private
unsetObsolete
(
{
manifest
}
:
IExtension
):
TPromise
<
void
>
{
const
id
=
getExtensionId
(
manifest
);
return
this
.
withObsoleteExtensions
<
void
>
(
obsolete
=>
delete
obsolete
[
id
]);
}
...
...
src/vs/platform/extensionManagement/node/extensionManagementUtil.ts
浏览文件 @
4c8410c1
...
...
@@ -9,10 +9,6 @@ import { IExtension, IExtensionManifest, IExtensionManagementService, IExtension
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
*
as
semver
from
'
semver
'
;
export
function
getExtensionId
(
extension
:
IExtension
):
string
{
return
`
${
extension
.
publisher
}
.
${
extension
.
name
}
`
;
}
export
function
extensionEquals
(
one
:
IExtensionManifest
,
other
:
IExtensionManifest
):
boolean
{
return
one
.
publisher
===
other
.
publisher
&&
one
.
name
===
other
.
name
;
}
...
...
@@ -36,14 +32,14 @@ export function getOutdatedExtensions(extensionsService: IExtensionManagementSer
}
return
extensionsService
.
getInstalled
().
then
(
installed
=>
{
const
ids
=
installed
.
map
(
getExtensionId
);
const
ids
=
installed
.
map
(
({
manifest
})
=>
`
${
manifest
.
publisher
}
.
${
manifest
.
name
}
`
);
return
galleryService
.
query
({
ids
,
pageSize
:
1000
}).
then
(
result
=>
{
const
available
=
result
.
firstPage
;
return
available
.
map
(
extension
=>
{
const
local
=
installed
.
filter
(
local
=>
extensionEquals
(
local
,
extension
.
manifest
))[
0
];
if
(
local
&&
semver
.
lt
(
local
.
version
,
extension
.
manifest
.
version
))
{
const
local
=
installed
.
filter
(
local
=>
extensionEquals
(
local
.
manifest
,
extension
.
manifest
))[
0
];
if
(
local
&&
semver
.
lt
(
local
.
manifest
.
version
,
extension
.
manifest
.
version
))
{
return
local
;
}
else
{
return
null
;
...
...
src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts
浏览文件 @
4c8410c1
...
...
@@ -32,7 +32,7 @@ export class ListExtensionsAction extends Action {
super
(
id
,
label
,
null
,
true
);
}
public
run
():
Promise
{
run
():
Promise
{
return
this
.
quickOpenService
.
show
(
'
ext
'
);
}
...
...
@@ -55,7 +55,7 @@ export class InstallExtensionAction extends Action {
super
(
id
,
label
,
null
,
true
);
}
public
run
():
Promise
{
run
():
Promise
{
return
this
.
quickOpenService
.
show
(
'
ext install
'
);
}
...
...
@@ -78,7 +78,7 @@ export class ListOutdatedExtensionsAction extends Action {
super
(
id
,
label
,
null
,
true
);
}
public
run
():
Promise
{
run
():
Promise
{
return
this
.
quickOpenService
.
show
(
'
ext update
'
);
}
...
...
@@ -101,7 +101,7 @@ export class ListSuggestedExtensionsAction extends Action {
super
(
id
,
label
,
null
,
true
);
}
public
run
():
Promise
{
run
():
Promise
{
return
this
.
quickOpenService
.
show
(
'
ext recommend
'
);
}
...
...
@@ -123,11 +123,11 @@ export class InstallAction extends Action {
super
(
'
extensions.install
'
,
label
,
'
octicon octicon-cloud-download
'
,
true
);
}
public
run
(
extension
:
IGalleryExtension
):
TPromise
<
any
>
{
run
(
extension
:
IGalleryExtension
):
TPromise
<
any
>
{
this
.
enabled
=
false
;
return
this
.
extensionManagementService
.
getInstalled
()
.
then
(
installed
=>
installed
.
some
(
e
=>
extensionEquals
(
e
,
extension
.
manifest
)))
.
then
(
installed
=>
installed
.
some
(
({
manifest
})
=>
extensionEquals
(
manifest
,
extension
.
manifest
)))
.
then
(
isUpdate
=>
{
return
this
.
extensionManagementService
.
install
(
extension
)
...
...
@@ -173,18 +173,20 @@ export class UninstallAction extends Action {
super
(
'
extensions.uninstall
'
,
nls
.
localize
(
'
uninstall
'
,
"
Uninstall Extension
"
),
'
octicon octicon-x
'
,
true
);
}
public
run
(
extension
:
IExtension
):
TPromise
<
any
>
{
if
(
!
window
.
confirm
(
nls
.
localize
(
'
deleteSure
'
,
"
Are you sure you want to uninstall '{0}'?
"
,
extension
.
displayName
)))
{
run
(
extension
:
IExtension
):
TPromise
<
any
>
{
const
name
=
extension
.
manifest
.
displayName
||
extension
.
manifest
.
name
;
if
(
!
window
.
confirm
(
nls
.
localize
(
'
deleteSure
'
,
"
Are you sure you want to uninstall '{0}'?
"
,
name
)))
{
return
TPromise
.
as
(
null
);
}
this
.
enabled
=
false
;
return
this
.
extensionManagementService
.
getInstalled
().
then
(
localExtensions
=>
{
const
[
local
]
=
localExtensions
.
filter
(
local
=>
extensionEquals
(
local
,
extension
));
const
[
local
]
=
localExtensions
.
filter
(
local
=>
extensionEquals
(
local
.
manifest
,
extension
.
manifest
));
if
(
!
local
)
{
return
TPromise
.
wrapError
(
nls
.
localize
(
'
notFound
'
,
"
Extension '{0}' not installed.
"
,
extension
.
displayN
ame
));
return
TPromise
.
wrapError
(
nls
.
localize
(
'
notFound
'
,
"
Extension '{0}' not installed.
"
,
n
ame
));
}
return
this
.
extensionManagementService
.
uninstall
(
local
)
...
...
@@ -195,9 +197,11 @@ export class UninstallAction extends Action {
}
private
onSuccess
(
extension
:
IExtension
)
{
const
name
=
extension
.
manifest
.
displayName
||
extension
.
manifest
.
name
;
this
.
reportTelemetry
(
extension
,
true
);
this
.
messageService
.
show
(
Severity
.
Info
,
{
message
:
nls
.
localize
(
'
success-uninstalled
'
,
"
'{0}' was successfully uninstalled. Restart to deactivate it.
"
,
extension
.
displayN
ame
),
message
:
nls
.
localize
(
'
success-uninstalled
'
,
"
'{0}' was successfully uninstalled. Restart to deactivate it.
"
,
n
ame
),
actions
:
[
CloseAction
,
this
.
instantiationService
.
createInstance
(
ReloadWindowAction
,
ReloadWindowAction
.
ID
,
nls
.
localize
(
'
restartNow2
'
,
"
Restart Now
"
))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录