Просмотр исходного кода

Merge pull request #7417 from overleaf/em-find-bad-file-trees

Script for finding malformed filetrees

GitOrigin-RevId: 256f724ec61c0a88a8904f9a4c028cfc78d6d0bb
Eric Mc Sween 4 лет назад
Родитель
Сommit
9c036b1d90
1 измененных файлов с 51 добавлено и 0 удалено
  1. 51 0
      services/web/scripts/find_malformed_filetrees.js

+ 51 - 0
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)
+  })