a collection of lightweight TypeScript packages for AT Protocol, the protocol powering Bluesky
atproto bluesky typescript npm
101
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix(lex-cli): always clean up temporary Git repository clones

Mary d01ad16e 3ef08ad5

+67 -61
+5
.changeset/four-pigs-attack.md
··· 1 + --- 2 + '@atcute/lex-cli': patch 3 + --- 4 + 5 + always clean up temporary Git repository clones
+62 -61
packages/lexicons/lex-cli/src/pull-sources/git.ts
··· 26 26 const cloneDir = path.join(tempParent, 'repo'); 27 27 28 28 try { 29 - await runGit( 30 - [ 31 - 'clone', 32 - '--filter=blob:none', 33 - '--depth', 34 - '1', 35 - '--sparse', 36 - ...(source.ref ? ['--branch', source.ref, '--single-branch'] : []), 37 - source.remote, 38 - cloneDir, 39 - ], 40 - { timeoutMs: 60_000 }, 41 - ); 42 - } catch (err) { 43 - if (err instanceof GitError) { 44 - console.error(pc.bold(pc.red(`git clone failed for ${source.remote}:`))); 45 - console.error(err.stderr || err.message); 46 - process.exit(1); 29 + try { 30 + await runGit( 31 + [ 32 + 'clone', 33 + '--filter=blob:none', 34 + '--depth', 35 + '1', 36 + '--sparse', 37 + ...(source.ref ? ['--branch', source.ref, '--single-branch'] : []), 38 + source.remote, 39 + cloneDir, 40 + ], 41 + { timeoutMs: 60_000 }, 42 + ); 43 + } catch (err) { 44 + if (err instanceof GitError) { 45 + console.error(pc.bold(pc.red(`git clone failed for ${source.remote}:`))); 46 + console.error(err.stderr || err.message); 47 + process.exit(1); 48 + } 49 + 50 + throw err; 47 51 } 48 52 49 - throw err; 50 - } 53 + try { 54 + await runGit(['-C', cloneDir, 'sparse-checkout', 'set', '--no-cone', ...source.pattern], { 55 + timeoutMs: 30_000, 56 + }); 57 + } catch (err) { 58 + if (err instanceof GitError) { 59 + console.error(pc.bold(pc.red(`git sparse-checkout failed for ${source.remote}:`))); 60 + console.error(err.stderr || err.message); 61 + process.exit(1); 62 + } 51 63 52 - try { 53 - await runGit(['-C', cloneDir, 'sparse-checkout', 'set', '--no-cone', ...source.pattern], { 54 - timeoutMs: 30_000, 55 - }); 56 - } catch (err) { 57 - if (err instanceof GitError) { 58 - console.error(pc.bold(pc.red(`git sparse-checkout failed for ${source.remote}:`))); 59 - console.error(err.stderr || err.message); 60 - process.exit(1); 64 + throw err; 61 65 } 62 66 63 - throw err; 64 - } 67 + const pulled = new Map<string, PulledLexicon>(); 65 68 66 - const pulled = new Map<string, PulledLexicon>(); 69 + for await (const filename of fs.glob(source.pattern, { cwd: cloneDir })) { 70 + const absolute = path.join(cloneDir, filename); 71 + const stat = await fs.stat(absolute); 67 72 68 - for await (const filename of fs.glob(source.pattern, { cwd: cloneDir })) { 69 - const absolute = path.join(cloneDir, filename); 70 - const stat = await fs.stat(absolute); 73 + if (!stat.isFile()) { 74 + continue; 75 + } 71 76 72 - if (!stat.isFile()) { 73 - continue; 74 - } 77 + const location: SourceLocation = { 78 + absolutePath: absolute, 79 + relativePath: filename, 80 + sourceDescription: source.remote, 81 + }; 75 82 76 - const location: SourceLocation = { 77 - absolutePath: absolute, 78 - relativePath: filename, 79 - sourceDescription: source.remote, 80 - }; 83 + const doc = await parseLexiconFile(location); 81 84 82 - const doc = await parseLexiconFile(location); 85 + pulled.set(doc.id, { nsid: doc.id, doc, location }); 86 + } 83 87 84 - pulled.set(doc.id, { nsid: doc.id, doc, location }); 85 - } 88 + let rev: string; 89 + try { 90 + const result = await runGit(['-C', cloneDir, 'rev-parse', 'HEAD'], { timeoutMs: 10_000 }); 91 + rev = result.stdout.trim(); 92 + } catch (err) { 93 + if (err instanceof GitError) { 94 + console.error(pc.bold(pc.red(`git rev-parse failed for ${source.remote}:`))); 95 + console.error(err.stderr || err.message); 96 + process.exit(1); 97 + } 86 98 87 - // get the commit hash 88 - let rev: string; 89 - try { 90 - const result = await runGit(['-C', cloneDir, 'rev-parse', 'HEAD'], { timeoutMs: 10_000 }); 91 - rev = result.stdout.trim(); 92 - } catch (err) { 93 - if (err instanceof GitError) { 94 - console.error(pc.bold(pc.red(`git rev-parse failed for ${source.remote}:`))); 95 - console.error(err.stderr || err.message); 96 - process.exit(1); 99 + throw err; 97 100 } 98 101 99 - throw err; 102 + return { pulled, rev }; 103 + } finally { 104 + await fs.rm(tempParent, { recursive: true, force: true }); 100 105 } 101 - 102 - await fs.rm(tempParent, { recursive: true, force: true }); 103 - 104 - return { pulled, rev }; 105 106 };