Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CoCo_Code_Op2
next.js
提交
f533c558
N
next.js
项目概览
CoCo_Code_Op2
/
next.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
next.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
f533c558
编写于
5月 10, 2019
作者:
J
Joe Haddad
提交者:
GitHub
5月 10, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Decommission old flying shuttles (#7299)
* Retire old flying shuttles * retire => decommissioned
上级
36abf815
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
70 addition
and
13 deletion
+70
-13
packages/next/build/flying-shuttle.ts
packages/next/build/flying-shuttle.ts
+70
-13
未找到文件。
packages/next/build/flying-shuttle.ts
浏览文件 @
f533c558
...
...
@@ -11,7 +11,9 @@ import { recursiveDelete } from '../lib/recursive-delete'
import
*
as
Log
from
'
./output/log
'
const
FILE_BUILD_ID
=
'
HEAD_BUILD_ID
'
const
FILE_UPDATED_AT
=
'
UPDATED_AT
'
const
DIR_FILES_NAME
=
'
files
'
const
MAX_SHUTTLES
=
4
const
mkdirp
=
promisify
(
mkdirpModule
)
const
fsExists
=
promisify
(
fs
.
exists
)
...
...
@@ -29,6 +31,63 @@ type ChunkGraphManifest = {
hashes
:
{
[
page
:
string
]:
string
}
}
async
function
findCachedShuttles
(
apexShuttleDirectory
:
string
)
{
return
(
await
Promise
.
all
(
await
fsReadDir
(
apexShuttleDirectory
).
then
(
shuttleFiles
=>
shuttleFiles
.
map
(
async
f
=>
({
file
:
f
,
stats
:
await
fsLstat
(
path
.
join
(
apexShuttleDirectory
,
f
)),
}))
)
))
.
filter
(({
stats
})
=>
stats
.
isDirectory
())
.
map
(({
file
})
=>
file
)
}
async
function
pruneShuttles
(
apexShuttleDirectory
:
string
)
{
const
allShuttles
=
await
findCachedShuttles
(
apexShuttleDirectory
)
if
(
allShuttles
.
length
<=
MAX_SHUTTLES
)
{
return
}
const
datedShuttles
:
{
updatedAt
:
Date
;
shuttleDirectory
:
string
}[]
=
[]
for
(
const
shuttleId
of
allShuttles
)
{
const
shuttleDirectory
=
path
.
join
(
apexShuttleDirectory
,
shuttleId
)
const
updatedAtPath
=
path
.
join
(
shuttleDirectory
,
FILE_UPDATED_AT
)
let
updatedAt
:
Date
try
{
updatedAt
=
new
Date
((
await
fsReadFile
(
updatedAtPath
,
'
utf8
'
)).
trim
())
}
catch
(
err
)
{
if
(
err
.
code
===
'
ENOENT
'
)
{
await
recursiveDelete
(
shuttleDirectory
)
continue
}
throw
err
}
datedShuttles
.
push
({
updatedAt
,
shuttleDirectory
})
}
const
sortedShuttles
=
datedShuttles
.
sort
((
a
,
b
)
=>
Math
.
sign
(
b
.
updatedAt
.
valueOf
()
-
a
.
updatedAt
.
valueOf
())
)
let
prunedShuttles
=
0
while
(
sortedShuttles
.
length
>
MAX_SHUTTLES
)
{
const
shuttleDirectory
=
sortedShuttles
.
pop
()
await
recursiveDelete
(
shuttleDirectory
!
.
shuttleDirectory
)
++
prunedShuttles
}
if
(
prunedShuttles
)
{
Log
.
info
(
`decommissioned
${
prunedShuttles
}
old shuttle
${
prunedShuttles
>
1
?
'
s
'
:
''
}
`
)
}
}
function
isShuttleValid
({
manifestPath
,
pagesDirectory
,
...
...
@@ -111,20 +170,8 @@ export class FlyingShuttle {
return
path
.
join
(
this
.
apexShuttleDirectory
,
this
.
flyingShuttleId
)
}
private
getShuttleIds
=
async
()
=>
(
await
Promise
.
all
(
await
fsReadDir
(
this
.
apexShuttleDirectory
).
then
(
shuttleFiles
=>
shuttleFiles
.
map
(
async
f
=>
({
file
:
f
,
stats
:
await
fsLstat
(
path
.
join
(
this
.
apexShuttleDirectory
,
f
)),
}))
)
))
.
filter
(({
stats
})
=>
stats
.
isDirectory
())
.
map
(({
file
})
=>
file
)
private
findShuttleId
=
async
()
=>
{
const
shuttles
=
await
this
.
getShuttleIds
(
)
const
shuttles
=
await
findCachedShuttles
(
this
.
apexShuttleDirectory
)
return
shuttles
.
find
(
shuttleId
=>
{
try
{
const
manifestPath
=
path
.
join
(
...
...
@@ -364,6 +411,10 @@ export class FlyingShuttle {
path
.
join
(
this
.
shuttleDirectory
,
FILE_BUILD_ID
),
this
.
buildId
)
await
fsWriteFile
(
path
.
join
(
this
.
shuttleDirectory
,
FILE_UPDATED_AT
),
new
Date
().
toISOString
()
)
const
usedChunks
=
new
Set
()
const
pages
=
Object
.
keys
(
storeManifest
.
pageChunks
)
...
...
@@ -393,5 +444,11 @@ export class FlyingShuttle {
Log
.
info
(
`flying shuttle payload:
${
usedChunks
.
size
+
2
}
files`
)
Log
.
ready
(
'
flying shuttle docked
'
)
try
{
await
pruneShuttles
(
this
.
apexShuttleDirectory
)
}
catch
(
e
)
{
Log
.
error
(
'
failed to prune old shuttles:
'
+
e
)
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录