Spaces:
Sleeping
Sleeping
| /** | |
| * REFACTORED: Sync Engine Enhancement | |
| * | |
| * This snippet shows the enhanced reconciliation logic with SHA/updated_at checking. | |
| * Replace the existing reconciliation section in syncRepository() with this. | |
| * | |
| * KEY IMPROVEMENT: | |
| * - Before expensive field-level comparisons, check GitHub's updated_at timestamp | |
| * - If the timestamp hasn't changed, skip the update entirely | |
| * - For PRs, also track headSha to detect force-pushes | |
| */ | |
| export {}; | |
| /* | |
| // ============================================================================ | |
| // Enhanced Reconciliation: SHA/Updated_at Checks (REFACTORED) | |
| // ============================================================================ | |
| // In the process open items loop, replace the update logic with this: | |
| for (const ghItem of openItems) { | |
| openNumbers.add(ghItem.number); | |
| checkMentorStatus(ghItem); | |
| if (!shouldIncludeItem(ghItem)) { | |
| continue; | |
| } | |
| const isPR = !!ghItem.pull_request; | |
| const existingIssue = dbIssuesByNumber.get(ghItem.number); | |
| if (existingIssue) { | |
| // ✅ REFACTORED: Skip update if GitHub's updated_at hasn't changed | |
| const ghUpdatedAt = ghItem.updated_at; | |
| const dbUpdatedAt = existingIssue.updatedAt; | |
| // For PRs, also check the head SHA for force-push detection | |
| const ghHeadSha = isPR ? ghItem.pull_request?.head?.sha : null; | |
| const dbHeadSha = existingIssue.headSha; | |
| // If the item hasn't been updated on GitHub and SHA is the same, skip entirely | |
| const isSameTimestamp = ghUpdatedAt && dbUpdatedAt && | |
| new Date(ghUpdatedAt).getTime() === new Date(dbUpdatedAt).getTime(); | |
| const isSameSha = !isPR || (ghHeadSha === dbHeadSha); | |
| if (isSameTimestamp && isSameSha) { | |
| console.log(`[Sync] ${repoName}#${ghItem.number}: Skipped (no changes on GitHub)`); | |
| continue; // ✅ Skip this item entirely | |
| } | |
| // Only update if actual field changes detected | |
| if (existingIssue.state !== ghItem.state || | |
| existingIssue.title !== ghItem.title || | |
| existingIssue.authorAssociation !== ghItem.author_association || | |
| ghHeadSha !== dbHeadSha) { // Force-push detected | |
| // Generate body summary if body changed | |
| const newBodySummary = ghItem.body | |
| ? ghItem.body.substring(0, 200) | |
| : existingIssue.bodySummary; | |
| await db.update(issues) | |
| .set({ | |
| state: ghItem.state, | |
| title: ghItem.title, | |
| body: ghItem.body || null, | |
| bodySummary: newBodySummary, | |
| authorAssociation: ghItem.author_association, | |
| headSha: ghHeadSha, // Track SHA for PRs | |
| updatedAt: ghUpdatedAt || new Date().toISOString(), | |
| }) | |
| .where(eq(issues.id, existingIssue.id)); | |
| updated++; | |
| if (isAblyConfigured()) { | |
| await publishIssueUpdated({ | |
| id: existingIssue.id, | |
| githubIssueId: ghItem.id, | |
| number: ghItem.number, | |
| title: ghItem.title, | |
| repoName, | |
| owner, | |
| repo, | |
| isPR, | |
| state: ghItem.state, | |
| }); | |
| } | |
| } | |
| } else { | |
| // Create new issue with all fields populated | |
| const newId = uuidv4(); | |
| const bodySummary = ghItem.body | |
| ? ghItem.body.substring(0, 200) | |
| : null; | |
| await db.insert(issues).values({ | |
| id: newId, | |
| githubIssueId: ghItem.id, | |
| number: ghItem.number, | |
| title: ghItem.title, | |
| body: ghItem.body || null, | |
| bodySummary, | |
| authorName: ghItem.user.login, | |
| repoId, | |
| repoName, | |
| owner, | |
| repo, | |
| htmlUrl: ghItem.html_url, | |
| state: ghItem.state, | |
| isPR, | |
| authorAssociation: ghItem.author_association, | |
| headSha: isPR ? ghItem.pull_request?.head?.sha : null, | |
| updatedAt: ghItem.updated_at || new Date().toISOString(), | |
| createdAt: new Date().toISOString(), | |
| }).onConflictDoNothing(); | |
| created++; | |
| if (isAblyConfigured()) { | |
| await publishIssueCreated({ | |
| id: newId, | |
| githubIssueId: ghItem.id, | |
| number: ghItem.number, | |
| title: ghItem.title, | |
| repoName, | |
| owner, | |
| repo, | |
| isPR, | |
| state: ghItem.state, | |
| }); | |
| } | |
| } | |
| } | |
| */ | |