in lib/cmds/update.ts [234:275]
function unzip<T extends Binary>(binary: T, outputDir: string, fileName: string): void {
// remove the previously saved file and unzip it
let osType = Config.osType();
let mv = path.resolve(outputDir, binary.executableFilename());
try {
fs.unlinkSync(mv);
} catch (err) {
try {
rimraf.sync(mv);
} catch (err2) {
}
}
// unzip the file
logger.info(binary.name + ': unzipping ' + fileName);
if (fileName.slice(-4) == '.zip') {
try {
let zip = new AdmZip(path.resolve(outputDir, fileName));
zip.extractAllTo(outputDir, true);
} catch (e) {
throw new Error(`Invalid filename: ${path.resolve(outputDir, fileName)}`)
}
} else {
// We will only ever get .tar files on linux
child_process.spawnSync('tar', ['zxvf', path.resolve(outputDir, fileName), '-C', outputDir]);
}
// rename
fs.renameSync(path.resolve(outputDir, binary.zipContentName()), mv);
// set permissions
if (osType !== 'Windows_NT') {
logger.info(binary.name + ': setting permissions to 0755 for ' + mv);
if (binary.id() !== AndroidSDK.id) {
fs.chmodSync(mv, '0755');
} else {
fs.chmodSync(path.resolve(mv, 'tools', 'android'), '0755');
fs.chmodSync(path.resolve(mv, 'tools', 'emulator'), '0755');
// TODO(sjelin): get 64 bit versions working
}
}
}