scai
Version:
> AI-powered CLI tool for commit messages **and** pull request reviews — using local models.
80 lines (79 loc) • 2.85 kB
JavaScript
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'));
}