Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • scripts/export-archive.mjs

    r712b161 ra4fea5e  
    66//     node scripts/export-archive.mjs <slug> --out boiert.zip
    77//     node scripts/export-archive.mjs <slug> --dir ./archief
     8//
     9// Op een machine met meerdere instances leest hij de .env van die instance zelf
     10// (standaard /var/lib/klonkt/<slug>/.env). Dat is niet netjesheid maar noodzaak:
     11// zonder die .env opent hij de database die toevallig in de code-map ligt, en op
     12// een server die ooit de enkelvoudige opzet draaide is dat een oude lege. Dan
     13// komt er een archief uit dat MELDT dat het gelukt is en nul posts bevat.
     14//
     15//     --data-root <map>   waar de instances staan (standaard /var/lib/klonkt)
     16//     --env <pad>         een .env rechtstreeks aanwijzen
    817//
    918// Het formaat staat in docs/EXPORT-FORMAT.md.
     
    1524import fs from 'fs';
    1625import path from 'path';
    17 import { buildArchive, zipArchive, writeArchiveDir } from '../src/services/ArchiveExportService.js';
     26import { kiesInstance, eisOrigin, splitsArgs } from './instance-env.mjs';
    1827
    1928const args = process.argv.slice(2);
    20 const slug = args.find((a) => !a.startsWith('-'));
    21 const vlag = (naam) => { const i = args.indexOf(naam); return i >= 0 ? (args[i + 1] || true) : null; };
     29// Twee namen, en ze zijn niet hetzelfde. De eerste is de INSTANCE (de map onder
     30// de data-root, de systemd-unit); de tweede, optioneel, is de slug van de SITE in
     31// die database. Laat je hem weg en er staat er precies een, dan is de keuze niet
     32// dubbelzinnig en hoef je hem niet te weten.
     33const { vrij, vlaggen } = splitsArgs(args, ['--data-root', '--env', '--out', '--dir']);
     34const instance = vrij[0];
     35let slug = vrij[1] || null;
     36const vlag = (naam) => vlaggen[naam] ?? null;
    2237
    23 if (!slug) {
    24   console.error('gebruik: node scripts/export-archive.mjs <slug> [--dry-run | --out <zip> | --dir <map>]');
     38if (!instance) {
     39  console.error('gebruik: node scripts/export-archive.mjs <instance> [site-slug] [--data-root <map>] [--env <pad>] [--dry-run | --out <zip> | --dir <map>]');
    2540  process.exit(1);
    2641}
    2742
    28 const uit = buildArchive(slug);
     43// EERST de instance kiezen, DAN pas de service laden: src/config/database.js
     44// leest DATABASE_PATH bij import en opent de database meteen.
     45let gekozen;
     46try {
     47  gekozen = kiesInstance(instance, {
     48    dataRoot: typeof vlag('--data-root') === 'string' ? vlag('--data-root') : null,
     49    envPad: typeof vlag('--env') === 'string' ? vlag('--env') : null,
     50  });
     51} catch (e) { console.error(e.message); process.exit(1); }
     52eisOrigin(gekozen.bron);
     53
     54const { buildArchive, zipArchive, writeArchiveDir } = await import('../src/services/ArchiveExportService.js');
     55const { default: db } = await import('../src/config/database.js');
     56
     57// Geen slug gegeven? Dan mag de database het zeggen, mits het antwoord eenduidig is.
     58if (!slug) {
     59  let sites = [];
     60  try { sites = db.prepare('SELECT slug FROM sites ORDER BY rowid').all().map((r) => r.slug); } catch { /* geen tabel */ }
     61  if (sites.length === 1) {
     62    [slug] = sites;
     63    console.log(`site niet opgegeven, en er staat er precies een: ${slug}`);
     64  } else if (sites.length === 0) {
     65    console.error(`in ${process.env.DATABASE_PATH || 'deze database'} staat geen enkele site.`);
     66    process.exit(1);
     67  } else {
     68    console.error(`meerdere sites in deze database: ${sites.join(', ')}\nGeef er een op: node scripts/export-archive.mjs ${instance} <site-slug>`);
     69    process.exit(1);
     70  }
     71}
     72
     73let uit;
     74try { uit = buildArchive(slug); }
     75catch (e) {
     76  console.error(`${e.message}`);
     77  if (gekozen.bron) console.error(`(gelezen uit ${gekozen.bron})`);
     78  else console.error('(geen instance-.env gevonden -- op een split install: --data-root /var/lib/klonkt)');
     79  process.exit(1);
     80}
    2981const t = uit.counts;
    30 console.log(`site      : ${uit.manifest.site.slug} (${uit.manifest.origin || 'geen PUBLIC_BASE_URL'})`);
     82console.log(`site      : ${uit.manifest.site.slug} (${uit.manifest.origin})`);
     83console.log(`instellingen uit: ${gekozen.bron || 'de omgeving'}`);
     84console.log(`database  : ${process.env.DATABASE_PATH || '(standaard in de code-map)'}`);
    3185console.log(`posts     : ${t.posts}`);
    3286console.log(`antwoorden: ${t.replies}   (alleen-lezen archief)`);
Note: See TracChangeset for help on using the changeset viewer.