The is_cached method now correctly handles store paths that have line
numbers appended (e.g., /nix/store/file.nix:123:456). Previously, these
paths would fail the existence check because the exact path with line
numbers doesn't exist as a file.
The fix adds a helper method that:
- First checks if the exact path exists
- If not, and the path contains colons, validates that the suffix
consists only of numbers (line:column format)
- If valid, strips the line numbers and checks the base file path
This ensures that cached references to specific file locations are
properly validated while avoiding false positives with files that
have colons in their names.
Since apply changes the structure of the retuned value, the cache will
be confused about the structure and in subsequent request will use this
wrong structure.
For example: we would use builtins.attrNames on inputs, the flake will
forever think that inputs is a list of strings and will report errors
whenever we try to fetch subkeys from it
When using multiselect with outPath like {outPath,?meta}, nix evaluation
collapses the attrset to just the outPath string, breaking further selection.
Add validation during selector parsing to catch this and provide a clear error.
The flake cache was only checking existence for paths starting with
NIX_STORE_DIR (defaulting to /nix/store), but not for paths in the
test store when CLAN_TEST_STORE is set. This caused the cache to
return stale references to paths that had been garbage collected.
This fix updates the is_cached method to also check for paths in
the test store, preventing cache misses during tests.