| 262 | } |
| 263 | |
| 264 | function writeFilesystem() { |
| 265 | console.log('\nWriting filesystem representation...'); |
| 266 | |
| 267 | // Create base directories |
| 268 | const reposDir = join(FS_DIR, 'repos'); |
| 269 | const usersDir = join(FS_DIR, 'users'); |
| 270 | |
| 271 | mkdirSync(reposDir, { recursive: true }); |
| 272 | mkdirSync(usersDir, { recursive: true }); |
| 273 | |
| 274 | // Write repos with their issues and PRs |
| 275 | for (const [repoName, repo] of repos) { |
| 276 | const [owner, name] = repoName.split('/'); |
| 277 | const repoDir = join(reposDir, owner, name); |
| 278 | mkdirSync(repoDir, { recursive: true }); |
| 279 | |
| 280 | // Write repo metadata |
| 281 | writeFileSync(join(repoDir, 'repo.json'), JSON.stringify(repo, null, 2)); |
| 282 | |
| 283 | // Write issues |
| 284 | const issuesDir = join(repoDir, 'issues'); |
| 285 | let issueCount = 0; |
| 286 | for (const [key, issue] of issues) { |
| 287 | if (key.startsWith(repoName + '#')) { |
| 288 | if (issueCount === 0) mkdirSync(issuesDir, { recursive: true }); |
| 289 | writeFileSync(join(issuesDir, `${issue.number}.json`), JSON.stringify(issue, null, 2)); |
| 290 | issueCount++; |
| 291 | } |
| 292 | } |
| 293 | |
| 294 | // Write pulls |
| 295 | const pullsDir = join(repoDir, 'pulls'); |
| 296 | let pullCount = 0; |
| 297 | for (const [key, pull] of pulls) { |
| 298 | if (key.startsWith(repoName + '#')) { |
| 299 | if (pullCount === 0) mkdirSync(pullsDir, { recursive: true }); |
| 300 | writeFileSync(join(pullsDir, `${pull.number}.json`), JSON.stringify(pull, null, 2)); |
| 301 | pullCount++; |
| 302 | } |
| 303 | } |
| 304 | } |
| 305 | |
| 306 | // Write users |
| 307 | for (const [login, user] of users) { |
| 308 | writeFileSync(join(usersDir, `${login}.json`), JSON.stringify(user, null, 2)); |
| 309 | } |
| 310 | |
| 311 | console.log(`Filesystem written to: ${FS_DIR}`); |
| 312 | } |
| 313 | |
| 314 | function writeDatabase() { |
| 315 | console.log('\nWriting SQLite database...'); |