mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-21 16:06:16 -04:00
bin/repairPad.js: conversion to promise/async
- but see also github issue #3545
This commit is contained in:
parent
58d0e6cea4
commit
c499a08030
1 changed files with 58 additions and 86 deletions
144
bin/repairPad.js
144
bin/repairPad.js
|
@ -1,106 +1,78 @@
|
||||||
/*
|
/*
|
||||||
This is a repair tool. It extracts all datas of a pad, removes and inserts them again.
|
* This is a repair tool. It extracts all datas of a pad, removes and inserts them again.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
console.warn("WARNING: This script must not be used while etherpad is running!");
|
console.warn("WARNING: This script must not be used while etherpad is running!");
|
||||||
|
|
||||||
if(process.argv.length != 3)
|
if (process.argv.length != 3) {
|
||||||
{
|
|
||||||
console.error("Use: node bin/repairPad.js $PADID");
|
console.error("Use: node bin/repairPad.js $PADID");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
//get the padID
|
|
||||||
|
// get the padID
|
||||||
var padId = process.argv[2];
|
var padId = process.argv[2];
|
||||||
|
|
||||||
var db, padManager, pad, settings;
|
let npm = require("../src/node_modules/npm");
|
||||||
var neededDBValues = ["pad:"+padId];
|
npm.load({}, async function(er) {
|
||||||
|
if (er) {
|
||||||
|
console.error("Could not load NPM: " + er)
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
var npm = require("../src/node_modules/npm");
|
try {
|
||||||
var async = require("../src/node_modules/async");
|
// intialize database
|
||||||
|
let settings = require('../src/node/utils/Settings');
|
||||||
|
let db = require('../src/node/db/DB');
|
||||||
|
await db.init();
|
||||||
|
|
||||||
async.series([
|
// get the pad
|
||||||
// load npm
|
let padManager = require('../src/node/db/PadManager');
|
||||||
function(callback) {
|
let pad = await padManager.getPad(padId);
|
||||||
npm.load({}, function(er) {
|
|
||||||
if(er)
|
// accumulate the required keys
|
||||||
{
|
let neededDBValues = ["pad:" + padId];
|
||||||
console.error("Could not load NPM: " + er)
|
|
||||||
process.exit(1);
|
// add all authors
|
||||||
}
|
neededDBValues.push(...pad.getAllAuthors().map(author => "globalAuthor:"));
|
||||||
else
|
|
||||||
{
|
// add all revisions
|
||||||
callback();
|
for (let rev = 0; rev <= pad.head; ++rev) {
|
||||||
}
|
neededDBValues.push("pad:" + padId + ":revs:" + rev);
|
||||||
})
|
|
||||||
},
|
|
||||||
// load modules
|
|
||||||
function(callback) {
|
|
||||||
settings = require('../src/node/utils/Settings');
|
|
||||||
db = require('../src/node/db/DB');
|
|
||||||
callback();
|
|
||||||
},
|
|
||||||
//initialize the database
|
|
||||||
function (callback)
|
|
||||||
{
|
|
||||||
db.init(callback);
|
|
||||||
},
|
|
||||||
//get the pad
|
|
||||||
function (callback)
|
|
||||||
{
|
|
||||||
padManager = require('../src/node/db/PadManager');
|
|
||||||
|
|
||||||
padManager.getPad(padId, function(err, _pad)
|
|
||||||
{
|
|
||||||
pad = _pad;
|
|
||||||
callback(err);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
function (callback)
|
|
||||||
{
|
|
||||||
//add all authors
|
|
||||||
var authors = pad.getAllAuthors();
|
|
||||||
for(var i=0;i<authors.length;i++)
|
|
||||||
{
|
|
||||||
neededDBValues.push("globalAuthor:" + authors[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//add all revisions
|
// add all chat values
|
||||||
var revHead = pad.head;
|
for (let chat = 0; chat <= pad.chatHead; ++chat) {
|
||||||
for(var i=0;i<=revHead;i++)
|
neededDBValues.push("pad:" + padId + ":chat:" + chat);
|
||||||
{
|
|
||||||
neededDBValues.push("pad:"+padId+":revs:" + i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//get all chat values
|
//
|
||||||
var chatHead = pad.chatHead;
|
// NB: this script doesn't actually does what's documented
|
||||||
for(var i=0;i<=chatHead;i++)
|
// since the `value` fields in the following `.forEach`
|
||||||
{
|
// block are just the array index numbers
|
||||||
neededDBValues.push("pad:"+padId+":chat:" + i);
|
//
|
||||||
}
|
// the script therefore craps out now before it can do
|
||||||
callback();
|
// any damage.
|
||||||
},
|
//
|
||||||
function (callback) {
|
// See gitlab issue #3545
|
||||||
db = db.db;
|
//
|
||||||
|
console.info("aborting [gitlab #3545]");
|
||||||
|
process.exit(1);
|
||||||
|
|
||||||
|
// now fetch and reinsert every key
|
||||||
neededDBValues.forEach(function(key, value) {
|
neededDBValues.forEach(function(key, value) {
|
||||||
console.debug("Key: "+key+", value: "+value);
|
console.log("Key: " + key+ ", value: " + value);
|
||||||
db.remove(key);
|
db.remove(key);
|
||||||
db.set(key, value);
|
db.set(key, value);
|
||||||
});
|
});
|
||||||
callback();
|
|
||||||
}
|
|
||||||
], function (err)
|
|
||||||
{
|
|
||||||
if(err) throw err;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
console.info("finished");
|
console.info("finished");
|
||||||
process.exit();
|
process.exit(0);
|
||||||
|
|
||||||
|
} catch (er) {
|
||||||
|
if (er.name === "apierror") {
|
||||||
|
console.error(er);
|
||||||
|
} else {
|
||||||
|
console.trace(er);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//get the pad object
|
|
||||||
//get all revisions of this pad
|
|
||||||
//get all authors related to this pad
|
|
||||||
//get the readonly link related to this pad
|
|
||||||
//get the chat entries related to this pad
|
|
||||||
//remove all keys from database and insert them again
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue