From 9c036b1d90bdb4bcd361b8400d8cddf6927d43c1 Mon Sep 17 00:00:00 2001 From: Eric Mc Sween Date: Wed, 6 Apr 2022 09:27:35 -0400 Subject: [PATCH] Merge pull request #7417 from overleaf/em-find-bad-file-trees Script for finding malformed filetrees GitOrigin-RevId: 256f724ec61c0a88a8904f9a4c028cfc78d6d0bb --- .../web/scripts/find_malformed_filetrees.js | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 services/web/scripts/find_malformed_filetrees.js diff --git a/services/web/scripts/find_malformed_filetrees.js b/services/web/scripts/find_malformed_filetrees.js new file mode 100644 index 0000000000..1b33fcdb10 --- /dev/null +++ b/services/web/scripts/find_malformed_filetrees.js @@ -0,0 +1,51 @@ +const { ReadPreference } = require('mongodb') +const { db, waitForDb } = require('../app/src/infrastructure/mongodb') + +async function main() { + await waitForDb() + const projects = db.projects.find( + {}, + { projection: { rootFolder: 1 }, readPreference: ReadPreference.SECONDARY } + ) + let projectsProcessed = 0 + for await (const project of projects) { + projectsProcessed += 1 + if (projectsProcessed % 100000 === 0) { + console.log(projectsProcessed, 'projects processed') + } + processProject(project) + } +} + +function processProject(project) { + const badPaths = findBadPaths(project.rootFolder[0]) + for (const path of badPaths) { + console.log('BAD PATH:', project._id, `rootFolder.0.${path}`) + } +} + +function findBadPaths(folder) { + const result = [] + for (const attr of ['docs', 'fileRefs', 'folders']) { + if (folder[attr] && !Array.isArray(folder[attr])) { + result.push(attr) + } + } + if (folder.folders && Array.isArray(folder.folders)) { + for (const [i, subfolder] of folder.folders.entries()) { + for (const badPath of findBadPaths(subfolder)) { + result.push(`folders.${i}.${badPath}`) + } + } + } + return result +} + +main() + .then(() => { + process.exit(0) + }) + .catch(err => { + console.error(err) + process.exit(1) + })