Merge pull request #225 from electron-userland/write-file-after-uncompressing
Write path.txt file after uncompressing
This commit is contained in:
commit
39caff88c9
4 changed files with 89 additions and 18 deletions
1
npm/.gitignore
vendored
1
npm/.gitignore
vendored
|
@ -2,3 +2,4 @@ node_modules
|
||||||
dist
|
dist
|
||||||
path.txt
|
path.txt
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
npm-debug.log
|
||||||
|
|
|
@ -6,3 +6,4 @@ appveyor.yml
|
||||||
CONTRIBUTING.md
|
CONTRIBUTING.md
|
||||||
issue_template.md
|
issue_template.md
|
||||||
test/
|
test/
|
||||||
|
npm-debug.log
|
||||||
|
|
|
@ -12,26 +12,13 @@ var download = require('electron-download')
|
||||||
var installedVersion = null
|
var installedVersion = null
|
||||||
try {
|
try {
|
||||||
installedVersion = fs.readFileSync(path.join(__dirname, 'dist', 'version'), 'utf-8').replace(/^v/, '')
|
installedVersion = fs.readFileSync(path.join(__dirname, 'dist', 'version'), 'utf-8').replace(/^v/, '')
|
||||||
} catch (err) {
|
} catch (ignored) {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
var platform = process.env.npm_config_platform || os.platform()
|
var platformPath = getPlatformPath()
|
||||||
|
|
||||||
function onerror (err) {
|
if (installedVersion === version && fs.existsSync(path.join(__dirname, platformPath))) {
|
||||||
throw err
|
|
||||||
}
|
|
||||||
|
|
||||||
var paths = {
|
|
||||||
darwin: 'dist/Electron.app/Contents/MacOS/Electron',
|
|
||||||
freebsd: 'dist/electron',
|
|
||||||
linux: 'dist/electron',
|
|
||||||
win32: 'dist/electron.exe'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!paths[platform]) throw new Error('Electron builds are not available on platform: ' + platform)
|
|
||||||
|
|
||||||
if (installedVersion === version && fs.existsSync(path.join(__dirname, paths[platform]))) {
|
|
||||||
process.exit(0)
|
process.exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,10 +34,30 @@ download({
|
||||||
// unzips and makes path.txt point at the correct executable
|
// unzips and makes path.txt point at the correct executable
|
||||||
function extractFile (err, zipPath) {
|
function extractFile (err, zipPath) {
|
||||||
if (err) return onerror(err)
|
if (err) return onerror(err)
|
||||||
fs.writeFile(path.join(__dirname, 'path.txt'), paths[platform], function (err) {
|
extract(zipPath, {dir: path.join(__dirname, 'dist')}, function (err) {
|
||||||
if (err) return onerror(err)
|
if (err) return onerror(err)
|
||||||
extract(zipPath, {dir: path.join(__dirname, 'dist')}, function (err) {
|
fs.writeFile(path.join(__dirname, 'path.txt'), platformPath, function (err) {
|
||||||
if (err) return onerror(err)
|
if (err) return onerror(err)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onerror (err) {
|
||||||
|
throw err
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPlatformPath () {
|
||||||
|
var platform = process.env.npm_config_platform || os.platform()
|
||||||
|
|
||||||
|
switch (platform) {
|
||||||
|
case 'darwin':
|
||||||
|
return 'dist/Electron.app/Contents/MacOS/Electron'
|
||||||
|
case 'freebsd':
|
||||||
|
case 'linux':
|
||||||
|
return 'dist/electron'
|
||||||
|
case 'win32':
|
||||||
|
return 'dist/electron.exe'
|
||||||
|
default:
|
||||||
|
throw new Error('Electron builds are not available on platform: ' + platform)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
62
npm/test/errors.js
Normal file
62
npm/test/errors.js
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
var fs = require('fs')
|
||||||
|
var tape = require('tape')
|
||||||
|
var path = require('path')
|
||||||
|
var childProcess = require('child_process')
|
||||||
|
|
||||||
|
tape('fails for unsupported platforms', function (t) {
|
||||||
|
install({npm_config_platform: 'android'}, function (code, stderr) {
|
||||||
|
t.notEqual(stderr.indexOf('Electron builds are not available on platform: android'), -1, 'has error message')
|
||||||
|
t.notEqual(code, 0, 'exited with error')
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
tape('fails for unknown architectures', function (t) {
|
||||||
|
install({
|
||||||
|
npm_config_arch: 'midcentury',
|
||||||
|
npm_config_platform: 'win32',
|
||||||
|
HOME: process.env.HOME,
|
||||||
|
USERPROFILE: process.env.USERPROFILE
|
||||||
|
}, function (code, stderr) {
|
||||||
|
t.notEqual(stderr.indexOf('Failed to find Electron'), -1, 'has error message')
|
||||||
|
t.notEqual(stderr.indexOf('win32-midcentury'), -1, 'has error message')
|
||||||
|
t.notEqual(code, 0, 'exited with error')
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
var install = function (env, callback) {
|
||||||
|
removeVersionFile()
|
||||||
|
|
||||||
|
var installPath = path.join(__dirname, '..', 'install.js')
|
||||||
|
var installProcess = childProcess.fork(installPath, {
|
||||||
|
silent: true,
|
||||||
|
env: env
|
||||||
|
})
|
||||||
|
|
||||||
|
var stderr = ''
|
||||||
|
installProcess.stderr.on('data', function (data) {
|
||||||
|
stderr += data
|
||||||
|
})
|
||||||
|
|
||||||
|
installProcess.on('close', function (code) {
|
||||||
|
restoreVersionFile()
|
||||||
|
callback(code, stderr)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
var versionPath = path.join(__dirname, '..', 'dist', 'version')
|
||||||
|
var versionContents = null
|
||||||
|
function removeVersionFile () {
|
||||||
|
if (fs.existsSync(versionPath)) {
|
||||||
|
versionContents = fs.readFileSync(versionPath)
|
||||||
|
fs.unlinkSync(versionPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function restoreVersionFile () {
|
||||||
|
if (versionContents != null) {
|
||||||
|
fs.writeFileSync(versionPath, versionContents)
|
||||||
|
versionContents = null
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue