| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- let OutputFileFinder
- const async = require('async')
- const fs = require('fs')
- const Path = require('path')
- const { spawn } = require('child_process')
- const logger = require('logger-sharelatex')
- module.exports = OutputFileFinder = {
- findOutputFiles(resources, directory, callback) {
- const incomingResources = new Set(
- resources.map((resource) => resource.path)
- )
- OutputFileFinder._getAllFiles(directory, function (error, allFiles) {
- if (allFiles == null) {
- allFiles = []
- }
- if (error) {
- logger.err({ err: error }, 'error finding all output files')
- return callback(error)
- }
- const outputFiles = []
- for (const file of allFiles) {
- if (!incomingResources.has(file)) {
- outputFiles.push({
- path: file,
- type: Path.extname(file).replace(/^\./, '') || undefined
- })
- }
- }
- callback(null, outputFiles, allFiles)
- })
- },
- _getAllFiles(directory, _callback) {
- // don't include clsi-specific files/directories in the output list
- const EXCLUDE_DIRS = [
- '-name',
- '.cache',
- '-o',
- '-name',
- '.archive',
- '-o',
- '-name',
- '.project-*'
- ]
- const args = [
- directory,
- '(',
- ...EXCLUDE_DIRS,
- ')',
- '-prune',
- '-o',
- '-type',
- 'f',
- '-print'
- ]
- logger.log({ args }, 'running find command')
- const proc = spawn('find', args)
- let stdout = ''
- proc.stdout.setEncoding('utf8').on('data', (chunk) => (stdout += chunk))
- proc.on('error', callback)
- proc.on('close', function (code) {
- if (code !== 0) {
- logger.warn(
- { directory, code },
- "find returned error, directory likely doesn't exist"
- )
- return callback(null, [])
- }
- let fileList = stdout.trim().split('\n')
- fileList = fileList.map(function (file) {
- // Strip leading directory
- let path
- return (path = Path.relative(directory, file))
- })
- callback(null, fileList)
- })
- }
- }
|