Skip to content

Commit

Permalink
refactor: remove n Xcodes by atime
Browse files Browse the repository at this point in the history
  • Loading branch information
codebytere committed Jan 18, 2024
1 parent 2599242 commit 0952051
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 7 deletions.
4 changes: 2 additions & 2 deletions evm-config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion example-configs/evm.base.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
root: /path/to/your/developer/folder
reclient: remote_exec
preserveXcode: true
preserveXcode: 5
remotes:
electron:
# SSH or HTTPS url
Expand Down
1 change: 1 addition & 0 deletions src/e-init.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions src/evm-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -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}")`;
Expand Down
22 changes: 20 additions & 2 deletions src/utils/xcode.js
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down Expand Up @@ -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);
Expand All @@ -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;
}

Expand Down
1 change: 1 addition & 0 deletions tests/evm-config-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const validConfig = {
},
goma: 'none',
reclient: 'none',
preserveXcode: 5,
gen: {
args: [],
out: 'Testing',
Expand Down

0 comments on commit 0952051

Please sign in to comment.