mirror of https://github.com/atom/atom.git
61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
const fs = require('fs-plus')
|
|
const path = require('path')
|
|
|
|
const hasWriteAccess = (dir) => {
|
|
const testFilePath = path.join(dir, 'write.test')
|
|
try {
|
|
fs.writeFileSync(testFilePath, new Date().toISOString(), { flag: 'w+' })
|
|
fs.unlinkSync(testFilePath)
|
|
return true
|
|
} catch (err) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
const getAppDirectory = () => {
|
|
switch (process.platform) {
|
|
case 'darwin':
|
|
return process.execPath.substring(0, process.execPath.indexOf('.app') + 4)
|
|
case 'linux':
|
|
case 'win32':
|
|
return path.join(process.execPath, '..')
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
setAtomHome: (homePath) => {
|
|
// When a read-writeable .atom folder exists above app use that
|
|
const portableHomePath = path.join(getAppDirectory(), '..', '.atom')
|
|
if (fs.existsSync(portableHomePath)) {
|
|
if (hasWriteAccess(portableHomePath)) {
|
|
process.env.ATOM_HOME = portableHomePath
|
|
} else {
|
|
// A path exists so it was intended to be used but we didn't have rights, so warn.
|
|
console.log(`Insufficient permission to portable Atom home "${portableHomePath}".`)
|
|
}
|
|
}
|
|
|
|
// Check ATOM_HOME environment variable next
|
|
if (process.env.ATOM_HOME !== undefined) {
|
|
return
|
|
}
|
|
|
|
// Fall back to default .atom folder in users home folder
|
|
process.env.ATOM_HOME = path.join(homePath, '.atom')
|
|
},
|
|
|
|
setUserData: (app) => {
|
|
const electronUserDataPath = path.join(process.env.ATOM_HOME, 'electronUserData')
|
|
if (fs.existsSync(electronUserDataPath)) {
|
|
if (hasWriteAccess(electronUserDataPath)) {
|
|
app.setPath('userData', electronUserDataPath)
|
|
} else {
|
|
// A path exists so it was intended to be used but we didn't have rights, so warn.
|
|
console.log(`Insufficient permission to Electron user data "${electronUserDataPath}".`)
|
|
}
|
|
}
|
|
},
|
|
|
|
getAppDirectory: getAppDirectory
|
|
}
|