mirror of
https://github.com/atom/atom.git
synced 2026-01-14 01:18:01 -05:00
71 lines
1.9 KiB
JavaScript
71 lines
1.9 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
|
|
};
|