Changeset ed5e7ab in Klonkt for scripts/export-archive.mjs
- Timestamp:
- 08/07/2026 05:41:20 PM (5 weeks ago)
- Branches:
- main
- Children:
- c25eff7
- Parents:
- ba76bf5 (diff), a4fea5e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
scripts/export-archive.mjs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
scripts/export-archive.mjs
rba76bf5 red5e7ab 6 6 // node scripts/export-archive.mjs <slug> --out boiert.zip 7 7 // 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 8 17 // 9 18 // Het formaat staat in docs/EXPORT-FORMAT.md. … … 15 24 import fs from 'fs'; 16 25 import path from 'path'; 17 import { buildArchive, zipArchive, writeArchiveDir } from '../src/services/ArchiveExportService.js';26 import { kiesInstance, eisOrigin, splitsArgs } from './instance-env.mjs'; 18 27 19 28 const 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. 33 const { vrij, vlaggen } = splitsArgs(args, ['--data-root', '--env', '--out', '--dir']); 34 const instance = vrij[0]; 35 let slug = vrij[1] || null; 36 const vlag = (naam) => vlaggen[naam] ?? null; 22 37 23 if (! slug) {24 console.error('gebruik: node scripts/export-archive.mjs < slug>[--dry-run | --out <zip> | --dir <map>]');38 if (!instance) { 39 console.error('gebruik: node scripts/export-archive.mjs <instance> [site-slug] [--data-root <map>] [--env <pad>] [--dry-run | --out <zip> | --dir <map>]'); 25 40 process.exit(1); 26 41 } 27 42 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. 45 let gekozen; 46 try { 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); } 52 eisOrigin(gekozen.bron); 53 54 const { buildArchive, zipArchive, writeArchiveDir } = await import('../src/services/ArchiveExportService.js'); 55 const { default: db } = await import('../src/config/database.js'); 56 57 // Geen slug gegeven? Dan mag de database het zeggen, mits het antwoord eenduidig is. 58 if (!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 73 let uit; 74 try { uit = buildArchive(slug); } 75 catch (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 } 29 81 const t = uit.counts; 30 console.log(`site : ${uit.manifest.site.slug} (${uit.manifest.origin || 'geen PUBLIC_BASE_URL'})`); 82 console.log(`site : ${uit.manifest.site.slug} (${uit.manifest.origin})`); 83 console.log(`instellingen uit: ${gekozen.bron || 'de omgeving'}`); 84 console.log(`database : ${process.env.DATABASE_PATH || '(standaard in de code-map)'}`); 31 85 console.log(`posts : ${t.posts}`); 32 86 console.log(`antwoorden: ${t.replies} (alleen-lezen archief)`);
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)