scai
Version:
> AI-powered CLI tool for commit messages **and** pull request reviews โ using local models.
63 lines (62 loc) โข 2.24 kB
JavaScript
import fs from 'fs';
import path from 'path';
import lockfile from 'proper-lockfile';
import { backupScaiFolder } from '../db/backup.js';
import { getDbPathForRepo, getDbForRepo } from '../db/client.js';
export async function resetDatabase() {
console.log('๐ Backing up existing .scai folder...');
await backupScaiFolder();
const dbPath = getDbPathForRepo();
// 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. You can now re-run: scai index');
}