Updates
This commit is contained in:
Vendored
+15
-7
@@ -6,9 +6,10 @@ import { select } from "@inquirer/prompts";
|
||||
import grabDBDir from "../utils/grab-db-dir";
|
||||
import grabSortedExports from "../utils/grab-sorted-exports";
|
||||
import grabBackupData from "../utils/grab-backup-data";
|
||||
import { AppData } from "../data/app-data";
|
||||
import { restoreDatabase } from "../utils/mariadb-dump-restore";
|
||||
import { isArchivePath, isSqlPath, readExportArchive, } from "../utils/export-archive";
|
||||
import { resolveDataFile } from "../utils/resolve-and-load-data-file";
|
||||
import { AppData } from "../data/app-data";
|
||||
function formatChoice(name, index) {
|
||||
const { backup_date } = grabBackupData({ backup_name: name });
|
||||
const time = Number.isNaN(backup_date.getTime())
|
||||
@@ -18,10 +19,10 @@ function formatChoice(name, index) {
|
||||
}
|
||||
export default function () {
|
||||
return new Command("import")
|
||||
.description("Import an SQL dump, or a full export archive (SQL + schema.ts)")
|
||||
.description("Import an SQL dump, or a full export archive (SQL + schema)")
|
||||
.argument("[file]", "Path to .sql file or export archive (.tar.gz / .tar / .zip)")
|
||||
.option("--sql-only", "When importing an archive, restore SQL only (skip writing schema.ts)")
|
||||
.option("--schema-only", "When importing an archive, write schema.ts only (skip SQL restore)")
|
||||
.option("--sql-only", "When importing an archive, restore SQL only (skip writing schema)")
|
||||
.option("--schema-only", "When importing an archive, write schema only (skip SQL restore)")
|
||||
.action(async (fileArg, opts) => {
|
||||
console.log(`Importing database ...`);
|
||||
const config = global.CONFIG;
|
||||
@@ -65,14 +66,21 @@ export default function () {
|
||||
console.error(chalk.red(`Cannot combine --sql-only and --schema-only.`));
|
||||
process.exit(1);
|
||||
}
|
||||
const { sql, schemaTs } = await readExportArchive(filePath);
|
||||
const { sql, schema, schemaFileName } = await readExportArchive(filePath);
|
||||
if (!opts.schemaOnly) {
|
||||
await restoreDatabase(config, sql);
|
||||
console.log(chalk.green(`SQL restored from archive`));
|
||||
}
|
||||
if (!opts.sqlOnly) {
|
||||
const schemaPath = path.join(db_dir, AppData.DbSchemaFileName);
|
||||
fs.writeFileSync(schemaPath, schemaTs, "utf-8");
|
||||
const existing = resolveDataFile(db_dir, AppData.DbSchemaFileName);
|
||||
const schemaPath = path.join(db_dir, schemaFileName);
|
||||
// Remove a differently-named schema so only one format remains
|
||||
if (existing &&
|
||||
path.resolve(existing.path) !== path.resolve(schemaPath)) {
|
||||
fs.unlinkSync(existing.path);
|
||||
console.log(chalk.dim(`Removed previous schema file: ${existing.basename}`));
|
||||
}
|
||||
fs.writeFileSync(schemaPath, schema, "utf-8");
|
||||
console.log(chalk.green(`Schema written → ${schemaPath}`));
|
||||
}
|
||||
console.log(`${chalk.bold(chalk.green(`DB Import Success!`))} ← ${filePath}`);
|
||||
|
||||
Reference in New Issue
Block a user