mirror of
https://github.com/stablyai/orca.git
synced 2026-09-23 16:02:24 +00:00
perf: scan large cleanup diff notes safely (#3741)
This commit is contained in:
@@ -344,6 +344,33 @@ describe('workspace cleanup scan', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('summarizes large diff-note lists without hitting argument limits', async () => {
|
||||
const diffComments = Array.from(
|
||||
{ length: 150_000 },
|
||||
(_, index): DiffComment => ({
|
||||
id: `comment-${index}`,
|
||||
worktreeId: 'repo-1::/repo-feature',
|
||||
filePath: 'src/file.ts',
|
||||
lineNumber: 12,
|
||||
body: 'Follow up before deleting',
|
||||
createdAt: NOW - index,
|
||||
side: 'modified'
|
||||
})
|
||||
)
|
||||
|
||||
const result = await scanWorkspaceCleanup(
|
||||
makeStore({
|
||||
baseRef: undefined,
|
||||
diffComments
|
||||
})
|
||||
)
|
||||
|
||||
expect(result.candidates[0]?.localContext).toMatchObject({
|
||||
diffCommentCount: 150_000,
|
||||
newestDiffCommentAt: NOW
|
||||
})
|
||||
})
|
||||
|
||||
it('does not expose PR cache state in inactivity cleanup results', async () => {
|
||||
const result = await scanWorkspaceCleanup(
|
||||
makeStore({
|
||||
|
||||
@@ -582,7 +582,16 @@ function getNewestDiffCommentAt(diffComments: Worktree['diffComments'] | undefin
|
||||
if (!diffComments || diffComments.length === 0) {
|
||||
return null
|
||||
}
|
||||
return Math.max(...diffComments.map((comment) => comment.createdAt))
|
||||
// Why: persisted diff notes can grow large enough for spread-based Math.max
|
||||
// to exceed the JavaScript argument limit during cleanup scans.
|
||||
let newest = diffComments[0]?.createdAt ?? null
|
||||
for (let index = 1; index < diffComments.length; index += 1) {
|
||||
const createdAt = diffComments[index]?.createdAt
|
||||
if (createdAt !== undefined && (newest === null || createdAt > newest)) {
|
||||
newest = createdAt
|
||||
}
|
||||
}
|
||||
return newest
|
||||
}
|
||||
|
||||
function createEmptyGitEvidence(): GitEvidence {
|
||||
|
||||
Reference in New Issue
Block a user