mirror of
https://github.com/sst/opencode.git
synced 2025-07-07 16:14:59 +00:00
improve snapshot speed
This commit is contained in:
parent
25c876caa2
commit
cdb25656d5
3 changed files with 33 additions and 12 deletions
|
@ -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 })
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue