Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
a672eeb4
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,发现更多精彩内容 >>
提交
a672eeb4
编写于
8月 16, 2016
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
make json, download not call request
上级
b9d11298
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
67 addition
and
67 deletion
+67
-67
src/vs/base/node/request.ts
src/vs/base/node/request.ts
+33
-39
src/vs/code/electron-main/auto-updater.linux.ts
src/vs/code/electron-main/auto-updater.linux.ts
+3
-2
src/vs/code/electron-main/auto-updater.win32.ts
src/vs/code/electron-main/auto-updater.win32.ts
+5
-3
src/vs/platform/extensionManagement/node/extensionGalleryService.ts
...tform/extensionManagement/node/extensionGalleryService.ts
+26
-23
未找到文件。
src/vs/base/node/request.ts
浏览文件 @
a672eeb4
...
...
@@ -6,7 +6,7 @@
'
use strict
'
;
import
{
Promise
,
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
isBoolean
}
from
'
vs/base/common/types
'
;
import
{
isBoolean
,
isNumber
}
from
'
vs/base/common/types
'
;
import
https
=
require
(
'
https
'
);
import
http
=
require
(
'
http
'
);
import
{
Stream
}
from
'
stream
'
;
...
...
@@ -40,9 +40,9 @@ export function request(options: IRequestOptions): TPromise<IRequestContext> {
let
req
:
http
.
ClientRequest
;
return
new
TPromise
<
IRequestContext
>
((
c
,
e
)
=>
{
le
t
endpoint
=
parseUrl
(
options
.
url
);
le
t
opts
:
https
.
RequestOptions
=
{
cons
t
endpoint
=
parseUrl
(
options
.
url
);
const
protocol
=
endpoint
.
protocol
===
'
https:
'
?
https
:
http
;
cons
t
opts
:
https
.
RequestOptions
=
{
hostname
:
endpoint
.
hostname
,
port
:
endpoint
.
port
?
parseInt
(
endpoint
.
port
)
:
(
endpoint
.
protocol
===
'
https:
'
?
443
:
80
),
path
:
endpoint
.
path
,
...
...
@@ -56,12 +56,13 @@ export function request(options: IRequestOptions): TPromise<IRequestContext> {
opts
.
auth
=
options
.
user
+
'
:
'
+
options
.
password
;
}
let
protocol
=
endpoint
.
protocol
===
'
https:
'
?
https
:
http
;
req
=
protocol
.
request
(
opts
,
(
res
:
http
.
ClientResponse
)
=>
{
if
(
res
.
statusCode
>=
300
&&
res
.
statusCode
<
400
&&
options
.
followRedirects
&&
options
.
followRedirects
>
0
&&
res
.
headers
[
'
location
'
])
{
const
followRedirects
=
isNumber
(
options
.
followRedirects
)
?
options
.
followRedirects
:
3
;
if
(
res
.
statusCode
>=
300
&&
res
.
statusCode
<
400
&&
followRedirects
>
0
&&
res
.
headers
[
'
location
'
])
{
c
(
<
any
>
request
(
assign
({},
options
,
{
url
:
res
.
headers
[
'
location
'
],
followRedirects
:
options
.
followRedirects
-
1
followRedirects
:
followRedirects
-
1
})));
}
else
{
let
stream
:
Stream
=
res
;
...
...
@@ -73,11 +74,13 @@ export function request(options: IRequestOptions): TPromise<IRequestContext> {
c
({
req
,
res
,
stream
});
}
});
req
.
on
(
'
error
'
,
e
);
if
(
options
.
timeout
)
{
req
.
setTimeout
(
options
.
timeout
);
}
if
(
options
.
data
)
{
req
.
write
(
options
.
data
);
}
...
...
@@ -87,50 +90,41 @@ export function request(options: IRequestOptions): TPromise<IRequestContext> {
()
=>
req
&&
req
.
abort
());
}
export
function
download
(
filePath
:
string
,
opts
:
IRequestOptions
):
TPromise
<
void
>
{
return
request
(
assign
(
opts
,
{
followRedirects
:
3
})).
then
(
pair
=>
new
TPromise
<
void
>
((
c
,
e
)
=>
{
let
out
=
createWriteStream
(
filePath
);
out
.
once
(
'
finish
'
,
()
=>
c
(
null
));
pair
.
stream
.
once
(
'
error
'
,
e
);
pair
.
stream
.
pipe
(
out
);
}));
function
isSuccess
(
context
:
IRequestContext
):
boolean
{
return
(
context
.
res
.
statusCode
>=
200
&&
context
.
res
.
statusCode
<
300
)
||
context
.
res
.
statusCode
===
1223
;
}
export
function
text
(
opts
:
IRequestOptions
):
TPromise
<
string
>
{
return
request
(
opts
).
then
(
pair
=>
new
Promise
((
c
,
e
)
=>
{
if
(
!
((
pair
.
res
.
statusCode
>=
200
&&
pair
.
res
.
statusCode
<
300
)
||
pair
.
res
.
statusCode
===
1223
))
{
return
e
(
'
Server returned
'
+
pair
.
res
.
statusCode
);
}
function
hasNoContent
(
context
:
IRequestContext
):
boolean
{
return
context
.
res
.
statusCode
===
204
;
}
if
(
pair
.
res
.
statusCode
===
204
)
{
return
c
(
null
);
}
export
function
download
(
filePath
:
string
,
context
:
IRequestContext
):
TPromise
<
void
>
{
return
new
TPromise
<
void
>
((
c
,
e
)
=>
{
const
out
=
createWriteStream
(
filePath
);
let
buffer
:
string
[]
=
[];
pair
.
stream
.
on
(
'
data
'
,
d
=>
buffer
.
push
(
d
));
pair
.
stream
.
on
(
'
end
'
,
()
=>
c
(
buffer
.
join
(
''
)));
pair
.
stream
.
on
(
'
error
'
,
e
);
}));
out
.
once
(
'
finish
'
,
()
=>
c
(
null
));
context
.
stream
.
once
(
'
error
'
,
e
);
context
.
stream
.
pipe
(
out
);
});
}
export
function
json
<
T
>
(
opts
:
IRequestOptions
):
TPromise
<
T
>
{
return
request
(
opts
).
then
(
pair
=>
new
Promise
((
c
,
e
)
=>
{
if
(
!
((
pair
.
res
.
statusCode
>=
200
&&
pair
.
res
.
statusCode
<
300
)
||
pair
.
res
.
statusCode
===
1223
))
{
return
e
(
'
Server returned
'
+
pair
.
res
.
statusCode
);
export
function
json
<
T
>
(
context
:
IRequestContext
):
TPromise
<
T
>
{
return
new
Promise
((
c
,
e
)
=>
{
if
(
!
isSuccess
(
context
))
{
return
e
(
'
Server returned
'
+
context
.
res
.
statusCode
);
}
if
(
pair
.
res
.
statusCode
===
204
)
{
if
(
hasNoContent
(
context
)
)
{
return
c
(
null
);
}
if
(
!
/application
\/
json/
.
test
(
pair
.
res
.
headers
[
'
content-type
'
]))
{
if
(
!
/application
\/
json/
.
test
(
context
.
res
.
headers
[
'
content-type
'
]))
{
return
e
(
'
Response doesn
\'
t appear to be JSON
'
);
}
le
t
buffer
:
string
[]
=
[];
pair
.
stream
.
on
(
'
data
'
,
d
=>
buffer
.
push
(
d
));
pair
.
stream
.
on
(
'
end
'
,
()
=>
c
(
JSON
.
parse
(
buffer
.
join
(
''
))));
pair
.
stream
.
on
(
'
error
'
,
e
);
})
)
;
cons
t
buffer
:
string
[]
=
[];
context
.
stream
.
on
(
'
data
'
,
d
=>
buffer
.
push
(
d
));
context
.
stream
.
on
(
'
end
'
,
()
=>
c
(
JSON
.
parse
(
buffer
.
join
(
''
))));
context
.
stream
.
on
(
'
error
'
,
e
);
});
}
\ No newline at end of file
src/vs/code/electron-main/auto-updater.linux.ts
浏览文件 @
a672eeb4
...
...
@@ -8,7 +8,7 @@
import
{
EventEmitter
}
from
'
events
'
;
import
{
isString
}
from
'
vs/base/common/types
'
;
import
{
Promise
}
from
'
vs/base/common/winjs.base
'
;
import
{
json
}
from
'
vs/base/node/request
'
;
import
{
request
,
json
}
from
'
vs/base/node/request
'
;
import
{
getProxyAgent
}
from
'
vs/base/node/proxy
'
;
import
{
ISettingsService
}
from
'
vs/code/electron-main/settings
'
;
import
{
IEnvironmentService
}
from
'
vs/code/electron-main/env
'
;
...
...
@@ -54,7 +54,8 @@ export class LinuxAutoUpdaterImpl extends EventEmitter {
const
strictSSL
=
this
.
settingsService
.
getValue
(
'
http.proxyStrictSSL
'
,
true
);
const
agent
=
getProxyAgent
(
this
.
url
,
{
proxyUrl
,
strictSSL
});
this
.
currentRequest
=
json
<
IUpdate
>
({
url
:
this
.
url
,
agent
})
this
.
currentRequest
=
request
({
url
:
this
.
url
,
agent
})
.
then
(
context
=>
json
<
IUpdate
>
(
context
))
.
then
(
update
=>
{
if
(
!
update
||
!
update
.
url
||
!
update
.
version
)
{
this
.
emit
(
'
update-not-available
'
);
...
...
src/vs/code/electron-main/auto-updater.win32.ts
浏览文件 @
a672eeb4
...
...
@@ -14,7 +14,7 @@ import { spawn } from 'child_process';
import
{
mkdirp
}
from
'
vs/base/node/extfs
'
;
import
{
isString
}
from
'
vs/base/common/types
'
;
import
{
Promise
,
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
download
,
json
}
from
'
vs/base/node/request
'
;
import
{
request
,
download
,
json
}
from
'
vs/base/node/request
'
;
import
{
getProxyAgent
}
from
'
vs/base/node/proxy
'
;
import
{
ISettingsService
}
from
'
vs/code/electron-main/settings
'
;
import
{
ILifecycleService
}
from
'
vs/code/electron-main/lifecycle
'
;
...
...
@@ -68,7 +68,8 @@ export class Win32AutoUpdaterImpl extends EventEmitter {
const
strictSSL
=
this
.
settingsService
.
getValue
(
'
http.proxyStrictSSL
'
,
true
);
const
agent
=
getProxyAgent
(
this
.
url
,
{
proxyUrl
,
strictSSL
});
this
.
currentRequest
=
json
<
IUpdate
>
({
url
:
this
.
url
,
agent
})
this
.
currentRequest
=
request
({
url
:
this
.
url
,
agent
})
.
then
(
context
=>
json
<
IUpdate
>
(
context
))
.
then
(
update
=>
{
if
(
!
update
||
!
update
.
url
||
!
update
.
version
)
{
this
.
emit
(
'
update-not-available
'
);
...
...
@@ -89,7 +90,8 @@ export class Win32AutoUpdaterImpl extends EventEmitter {
const
downloadPath
=
`
${
updatePackagePath
}
.tmp`
;
const
agent
=
getProxyAgent
(
url
,
{
proxyUrl
,
strictSSL
});
return
download
(
downloadPath
,
{
url
,
agent
,
strictSSL
})
return
request
({
url
,
agent
,
strictSSL
})
.
then
(
context
=>
download
(
downloadPath
,
context
))
.
then
(
hash
?
()
=>
checksum
(
downloadPath
,
update
.
hash
)
:
()
=>
null
)
.
then
(()
=>
pfs
.
rename
(
downloadPath
,
updatePackagePath
))
.
then
(()
=>
updatePackagePath
);
...
...
src/vs/platform/extensionManagement/node/extensionGalleryService.ts
浏览文件 @
a672eeb4
...
...
@@ -13,7 +13,7 @@ import { assign, getOrDefault } from 'vs/base/common/objects';
import
{
IRequestService
}
from
'
vs/platform/request/common/request
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
IPager
}
from
'
vs/base/common/paging
'
;
import
{
download
,
json
,
IRequestOptions
}
from
'
vs/base/node/request
'
;
import
{
request
,
download
,
json
,
IRequestOptions
}
from
'
vs/base/node/request
'
;
import
{
getProxyAgent
}
from
'
vs/base/node/proxy
'
;
import
{
IConfigurationService
}
from
'
vs/platform/configuration/common/configuration
'
;
import
pkg
from
'
vs/platform/package
'
;
...
...
@@ -280,7 +280,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
private
queryGallery
(
query
:
Query
):
TPromise
<
{
galleryExtensions
:
IRawGalleryExtension
[],
total
:
number
;
}
>
{
const
data
=
JSON
.
stringify
(
query
.
raw
);
const
request
=
this
.
request
(
this
.
api
(
'
/extensionquery
'
));
const
opts
=
this
.
request
(
this
.
api
(
'
/extensionquery
'
));
return
this
.
getCommonHeaders
()
.
then
(
headers
=>
assign
(
headers
,
{
...
...
@@ -289,8 +289,9 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
'
Accept-Encoding
'
:
'
gzip
'
,
'
Content-Length
'
:
data
.
length
}))
.
then
(
headers
=>
assign
(
request
,
{
type
:
'
POST
'
,
data
,
headers
}))
.
then
(()
=>
json
<
any
>
(
request
))
.
then
(
headers
=>
assign
(
opts
,
{
type
:
'
POST
'
,
data
,
headers
}))
.
then
(()
=>
request
(
opts
))
.
then
(
context
=>
json
<
any
>
(
context
))
.
then
(
result
=>
{
const
r
=
result
.
results
[
0
];
const
galleryExtensions
=
r
.
extensions
;
...
...
@@ -319,11 +320,12 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
return
this
.
getLastValidExtensionVersion
(
rawExtension
,
rawExtension
.
versions
).
then
(
rawVersion
=>
{
const
url
=
`
${
getAssetSource
(
rawVersion
.
files
,
AssetType
.
VSIX
)
}
?install=true`
;
const
zipPath
=
path
.
join
(
tmpdir
(),
extension
.
id
);
const
request
=
this
.
request
(
url
);
const
opts
=
this
.
request
(
url
);
return
this
.
getCommonHeaders
()
.
then
(
headers
=>
assign
(
request
,
{
headers
}))
.
then
(()
=>
download
(
zipPath
,
request
))
.
then
(
headers
=>
assign
(
opts
,
{
headers
}))
.
then
(()
=>
request
(
opts
))
.
then
(
context
=>
download
(
zipPath
,
context
))
.
then
(()
=>
zipPath
);
});
});
...
...
@@ -336,22 +338,23 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
const
version
=
versions
[
0
];
const
url
=
getAssetSource
(
version
.
files
,
AssetType
.
Manifest
);
let
request
=
this
.
request
(
url
);
request
=
assign
(
request
,
{
headers
:
{
'
accept-encoding
'
:
'
gzip
'
}
});
return
json
<
IExtensionManifest
>
(
request
).
then
(
manifest
=>
{
const
desc
=
{
isBuiltin
:
false
,
engines
:
{
vscode
:
manifest
.
engines
.
vscode
},
main
:
manifest
.
main
};
if
(
!
isValidExtensionVersion
(
pkg
.
version
,
desc
,
[]))
{
return
this
.
getLastValidExtensionVersion
(
extension
,
versions
.
slice
(
1
));
}
return
version
;
});
const
opts
=
assign
(
this
.
request
(
url
),
{
headers
:
{
'
accept-encoding
'
:
'
gzip
'
}
});
return
request
(
opts
)
.
then
(
context
=>
json
<
IExtensionManifest
>
(
context
))
.
then
(
manifest
=>
{
const
desc
=
{
isBuiltin
:
false
,
engines
:
{
vscode
:
manifest
.
engines
.
vscode
},
main
:
manifest
.
main
};
if
(
!
isValidExtensionVersion
(
pkg
.
version
,
desc
,
[]))
{
return
this
.
getLastValidExtensionVersion
(
extension
,
versions
.
slice
(
1
));
}
return
version
;
});
}
// Helper for proxy business... shameful.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录