mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2025-01-07 23:59:22 +03: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
|