mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-01-19 22:23:33 +01:00
04063d664b
* fix bin folder and workflows as far its possible cleanup of dockerfile changed paths of scripts add lock file fix working directory for workflows fix windows bin fix travis (is travis used anyway?) fix package refs remove pnpm-lock file in root as these conflicts with the docker volume setup optimize comments use install again refactor prod image call to run fix --workspace can only be used inside a workspace correct comment try fix pipeline try fix pipeline for upgrade-from-latest-release install all deps smaller adjustments save update dockerfile remove workspace command fix run test command start repair latest release workflow start repair latest release workflow start repair latest release workflow further repairs * remove test plugin from docker compose
64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
/*
|
|
* This is a debug tool. It helps to extract all datas of a pad and move it from
|
|
* a productive environment and to a develop environment to reproduce bugs
|
|
* there. It outputs a dirtydb file
|
|
*/
|
|
|
|
// As of v14, Node.js does not exit when there is an unhandled Promise rejection. Convert an
|
|
// unhandled rejection into an uncaught exception, which does cause Node.js to exit.
|
|
process.on('unhandledRejection', (err) => { throw err; });
|
|
|
|
const util = require('util');
|
|
|
|
if (process.argv.length !== 3) throw new Error('Use: node extractPadData.js $PADID');
|
|
|
|
// get the padID
|
|
const padId = process.argv[2];
|
|
|
|
(async () => {
|
|
// initialize database
|
|
require('./src/node/utils/Settings');
|
|
const db = require('./src/node/db/DB');
|
|
await db.init();
|
|
|
|
// load extra modules
|
|
const dirtyDB = require('dirty');
|
|
const padManager = require('./src/node/db/PadManager');
|
|
|
|
// initialize output database
|
|
const dirty = dirtyDB(`${padId}.db`);
|
|
|
|
// Promise set function
|
|
const set = util.promisify(dirty.set.bind(dirty));
|
|
|
|
// array in which required key values will be accumulated
|
|
const neededDBValues = [`pad:${padId}`];
|
|
|
|
// get the actual pad object
|
|
const pad = await padManager.getPad(padId);
|
|
|
|
// add all authors
|
|
neededDBValues.push(...pad.getAllAuthors().map((author) => `globalAuthor:${author}`));
|
|
|
|
// add all revisions
|
|
for (let rev = 0; rev <= pad.head; ++rev) {
|
|
neededDBValues.push(`pad:${padId}:revs:${rev}`);
|
|
}
|
|
|
|
// add all chat values
|
|
for (let chat = 0; chat <= pad.chatHead; ++chat) {
|
|
neededDBValues.push(`pad:${padId}:chat:${chat}`);
|
|
}
|
|
|
|
for (const dbkey of neededDBValues) {
|
|
let dbvalue = await db.get(dbkey);
|
|
if (dbvalue && typeof dbvalue !== 'object') {
|
|
dbvalue = JSON.parse(dbvalue);
|
|
}
|
|
await set(dbkey, dbvalue);
|
|
}
|
|
|
|
console.log('finished');
|
|
})();
|