UNPKG

scai

Version:

> AI-powered CLI tool for commit messages **and** pull request reviews — using local models.

80 lines (79 loc) 2.85 kB
import fs from 'fs'; import path from 'path'; import lockfile from 'proper-lockfile'; import readline from 'readline'; import { backupScaiFolder } from '../db/backup.js'; import { getDbPathForRepo, getDbForRepo } from '../db/client.js'; import chalk from 'chalk'; export async function resetDatabase() { const dbPath = getDbPathForRepo(); console.log(`⚠️ You are about to delete the database at: ${dbPath}`); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const confirm = await new Promise((resolve) => { rl.question('Are you sure you want to proceed? (y/N): ', (answer) => { rl.close(); resolve(answer.trim().toLowerCase() === 'y'); }); }); if (!confirm) { console.log('❌ Reset aborted. Database was not deleted.'); return; } console.log('🔁 Backing up existing .scai folder...'); await backupScaiFolder(); // Close the DB connection try { const db = getDbForRepo(); db.close(); console.log('🔒 Closed SQLite database connection.'); } catch (err) { console.warn('⚠️ Could not close database:', err instanceof Error ? err.message : err); } // Release lockfile if present try { const releaseLock = await lockfile.unlock(dbPath).catch(() => null); if (releaseLock) { console.log('🔓 Released database lock.'); } } catch (err) { console.warn('⚠️ Failed to release database lock:', err instanceof Error ? err.message : err); } // Delete DB file if (fs.existsSync(dbPath)) { try { fs.unlinkSync(dbPath); console.log(`🧹 Deleted existing database at ${dbPath}`); } catch (err) { console.error('❌ Failed to delete DB file:', err instanceof Error ? err.message : err); } } else { console.log('ℹ️ No existing database found at:', dbPath); } // Ensure directory exists try { fs.mkdirSync(path.dirname(dbPath), { recursive: true }); console.log('📁 Ensured that the database directory exists.'); } catch (err) { console.warn('⚠️ Could not ensure DB directory exists:', err instanceof Error ? err.message : err); } // Clean up lock directory const lockDir = `${dbPath}.lock`; if (fs.existsSync(lockDir)) { try { fs.rmSync(lockDir, { recursive: true, force: true }); console.log('🧹 Removed leftover lock directory.'); } catch (err) { console.warn('⚠️ Failed to remove lock directory:', err instanceof Error ? err.message : err); } } console.log('✅ Database has been reset.' + chalk.yellow('You can now re-run: scai index')); }