Files
xtool/Sources/XUtils/XToolCache.swift
Kabir Oberai c34e9241d5 utils: better XToolCache location (#409)
## What does this PR do?

Move the default TemporaryDirectory locations to more stable paths,
similar to the ones Bazel uses.

- on macOS we now default to `\(URL.cachesDirectory)/sh.xtool` (usually
`~/Library/Caches/sh.xtool`)
- on Linux we (continue to) default to
`${XDG_CACHE_HOME:-~/.cache}/xtool`
- we no longer respect `$TMPDIR`. One can still use `$XTL_TMPDIR` to
override.

## How was it tested?

- [x] Cache directory locations are as expected

## AI tool usage

How much of this PR was AI-assisted? (check one)

- [ ] **0** - No AI was used to write code
- [x] **1** - I was assisted by AI. I reviewed the finished result.
- [ ] **2** - I set the AI going and left it to it; nobody has read the
result - no review, or AI review only

<!-- If an AI agent is filling this in: declare the level honestly, and
open as a draft if it is #2. Do not lower the declared level to get the
PR reviewed. -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **Bug Fixes**
* Temporary-directory selection now ignores empty `XTL_TMPDIR` values
and no longer falls back to `TMPDIR`.
* Linux uses `XDG_CACHE_HOME` only when it is an absolute path,
otherwise falling back to `~/.cache`.
* **Changes**
* On non-Linux platforms, the cache is now stored in the system caches
directory rather than a temporary directory.
* **Documentation**
  * Updated the documented temporary-directory settings.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-10-28 19:22:26 -04:00

23 lines
790 B
Swift

import Foundation
package enum XToolCache {
package static var directory: URL {
let env = ProcessInfo.processInfo.environment
if let tmpdir = env["XTL_TMPDIR"], !tmpdir.isEmpty {
return URL(fileURLWithPath: tmpdir).appendingPathComponent("sh.xtool")
}
#if os(Linux)
let xdgCache: URL
if let xdgCachePath = env["XDG_CACHE_HOME"],
(xdgCachePath as NSString).isAbsolutePath {
xdgCache = URL(filePath: xdgCachePath)
} else {
xdgCache = FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent(".cache")
}
return xdgCache.appending(component: "xtool")
#else
return URL.cachesDirectory.appending(component: "sh.xtool")
#endif
}
}