|
|
@@ -1,7 +1,7 @@
|
|
|
async = require "async"
|
|
|
fs = require "fs"
|
|
|
Path = require "path"
|
|
|
-wrench = require "wrench"
|
|
|
+spawn = require("child_process").spawn
|
|
|
|
|
|
module.exports = OutputFileFinder =
|
|
|
findOutputFiles: (resources, directory, callback = (error, outputFiles) ->) ->
|
|
|
@@ -16,44 +16,37 @@ module.exports = OutputFileFinder =
|
|
|
for file in allFiles
|
|
|
do (file) ->
|
|
|
jobs.push (callback) ->
|
|
|
- if incomingResources[file.path]
|
|
|
+ if incomingResources[file]
|
|
|
return callback()
|
|
|
else
|
|
|
- OutputFileFinder._isDirectory Path.join(directory, file.path), (error, directory) ->
|
|
|
- return callback(error) if error?
|
|
|
- if !directory
|
|
|
- outputFiles.push file
|
|
|
- callback()
|
|
|
+ outputFiles.push {
|
|
|
+ path: file
|
|
|
+ type: file.match(/\.([^\.]+)$/)?[1]
|
|
|
+ }
|
|
|
+ callback()
|
|
|
|
|
|
async.series jobs, (error) ->
|
|
|
return callback(error) if error?
|
|
|
callback null, outputFiles
|
|
|
|
|
|
- _isDirectory: (path, callback = (error, directory) ->) ->
|
|
|
- fs.stat path, (error, stat) ->
|
|
|
- callback error, stat?.isDirectory()
|
|
|
-
|
|
|
- _getAllFiles: (directory, _callback = (error, outputFiles) ->) ->
|
|
|
- callback = (error, outputFiles) ->
|
|
|
- _callback(error, outputFiles)
|
|
|
+ _getAllFiles: (directory, _callback = (error, fileList) ->) ->
|
|
|
+ callback = (error, fileList) ->
|
|
|
+ _callback(error, fileList)
|
|
|
_callback = () ->
|
|
|
|
|
|
- outputFiles = []
|
|
|
-
|
|
|
- wrench.readdirRecursive directory, (error, files) =>
|
|
|
- if error?
|
|
|
- if error.code == "ENOENT"
|
|
|
- # Directory doesn't exist, which is not a problem
|
|
|
- return callback(null, [])
|
|
|
- else
|
|
|
- return callback(error)
|
|
|
-
|
|
|
- # readdirRecursive returns multiple times and finishes with a null response
|
|
|
- if !files?
|
|
|
- return callback(null, outputFiles)
|
|
|
-
|
|
|
- for file in files
|
|
|
- outputFiles.push
|
|
|
- path: file
|
|
|
- type: file.match(/\.([^\.]+)$/)?[1]
|
|
|
+ proc = spawn("find", [directory, "-type", "f"])
|
|
|
+ stdout = ""
|
|
|
+ proc.stdout.on "data", (chunk) ->
|
|
|
+ stdout += chunk.toString()
|
|
|
+ proc.on "error", callback
|
|
|
+ proc.on "close", (code) ->
|
|
|
+ if code != 0
|
|
|
+ error = new Error("find returned non-zero exit code: #{code}")
|
|
|
+ return callback(error)
|
|
|
+
|
|
|
+ fileList = stdout.trim().split("\n")
|
|
|
+ fileList = fileList.map (file) ->
|
|
|
+ # Strip leading directory
|
|
|
+ path = Path.relative(directory, file)
|
|
|
+ return callback null, fileList
|
|
|
|