From f51103f44a539d519f308c9d281d56ecc9b6dfe8 Mon Sep 17 00:00:00 2001 From: Rich Hong Date: Mon, 22 Jun 2015 19:38:47 -0400 Subject: [PATCH] Update internalModuleReadFile to support unpacked asar files Add tests for reading unpacked files using both fs.readFileSync and internalModuleReadFile --- atom/common/lib/asar.coffee | 4 ++++ spec/asar-spec.coffee | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/atom/common/lib/asar.coffee b/atom/common/lib/asar.coffee index ee6d18e..900a686 100644 --- a/atom/common/lib/asar.coffee +++ b/atom/common/lib/asar.coffee @@ -323,6 +323,10 @@ exports.wrapFsWithAsar = (fs) -> return undefined unless info return '' if info.size is 0 + if info.unpacked + realPath = archive.copyFileOut filePath + return fs.readFileSync realPath, encoding: 'utf8' + buffer = new Buffer(info.size) fd = archive.getFd() retrun undefined unless fd >= 0 diff --git a/spec/asar-spec.coffee b/spec/asar-spec.coffee index 3ad706b..977676a 100644 --- a/spec/asar-spec.coffee +++ b/spec/asar-spec.coffee @@ -45,6 +45,10 @@ describe 'asar package', -> assert /ENOENT/.test e async = true + it 'reads a normal file with unpacked files', -> + p = path.join fixtures, 'asar', 'unpack.asar', 'a.txt' + assert.equal fs.readFileSync(p).toString(), 'a\n' + describe 'fs.readFile', -> it 'reads a normal file', (done) -> p = path.join fixtures, 'asar', 'a.asar', 'file1' @@ -372,6 +376,21 @@ describe 'asar package', -> done() child.send file + describe 'internalModuleReadFile', -> + internalModuleReadFile = process.binding('fs').internalModuleReadFile + + it 'read a normal file', -> + file1 = path.join fixtures, 'asar', 'a.asar', 'file1' + assert.equal internalModuleReadFile(file1).toString(), 'file1\n' + file2 = path.join fixtures, 'asar', 'a.asar', 'file2' + assert.equal internalModuleReadFile(file2).toString(), 'file2\n' + file3 = path.join fixtures, 'asar', 'a.asar', 'file3' + assert.equal internalModuleReadFile(file3).toString(), 'file3\n' + + it 'reads a normal file with unpacked files', -> + p = path.join fixtures, 'asar', 'unpack.asar', 'a.txt' + assert.equal internalModuleReadFile(p).toString(), 'a\n' + describe 'asar protocol', -> url = require 'url' remote = require 'remote' -- 2.7.4