improve snapshot speed

This commit is contained in:
Dax Raad 2025-07-03 20:16:16 -04:00
parent 25c876caa2
commit cdb25656d5
3 changed files with 33 additions and 12 deletions

View file

@ -92,11 +92,20 @@ export namespace LSPClient {
},
}),
5_000,
).catch(() => {
throw new InitializeError({ serverID })
).catch((err) => {
log.error("initialize error", { error: err })
throw new InitializeError(
{ serverID },
{
cause: err,
},
)
})
await connection.sendNotification("initialized", {})
log.info("initialized")
log.info("initialized", {
serverID,
})
const files: {
[path: string]: number
@ -174,7 +183,6 @@ export namespace LSPClient {
log.info("shutting down", { serverID })
connection.end()
connection.dispose()
server.process.kill("SIGTERM")
log.info("shutdown", { serverID })
},
}

View file

@ -47,7 +47,7 @@ export namespace LSP {
const handle = await server.spawn(App.info())
if (!handle) break
const client = await LSPClient.create(server.id, handle).catch(
() => {},
(err) => log.error("", { error: err }),
)
if (!client) break
clients.set(server.id, client)

View file

@ -16,12 +16,14 @@ export namespace Snapshot {
const log = Log.create({ service: "snapshot" })
export async function create(sessionID: string) {
log.info("creating snapshot")
const app = App.info()
const git = gitdir(sessionID)
const files = await Ripgrep.files({
cwd: app.path.cwd,
limit: app.git ? undefined : 1000,
})
log.info("found files", { count: files.length })
// not a git repo and too big to snapshot
if (!app.git && files.length === 1000) return
await init({
@ -29,19 +31,17 @@ export namespace Snapshot {
gitdir: git,
fs,
})
log.info("initialized")
const status = await statusMatrix({
fs,
gitdir: git,
dir: app.path.cwd,
})
await add({
fs,
gitdir: git,
parallel: true,
dir: app.path.cwd,
filepath: files,
log.info("matrix", {
count: status.length,
})
for (const [file, _head, workdir, stage] of status) {
const added = []
for (const [file, head, workdir, stage] of status) {
if (workdir === 0 && stage === 1) {
log.info("remove", { file })
await remove({
@ -50,8 +50,21 @@ export namespace Snapshot {
dir: app.path.cwd,
filepath: file,
})
continue
}
if (workdir !== head) {
added.push(file)
}
}
log.info("removed files")
await add({
fs,
gitdir: git,
parallel: true,
dir: app.path.cwd,
filepath: added,
})
log.info("added files")
const result = await commit({
fs,
gitdir: git,