Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
05046a08
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 搜索 >>
提交
05046a08
编写于
12月 20, 2016
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
move shellEnv to its own file, #16508
上级
b09b9a3a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
93 addition
and
76 deletion
+93
-76
src/vs/code/electron-main/main.ts
src/vs/code/electron-main/main.ts
+1
-76
src/vs/code/electron-main/shellEnv.ts
src/vs/code/electron-main/shellEnv.ts
+92
-0
未找到文件。
src/vs/code/electron-main/main.ts
浏览文件 @
05046a08
...
...
@@ -17,6 +17,7 @@ import { WindowsChannel } from 'vs/platform/windows/common/windowsIpc';
import
{
WindowsService
}
from
'
vs/platform/windows/electron-main/windowsService
'
;
import
{
LifecycleService
,
ILifecycleService
}
from
'
vs/code/electron-main/lifecycle
'
;
import
{
VSCodeMenu
}
from
'
vs/code/electron-main/menus
'
;
import
{
getShellEnvironment
}
from
'
vs/code/electron-main/shellEnv
'
;
import
{
IUpdateService
}
from
'
vs/platform/update/common/update
'
;
import
{
UpdateChannel
}
from
'
vs/platform/update/common/updateIpc
'
;
import
{
UpdateService
}
from
'
vs/platform/update/electron-main/updateService
'
;
...
...
@@ -44,7 +45,6 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
import
{
ConfigurationService
}
from
'
vs/platform/configuration/node/configurationService
'
;
import
{
IRequestService
}
from
'
vs/platform/request/node/request
'
;
import
{
RequestService
}
from
'
vs/platform/request/node/requestService
'
;
import
{
generateUuid
}
from
'
vs/base/common/uuid
'
;
import
{
IURLService
}
from
'
vs/platform/url/common/url
'
;
import
{
URLChannel
}
from
'
vs/platform/url/common/urlIpc
'
;
import
{
URLService
}
from
'
vs/platform/url/electron-main/urlService
'
;
...
...
@@ -56,7 +56,6 @@ import { getDelayedChannel } from 'vs/base/parts/ipc/common/ipc';
import
product
from
'
vs/platform/node/product
'
;
import
pkg
from
'
vs/platform/node/package
'
;
import
*
as
fs
from
'
original-fs
'
;
import
*
as
cp
from
'
child_process
'
;
function
quit
(
accessor
:
ServicesAccessor
,
errorOrMessage
?:
Error
|
string
):
void
{
const
logService
=
accessor
.
get
(
ILogService
);
...
...
@@ -341,80 +340,6 @@ function setupIPC(accessor: ServicesAccessor): TPromise<Server> {
return
setup
(
true
);
}
function
getUnixShellEnvironment
():
TPromise
<
platform
.
IProcessEnvironment
>
{
const
promise
=
new
TPromise
((
c
,
e
)
=>
{
const
runAsNode
=
process
.
env
[
'
ELECTRON_RUN_AS_NODE
'
];
const
noAttach
=
process
.
env
[
'
ELECTRON_NO_ATTACH_CONSOLE
'
];
const
mark
=
generateUuid
().
replace
(
/-/g
,
''
).
substr
(
0
,
12
);
const
regex
=
new
RegExp
(
mark
+
'
(.*)
'
+
mark
);
const
env
=
assign
({},
process
.
env
,
{
ELECTRON_RUN_AS_NODE
:
'
1
'
,
ELECTRON_NO_ATTACH_CONSOLE
:
'
1
'
});
const
command
=
`'
${
process
.
execPath
}
' -p '"
${
mark
}
" + JSON.stringify(process.env) + "
${
mark
}
"'`
;
const
child
=
cp
.
spawn
(
process
.
env
.
SHELL
,
[
'
-ilc
'
,
command
],
{
detached
:
true
,
stdio
:
[
'
ignore
'
,
'
pipe
'
,
process
.
stderr
],
env
});
const
buffers
:
Buffer
[]
=
[];
child
.
on
(
'
error
'
,
()
=>
c
({}));
child
.
stdout
.
on
(
'
data
'
,
b
=>
buffers
.
push
(
b
));
child
.
on
(
'
close
'
,
(
code
:
number
,
signal
:
any
)
=>
{
if
(
code
!==
0
)
{
return
e
(
new
Error
(
'
Failed to get environment
'
));
}
const
raw
=
Buffer
.
concat
(
buffers
).
toString
(
'
utf8
'
);
const
match
=
regex
.
exec
(
raw
);
const
rawStripped
=
match
?
match
[
1
]
:
'
{}
'
;
try
{
const
env
=
JSON
.
parse
(
rawStripped
);
if
(
runAsNode
)
{
env
[
'
ELECTRON_RUN_AS_NODE
'
]
=
runAsNode
;
}
else
{
delete
env
[
'
ELECTRON_RUN_AS_NODE
'
];
}
if
(
noAttach
)
{
env
[
'
ELECTRON_NO_ATTACH_CONSOLE
'
]
=
noAttach
;
}
else
{
delete
env
[
'
ELECTRON_NO_ATTACH_CONSOLE
'
];
}
c
(
env
);
}
catch
(
err
)
{
e
(
err
);
}
});
});
// swallow errors
return
promise
.
then
(
null
,
()
=>
({}));
}
/**
* We eed to get the environment from a user's shell.
* This should only be done when Code itself is not launched
* from within a shell.
*/
function
getShellEnvironment
():
TPromise
<
platform
.
IProcessEnvironment
>
{
if
(
process
.
env
[
'
VSCODE_CLI
'
]
===
'
1
'
)
{
return
TPromise
.
as
({});
}
if
(
platform
.
isWindows
)
{
return
TPromise
.
as
({});
}
return
getUnixShellEnvironment
();
}
function
createPaths
(
environmentService
:
IEnvironmentService
):
TPromise
<
any
>
{
const
paths
=
[
...
...
src/vs/code/electron-main/shellEnv.ts
0 → 100644
浏览文件 @
05046a08
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
*
as
cp
from
'
child_process
'
;
import
{
assign
}
from
'
vs/base/common/objects
'
;
import
{
generateUuid
}
from
'
vs/base/common/uuid
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
isWindows
}
from
'
vs/base/common/platform
'
;
function
getUnixShellEnvironment
():
TPromise
<
typeof
process
.
env
>
{
const
promise
=
new
TPromise
((
c
,
e
)
=>
{
const
runAsNode
=
process
.
env
[
'
ELECTRON_RUN_AS_NODE
'
];
const
noAttach
=
process
.
env
[
'
ELECTRON_NO_ATTACH_CONSOLE
'
];
const
mark
=
generateUuid
().
replace
(
/-/g
,
''
).
substr
(
0
,
12
);
const
regex
=
new
RegExp
(
mark
+
'
(.*)
'
+
mark
);
const
env
=
assign
({},
process
.
env
,
{
ELECTRON_RUN_AS_NODE
:
'
1
'
,
ELECTRON_NO_ATTACH_CONSOLE
:
'
1
'
});
const
command
=
`'
${
process
.
execPath
}
' -p '"
${
mark
}
" + JSON.stringify(process.env) + "
${
mark
}
"'`
;
const
child
=
cp
.
spawn
(
process
.
env
.
SHELL
,
[
'
-ilc
'
,
command
],
{
detached
:
true
,
stdio
:
[
'
ignore
'
,
'
pipe
'
,
process
.
stderr
],
env
});
const
buffers
:
Buffer
[]
=
[];
child
.
on
(
'
error
'
,
()
=>
c
({}));
child
.
stdout
.
on
(
'
data
'
,
b
=>
buffers
.
push
(
b
));
child
.
on
(
'
close
'
,
(
code
:
number
,
signal
:
any
)
=>
{
if
(
code
!==
0
)
{
return
e
(
new
Error
(
'
Failed to get environment
'
));
}
const
raw
=
Buffer
.
concat
(
buffers
).
toString
(
'
utf8
'
);
const
match
=
regex
.
exec
(
raw
);
const
rawStripped
=
match
?
match
[
1
]
:
'
{}
'
;
try
{
const
env
=
JSON
.
parse
(
rawStripped
);
if
(
runAsNode
)
{
env
[
'
ELECTRON_RUN_AS_NODE
'
]
=
runAsNode
;
}
else
{
delete
env
[
'
ELECTRON_RUN_AS_NODE
'
];
}
if
(
noAttach
)
{
env
[
'
ELECTRON_NO_ATTACH_CONSOLE
'
]
=
noAttach
;
}
else
{
delete
env
[
'
ELECTRON_NO_ATTACH_CONSOLE
'
];
}
c
(
env
);
}
catch
(
err
)
{
e
(
err
);
}
});
});
// swallow errors
return
promise
.
then
(
null
,
()
=>
({}));
}
let
_shellEnv
:
TPromise
<
typeof
process
.
env
>
;
/**
* We need to get the environment from a user's shell.
* This should only be done when Code itself is not launched
* from within a shell.
*/
export
function
getShellEnvironment
():
TPromise
<
typeof
process
.
env
>
{
if
(
_shellEnv
===
undefined
)
{
if
(
isWindows
)
{
_shellEnv
=
TPromise
.
as
({});
}
else
if
(
process
.
env
[
'
VSCODE_CLI
'
]
===
'
1
'
)
{
_shellEnv
=
TPromise
.
as
({});
}
else
{
_shellEnv
=
getUnixShellEnvironment
();
}
}
return
_shellEnv
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录