show progress for imports and deletions
This commit is contained in:
parent
38eea05789
commit
5e342b6fe5
13 changed files with 343 additions and 115 deletions
|
|
@ -17,6 +17,7 @@ const readline = require('readline')
|
|||
|
||||
const { DIRS, readJson, writeJson, toPortablePath } = require('./paths')
|
||||
const { rewireSymlinks, restoreExecutableBits } = require('./symlinks')
|
||||
const { progressGate } = require('./fsutil')
|
||||
const library = require('./library')
|
||||
const wines = require('./wines')
|
||||
const prefixes = require('./prefixes')
|
||||
|
|
@ -375,45 +376,6 @@ function ownedRoot(rel) {
|
|||
return SYNC_ROOTS.some(prefix => clean.startsWith(prefix)) ? clean : null
|
||||
}
|
||||
|
||||
// Progress is cheap to produce and expensive to render: hashing or copying a
|
||||
// prefix can emit tens of thousands of events, and forwarding every single one
|
||||
// over IPC makes the window stutter instead of showing progress. Events are
|
||||
// rate limited to ~10/s per phase; `force` lets a caller push the value that
|
||||
// matters (the end of a unit) through immediately.
|
||||
const PROGRESS_MIN_MS = 100
|
||||
|
||||
function progressGate(emit) {
|
||||
let lastAt = 0
|
||||
let pending = null
|
||||
let timer = null
|
||||
const flush = () => {
|
||||
timer = null
|
||||
if (!pending) return
|
||||
const data = pending
|
||||
pending = null
|
||||
lastAt = Date.now()
|
||||
emit(data)
|
||||
}
|
||||
return (data, force) => {
|
||||
const now = Date.now()
|
||||
if (force || now - lastAt >= PROGRESS_MIN_MS) {
|
||||
if (timer) {
|
||||
clearTimeout(timer)
|
||||
timer = null
|
||||
}
|
||||
pending = null
|
||||
lastAt = now
|
||||
emit(data)
|
||||
return
|
||||
}
|
||||
pending = data
|
||||
if (!timer) {
|
||||
timer = setTimeout(flush, PROGRESS_MIN_MS - (now - lastAt))
|
||||
if (timer.unref) timer.unref()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function mapLimit(items, limit, fn) {
|
||||
const out = new Array(items.length)
|
||||
let next = 0
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue