mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-15 06:06:35 +08:00
40 lines
1.2 KiB
CoffeeScript
40 lines
1.2 KiB
CoffeeScript
|
async = require 'async'
|
||
|
fs = require 'fs-plus'
|
||
|
path = require 'path'
|
||
|
minidump = require 'minidump'
|
||
|
|
||
|
module.exports = (grunt) ->
|
||
|
{mkdir, rm} = require('./task-helpers')(grunt)
|
||
|
|
||
|
dumpSymbolTo = (binaryPath, targetDirectory, callback) ->
|
||
|
minidump.dumpSymbol binaryPath, (error, content) ->
|
||
|
return callback(error) if error?
|
||
|
|
||
|
moduleLine = /MODULE [^ ]+ [^ ]+ ([0-9A-F]+) (.*)\n/.exec(content)
|
||
|
if moduleLine.length isnt 3
|
||
|
return callback("Invalid output when dumping symbol for #{binaryPath}")
|
||
|
|
||
|
filename = moduleLine[2]
|
||
|
targetPathDirname = path.join(targetDirectory, filename, moduleLine[1])
|
||
|
mkdir targetPathDirname
|
||
|
|
||
|
targetPath = path.join(targetPathDirname, "#{filename}.sym")
|
||
|
fs.writeFile(targetPath, content, callback)
|
||
|
|
||
|
grunt.registerTask 'dump-symbols', 'Dump symbols for native modules', ->
|
||
|
done = @async()
|
||
|
|
||
|
symbolsDir = grunt.config.get('atom.symbolsDir')
|
||
|
rm symbolsDir
|
||
|
mkdir symbolsDir
|
||
|
|
||
|
tasks = []
|
||
|
onFile = (binaryPath) ->
|
||
|
if /.*\.node$/.test(binaryPath)
|
||
|
tasks.push(dumpSymbolTo.bind(this, binaryPath, symbolsDir))
|
||
|
onDirectory = ->
|
||
|
true
|
||
|
fs.traverseTreeSync 'node_modules', onFile, onDirectory
|
||
|
|
||
|
async.parallel tasks, done
|