Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
4ef0081b
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,发现更多精彩内容 >>
提交
4ef0081b
编写于
10月 11, 2016
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix #13520
上级
34d582eb
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
102 addition
and
53 deletion
+102
-53
src/vs/platform/extensionManagement/common/extensionManagement.ts
...latform/extensionManagement/common/extensionManagement.ts
+6
-1
src/vs/workbench/electron-browser/extensionHost.ts
src/vs/workbench/electron-browser/extensionHost.ts
+93
-1
src/vs/workbench/node/extensionHostMain.ts
src/vs/workbench/node/extensionHostMain.ts
+3
-51
未找到文件。
src/vs/platform/extensionManagement/common/extensionManagement.ts
浏览文件 @
4ef0081b
...
@@ -235,3 +235,8 @@ export interface IExtensionTipsService {
...
@@ -235,3 +235,8 @@ export interface IExtensionTipsService {
export
const
ExtensionsLabel
=
nls
.
localize
(
'
extensions
'
,
"
Extensions
"
);
export
const
ExtensionsLabel
=
nls
.
localize
(
'
extensions
'
,
"
Extensions
"
);
export
const
ExtensionsChannelId
=
'
extensions
'
;
export
const
ExtensionsChannelId
=
'
extensions
'
;
export
const
ExtensionsStorageFile
=
'
extensions.json
'
;
export
interface
IExtensionsStorageData
{
disabledExtensions
?:
string
[];
}
\ No newline at end of file
src/vs/workbench/electron-browser/extensionHost.ts
浏览文件 @
4ef0081b
...
@@ -5,7 +5,10 @@
...
@@ -5,7 +5,10 @@
'
use strict
'
;
'
use strict
'
;
import
*
as
fs
from
'
fs
'
;
import
*
as
crypto
from
'
crypto
'
;
import
*
as
nls
from
'
vs/nls
'
;
import
*
as
nls
from
'
vs/nls
'
;
import
*
as
json
from
'
vs/base/common/json
'
;
import
pkg
from
'
vs/platform/package
'
;
import
pkg
from
'
vs/platform/package
'
;
import
paths
=
require
(
'
vs/base/common/paths
'
);
import
paths
=
require
(
'
vs/base/common/paths
'
);
import
{
toErrorMessage
}
from
'
vs/base/common/errorMessage
'
;
import
{
toErrorMessage
}
from
'
vs/base/common/errorMessage
'
;
...
@@ -25,6 +28,7 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment'
...
@@ -25,6 +28,7 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment'
import
{
ReloadWindowAction
}
from
'
vs/workbench/electron-browser/actions
'
;
import
{
ReloadWindowAction
}
from
'
vs/workbench/electron-browser/actions
'
;
import
{
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IExtensionDescription
,
IMessage
}
from
'
vs/platform/extensions/common/extensions
'
;
import
{
IExtensionDescription
,
IMessage
}
from
'
vs/platform/extensions/common/extensions
'
;
import
{
IExtensionsStorageData
,
ExtensionsStorageFile
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
ExtensionScanner
,
MessagesCollector
}
from
'
vs/workbench/node/extensionPoints
'
;
import
{
ExtensionScanner
,
MessagesCollector
}
from
'
vs/workbench/node/extensionPoints
'
;
import
{
IMessagePassingProtocol
}
from
'
vs/base/parts/ipc/common/ipc
'
;
import
{
IMessagePassingProtocol
}
from
'
vs/base/parts/ipc/common/ipc
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
...
@@ -57,6 +61,8 @@ export class ExtensionHostProcessWorker {
...
@@ -57,6 +61,8 @@ export class ExtensionHostProcessWorker {
private
isExtensionDevelopmentTestFromCli
:
boolean
;
private
isExtensionDevelopmentTestFromCli
:
boolean
;
private
isExtensionDevelopmentDebugging
:
boolean
;
private
isExtensionDevelopmentDebugging
:
boolean
;
private
workspaceStoragePath
:
string
;
private
_onMessage
=
new
Emitter
<
any
>
();
private
_onMessage
=
new
Emitter
<
any
>
();
public
get
onMessage
():
Event
<
any
>
{
public
get
onMessage
():
Event
<
any
>
{
return
this
.
_onMessage
.
event
;
return
this
.
_onMessage
.
event
;
...
@@ -215,6 +221,7 @@ export class ExtensionHostProcessWorker {
...
@@ -215,6 +221,7 @@ export class ExtensionHostProcessWorker {
contextService
:
{
contextService
:
{
workspace
:
this
.
contextService
.
getWorkspace
()
workspace
:
this
.
contextService
.
getWorkspace
()
},
},
workspaceStoragePath
:
this
.
getOrCreateWorkspaceStoragePath
(),
extensions
:
extensionDescriptors
extensions
:
extensionDescriptors
});
});
this
.
extensionHostProcessHandle
.
send
(
initPayload
);
this
.
extensionHostProcessHandle
.
send
(
initPayload
);
...
@@ -225,7 +232,7 @@ export class ExtensionHostProcessWorker {
...
@@ -225,7 +232,7 @@ export class ExtensionHostProcessWorker {
const
collector
=
new
MessagesCollector
();
const
collector
=
new
MessagesCollector
();
const
version
=
pkg
.
version
;
const
version
=
pkg
.
version
;
const
builtinExtensions
=
ExtensionScanner
.
scanExtensions
(
version
,
collector
,
BUILTIN_EXTENSIONS_PATH
,
true
);
const
builtinExtensions
=
ExtensionScanner
.
scanExtensions
(
version
,
collector
,
BUILTIN_EXTENSIONS_PATH
,
true
);
const
userExtensions
=
this
.
environmentService
.
disableExtensions
||
!
this
.
environmentService
.
extensionsPath
?
TPromise
.
as
([])
:
ExtensionScanner
.
scanExtensions
(
version
,
collector
,
this
.
environmentService
.
extensionsPath
,
false
);
const
userExtensions
=
this
.
environmentService
.
disableExtensions
||
!
this
.
environmentService
.
extensionsPath
?
TPromise
.
as
([])
:
this
.
getUserExtensions
(
version
,
collector
);
const
developedExtensions
=
this
.
environmentService
.
disableExtensions
||
!
this
.
environmentService
.
extensionDevelopmentPath
?
TPromise
.
as
([])
:
ExtensionScanner
.
scanOneOrMultipleExtensions
(
version
,
collector
,
this
.
environmentService
.
extensionDevelopmentPath
,
false
);
const
developedExtensions
=
this
.
environmentService
.
disableExtensions
||
!
this
.
environmentService
.
extensionDevelopmentPath
?
TPromise
.
as
([])
:
ExtensionScanner
.
scanOneOrMultipleExtensions
(
version
,
collector
,
this
.
environmentService
.
extensionDevelopmentPath
,
false
);
const
isDev
=
!
this
.
environmentService
.
isBuilt
||
!!
this
.
environmentService
.
extensionDevelopmentPath
;
const
isDev
=
!
this
.
environmentService
.
isBuilt
||
!!
this
.
environmentService
.
extensionDevelopmentPath
;
...
@@ -262,6 +269,38 @@ export class ExtensionHostProcessWorker {
...
@@ -262,6 +269,38 @@ export class ExtensionHostProcessWorker {
});
});
}
}
private
getUserExtensions
(
version
:
string
,
collector
:
MessagesCollector
):
TPromise
<
IExtensionDescription
[]
>
{
return
ExtensionScanner
.
scanExtensions
(
version
,
collector
,
this
.
environmentService
.
extensionsPath
,
false
)
.
then
(
extensionDescriptions
=>
this
.
getDisabledExtensions
()
.
then
(
disabledExtensions
=>
extensionDescriptions
.
filter
(
e
=>
disabledExtensions
.
indexOf
(
`
${
e
.
publisher
}
.
${
e
.
name
}
`
)
===
-
1
)));
}
private
getDisabledExtensions
():
TPromise
<
string
[]
>
{
return
this
.
getWorkspaceDisabledExtensions
();
}
private
getWorkspaceDisabledExtensions
():
TPromise
<
string
[]
>
{
const
workspaceStoragePath
=
this
.
getOrCreateWorkspaceStoragePath
();
if
(
!
workspaceStoragePath
)
{
return
TPromise
.
wrap
([]);
}
return
new
TPromise
<
string
[]
>
((
c
,
e
)
=>
{
fs
.
readFile
(
paths
.
join
(
workspaceStoragePath
,
ExtensionsStorageFile
),
(
error
,
raw
)
=>
{
let
result
=
[];
if
(
!
error
)
{
try
{
const
extensionsData
:
IExtensionsStorageData
=
json
.
parse
(
raw
.
toString
());
result
=
extensionsData
.
disabledExtensions
||
[];
}
catch
(
error
)
{
// Ignore parsing errors
}
}
return
c
(
result
);
});
});
}
private
logExtensionHostMessage
(
logEntry
:
ILogEntry
)
{
private
logExtensionHostMessage
(
logEntry
:
ILogEntry
)
{
let
args
=
[];
let
args
=
[];
try
{
try
{
...
@@ -393,4 +432,57 @@ export class ExtensionHostProcessWorker {
...
@@ -393,4 +432,57 @@ export class ExtensionHostProcessWorker {
}
}
}
}
}
}
private
getOrCreateWorkspaceStoragePath
():
string
{
const
workspace
=
this
.
contextService
.
getWorkspace
();
if
(
!
workspace
)
{
return
void
0
;
}
if
(
this
.
workspaceStoragePath
)
{
return
this
.
workspaceStoragePath
;
}
function
rmkDir
(
directory
:
string
):
boolean
{
try
{
fs
.
mkdirSync
(
directory
);
return
true
;
}
catch
(
err
)
{
if
(
err
.
code
===
'
ENOENT
'
)
{
if
(
rmkDir
(
paths
.
dirname
(
directory
)))
{
fs
.
mkdirSync
(
directory
);
return
true
;
}
}
else
{
return
fs
.
statSync
(
directory
).
isDirectory
();
}
}
}
if
(
workspace
)
{
const
hash
=
crypto
.
createHash
(
'
md5
'
);
hash
.
update
(
workspace
.
resource
.
fsPath
);
if
(
workspace
.
uid
)
{
hash
.
update
(
workspace
.
uid
.
toString
());
}
this
.
workspaceStoragePath
=
paths
.
join
(
this
.
environmentService
.
appSettingsHome
,
'
workspaceStorage
'
,
hash
.
digest
(
'
hex
'
));
if
(
!
fs
.
existsSync
(
this
.
workspaceStoragePath
))
{
try
{
if
(
rmkDir
(
this
.
workspaceStoragePath
))
{
fs
.
writeFileSync
(
paths
.
join
(
this
.
workspaceStoragePath
,
'
meta.json
'
),
JSON
.
stringify
({
workspacePath
:
workspace
.
resource
.
fsPath
,
uid
:
workspace
.
uid
?
workspace
.
uid
:
null
},
null
,
4
));
}
else
{
this
.
workspaceStoragePath
=
void
0
;
}
}
catch
(
err
)
{
this
.
workspaceStoragePath
=
void
0
;
}
}
}
return
this
.
workspaceStoragePath
;
}
}
}
\ No newline at end of file
src/vs/workbench/node/extensionHostMain.ts
浏览文件 @
4ef0081b
...
@@ -5,9 +5,6 @@
...
@@ -5,9 +5,6 @@
'
use strict
'
;
'
use strict
'
;
import
*
as
fs
from
'
fs
'
;
import
*
as
crypto
from
'
crypto
'
;
import
nls
=
require
(
'
vs/nls
'
);
import
nls
=
require
(
'
vs/nls
'
);
import
pfs
=
require
(
'
vs/base/node/pfs
'
);
import
pfs
=
require
(
'
vs/base/node/pfs
'
);
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
...
@@ -38,6 +35,7 @@ export interface IInitData {
...
@@ -38,6 +35,7 @@ export interface IInitData {
options
:
any
;
options
:
any
;
};
};
extensions
:
IExtensionDescription
[];
extensions
:
IExtensionDescription
[];
workspaceStoragePath
:
string
;
}
}
const
nativeExit
=
process
.
exit
.
bind
(
process
);
const
nativeExit
=
process
.
exit
.
bind
(
process
);
...
@@ -68,7 +66,8 @@ export class ExtensionHostMain {
...
@@ -68,7 +66,8 @@ export class ExtensionHostMain {
this
.
_extensions
=
initData
.
extensions
;
this
.
_extensions
=
initData
.
extensions
;
this
.
_contextService
=
new
WorkspaceContextService
(
initData
.
contextService
.
workspace
);
this
.
_contextService
=
new
WorkspaceContextService
(
initData
.
contextService
.
workspace
);
const
workspaceStoragePath
=
this
.
_getOrCreateWorkspaceStoragePath
();
const
workspaceStoragePath
=
initData
.
workspaceStoragePath
;
console
.
log
(
workspaceStoragePath
);
const
threadService
=
new
ExtHostThreadService
(
remoteCom
);
const
threadService
=
new
ExtHostThreadService
(
remoteCom
);
...
@@ -80,53 +79,6 @@ export class ExtensionHostMain {
...
@@ -80,53 +79,6 @@ export class ExtensionHostMain {
defineAPI
(
new
ExtHostAPIImplementation
(
threadService
,
this
.
_extensionService
,
this
.
_contextService
,
telemetryService
));
defineAPI
(
new
ExtHostAPIImplementation
(
threadService
,
this
.
_extensionService
,
this
.
_contextService
,
telemetryService
));
}
}
private
_getOrCreateWorkspaceStoragePath
():
string
{
let
workspaceStoragePath
:
string
;
const
workspace
=
this
.
_contextService
.
getWorkspace
();
function
rmkDir
(
directory
:
string
):
boolean
{
try
{
fs
.
mkdirSync
(
directory
);
return
true
;
}
catch
(
err
)
{
if
(
err
.
code
===
'
ENOENT
'
)
{
if
(
rmkDir
(
paths
.
dirname
(
directory
)))
{
fs
.
mkdirSync
(
directory
);
return
true
;
}
}
else
{
return
fs
.
statSync
(
directory
).
isDirectory
();
}
}
}
if
(
workspace
)
{
const
hash
=
crypto
.
createHash
(
'
md5
'
);
hash
.
update
(
workspace
.
resource
.
fsPath
);
if
(
workspace
.
uid
)
{
hash
.
update
(
workspace
.
uid
.
toString
());
}
workspaceStoragePath
=
paths
.
join
(
this
.
_environment
.
appSettingsHome
,
'
workspaceStorage
'
,
hash
.
digest
(
'
hex
'
));
if
(
!
fs
.
existsSync
(
workspaceStoragePath
))
{
try
{
if
(
rmkDir
(
workspaceStoragePath
))
{
fs
.
writeFileSync
(
paths
.
join
(
workspaceStoragePath
,
'
meta.json
'
),
JSON
.
stringify
({
workspacePath
:
workspace
.
resource
.
fsPath
,
uid
:
workspace
.
uid
?
workspace
.
uid
:
null
},
null
,
4
));
}
else
{
workspaceStoragePath
=
undefined
;
}
}
catch
(
err
)
{
workspaceStoragePath
=
undefined
;
}
}
}
return
workspaceStoragePath
;
}
public
start
():
TPromise
<
void
>
{
public
start
():
TPromise
<
void
>
{
return
this
.
registerExtensions
();
return
this
.
registerExtensions
();
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录