fix: support ASAR in fs.copyFile (#14942)
This commit is contained in:
parent
820d99d37f
commit
4c4d8c5bfa
2 changed files with 45 additions and 0 deletions
|
@ -748,6 +748,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Strictly implementing the flags of fs.copyFile is hard, just do a simple
|
||||||
|
// implementation for now. Doing 2 copies won't spend much time more as OS
|
||||||
|
// has filesystem caching.
|
||||||
|
overrideAPI(fs, 'copyFile')
|
||||||
|
overrideAPISync(fs, 'copyFileSync')
|
||||||
|
|
||||||
overrideAPI(fs, 'open')
|
overrideAPI(fs, 'open')
|
||||||
overrideAPI(childProcess, 'execFile')
|
overrideAPI(childProcess, 'execFile')
|
||||||
overrideAPISync(process, 'dlopen', 1)
|
overrideAPISync(process, 'dlopen', 1)
|
||||||
|
|
|
@ -3,6 +3,7 @@ const ChildProcess = require('child_process')
|
||||||
const { expect } = require('chai')
|
const { expect } = require('chai')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
const temp = require('temp').track()
|
||||||
const util = require('util')
|
const util = require('util')
|
||||||
const { closeWindow } = require('./window-helpers')
|
const { closeWindow } = require('./window-helpers')
|
||||||
|
|
||||||
|
@ -137,6 +138,44 @@ describe('asar package', function () {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('fs.copyFile', function () {
|
||||||
|
it('copies a normal file', function (done) {
|
||||||
|
const p = path.join(fixtures, 'asar', 'a.asar', 'file1')
|
||||||
|
const dest = temp.path()
|
||||||
|
fs.copyFile(p, dest, function (err) {
|
||||||
|
assert.strictEqual(err, null)
|
||||||
|
assert(fs.readFileSync(p).equals(fs.readFileSync(dest)))
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('copies a unpacked file', function (done) {
|
||||||
|
const p = path.join(fixtures, 'asar', 'unpack.asar', 'a.txt')
|
||||||
|
const dest = temp.path()
|
||||||
|
fs.copyFile(p, dest, function (err) {
|
||||||
|
assert.strictEqual(err, null)
|
||||||
|
assert(fs.readFileSync(p).equals(fs.readFileSync(dest)))
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('fs.copyFileSync', function () {
|
||||||
|
it('copies a normal file', function () {
|
||||||
|
const p = path.join(fixtures, 'asar', 'a.asar', 'file1')
|
||||||
|
const dest = temp.path()
|
||||||
|
fs.copyFileSync(p, dest)
|
||||||
|
assert(fs.readFileSync(p).equals(fs.readFileSync(dest)))
|
||||||
|
})
|
||||||
|
|
||||||
|
it('copies a unpacked file', function () {
|
||||||
|
const p = path.join(fixtures, 'asar', 'unpack.asar', 'a.txt')
|
||||||
|
const dest = temp.path()
|
||||||
|
fs.copyFileSync(p, dest)
|
||||||
|
assert(fs.readFileSync(p).equals(fs.readFileSync(dest)))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe('fs.lstatSync', function () {
|
describe('fs.lstatSync', function () {
|
||||||
it('handles path with trailing slash correctly', function () {
|
it('handles path with trailing slash correctly', function () {
|
||||||
const p = path.join(fixtures, 'asar', 'a.asar', 'link2', 'link2', 'file1')
|
const p = path.join(fixtures, 'asar', 'a.asar', 'link2', 'link2', 'file1')
|
||||||
|
|
Loading…
Reference in a new issue