diff --git a/evm-config.schema.json b/evm-config.schema.json index f1a36152..38d098b3 100644 --- a/evm-config.schema.json +++ b/evm-config.schema.json @@ -22,8 +22,8 @@ }, "preserveXcode": { "description": "Whether to delete unused Xcode versions", - "type": "boolean", - "default": true + "type": "number", + "default": 5 }, "extends": { "description": "Name of base config to extend", diff --git a/example-configs/evm.base.yml b/example-configs/evm.base.yml index 366ceda5..c626890e 100644 --- a/example-configs/evm.base.yml +++ b/example-configs/evm.base.yml @@ -1,6 +1,6 @@ root: /path/to/your/developer/folder reclient: remote_exec -preserveXcode: true +preserveXcode: 5 remotes: electron: # SSH or HTTPS url diff --git a/src/e-init.js b/src/e-init.js index 7834c87a..5af41abc 100644 --- a/src/e-init.js +++ b/src/e-init.js @@ -61,6 +61,7 @@ function createConfig(options) { args: gn_args, out: options.out, }, + preserveXcode: 5, env: { CHROMIUM_BUILDTOOLS_PATH: path.resolve(root, 'src', 'buildtools'), GIT_CACHE_PATH: process.env.GIT_CACHE_PATH diff --git a/src/evm-config.js b/src/evm-config.js index 26bb1b2e..94626e26 100644 --- a/src/evm-config.js +++ b/src/evm-config.js @@ -225,8 +225,8 @@ function sanitizeConfig(name, config, overwrite = false) { } if (!('preserveXcode' in config)) { - config.preserveXcode = true; - changes.push(`defined ${color.config('preserveXcode')} to default value of true`); + config.preserveXcode = 5; + changes.push(`defined ${color.config('preserveXcode')} to default value of 5`); } const gomaGnArg = `import("${goma.gnFilePath}")`; diff --git a/src/utils/xcode.js b/src/utils/xcode.js index 8ede4ee2..421f757a 100644 --- a/src/utils/xcode.js +++ b/src/utils/xcode.js @@ -86,6 +86,22 @@ function getXcodeVersion() { return 'unknown'; } +function removeUnusedXcodes() { + const recent = fs + .readdirSync(XcodeDir) + .map(xcode => { + const xcodePath = path.join(XcodeDir, xcode); + const { atime } = fs.statSync(xcodePath); + return { name: xcodePath, atime }; + }) + .sort((a, b) => b.atime - a.atime); + + const { preserveXcode } = evmConfig.current(); + for (const { name } of recent.slice(0, preserveXcode)) { + rimraf.sync(name); + } +} + function extractXcodeVersion(config) { const legacyMatch = /xcode: "?(\d+.\d+.\d+?)"?/.exec(config); if (legacyMatch) return legacyMatch[1]; @@ -240,9 +256,8 @@ function ensureXcode() { if (fs.statSync(XcodePath).isSymbolicLink()) { fs.unlinkSync(XcodePath); } else { - const { preserveXcode } = evmConfig.current(); const versionedXcode = path.resolve(XcodeDir, `Xcode-${getXcodeVersion()}.app`); - if (preserveXcode && !fs.existsSync(versionedXcode)) { + if (!fs.existsSync(versionedXcode)) { fs.renameSync(XcodePath, versionedXcode); } else { rimraf.sync(XcodePath); @@ -253,8 +268,11 @@ function ensureXcode() { console.log(`Updating active Xcode version to ${color.path(expected)}`); fs.symlinkSync(eventualVersionedPath, XcodePath); } + rimraf.sync(XcodeZip); + removeUnusedXcodes(); + return true; } diff --git a/tests/evm-config-spec.js b/tests/evm-config-spec.js index 3308dc0e..fc78c0fe 100644 --- a/tests/evm-config-spec.js +++ b/tests/evm-config-spec.js @@ -15,6 +15,7 @@ const validConfig = { }, goma: 'none', reclient: 'none', + preserveXcode: 5, gen: { args: [], out: 'Testing',