|
14 | 14 | which carries no version resource outside Windows |
15 | 15 | * The **Installed Unity Games** window reports these games' Unity version instead of |
16 | 16 | falling back to scanning file headers |
| 17 | +* Two `PathComponent`s resolve per-machine locations so a shared PathReference no longer |
| 18 | + has to be hand-edited per collaborator — |
| 19 | + [SpecialFolder](Editor/Core/Paths/Components/SpecialFolder.cs) and |
| 20 | + [EnvironmentVariable](Editor/Core/Paths/Components/EnvironmentVariable.cs) |
| 21 | + * `SpecialFolder` selects an `Environment.SpecialFolder`, so `ApplicationData` resolves |
| 22 | + to `%APPDATA%`, `~/.config` or `~/Library/Application Support` from one asset |
| 23 | + * `EnvironmentVariable` looks a variable up by name with an optional fallback, so an |
| 24 | + unset variable is reported rather than becoming a literal path segment |
| 25 | + * Neither parses `%VAR%` or `$VAR`, so the same asset resolves on Windows, Linux and |
| 26 | + macOS |
17 | 27 |
|
18 | 28 | ### Fixes |
19 | 29 |
|
|
35 | 45 | executor sub-assets, preserving each executor's enabled state |
36 | 46 | * Equal-priority executors are ordered by type name, so the saved order no longer |
37 | 47 | depends on Unity's sub-asset ordering |
| 48 | +* Path resolution reports authoring mistakes instead of failing opaquely — new |
| 49 | + [PathAssembler](Editor/Core/Paths/PathAssembler.cs) and |
| 50 | + [PathResolutionScope](Editor/Core/Paths/PathResolutionScope.cs) sit behind |
| 51 | + `PathReference.GetPath` |
| 52 | + * A cycle through `OutputReference` or a `Resolver` token names the chain that caused |
| 53 | + it, rather than recursing until `StackOverflowException` terminates the Editor |
| 54 | + * Null, invalid, drive-relative and misplaced rooted segments are refused and name the |
| 55 | + `PathComponent` that produced them, so a segment can no longer silently discard the |
| 56 | + components before it |
| 57 | + * Two `PathReference` assets sharing a name report both assets instead of surfacing as |
| 58 | + a dictionary key collision |
| 59 | +* [PathReference](Editor/Core/Paths/PathReference.cs) `ElementTemplate` scaffolds |
| 60 | + `GetPathInternal`, so generated `PathComponent`s compile — it previously declared an |
| 61 | + override of the non-virtual `GetPath` |
38 | 62 |
|
39 | 63 | ### Tests |
40 | 64 |
|
|
47 | 71 | * Added [PlayerDataResolverTests](Tests/Editor/PlayerDataResolverTests.cs) covering player |
48 | 72 | layout selection and the bundle branch against a synthesized UnityFS bundle, so the |
49 | 73 | compressed layout is exercised without a multi-megabyte fixture |
| 74 | +* Added coverage for the path component system across |
| 75 | + [PathComponentTests](Tests/Editor/PathComponentTests.cs), |
| 76 | + [PathComponentFileSystemTests](Tests/Editor/PathComponentFileSystemTests.cs), |
| 77 | + [PathReferenceCombineTests](Tests/Editor/PathReferenceCombineTests.cs), |
| 78 | + [PathReferenceCycleTests](Tests/Editor/PathReferenceCycleTests.cs) and |
| 79 | + [PathReferenceAssetTests](Tests/Editor/PathReferenceAssetTests.cs) |
| 80 | + * Pins the authoring patterns that ship in `Templates/`, including `Constant("..")` and |
| 81 | + a rooted first component, so future validation cannot outlaw them |
| 82 | + * Records that `ManifestName` and `ManifestVersion` return null rather than entering |
| 83 | + their reported-error paths, and that `FindFile` and `FindDirectory` lose the |
| 84 | + underlying cause outside pipeline execution |
| 85 | +* [PathComponentEnvironmentTests](Tests/Editor/PathComponentEnvironmentTests.cs) cover both |
| 86 | + new components, including the unset-variable diagnostic and that shell syntax in a |
| 87 | + variable name is looked up verbatim rather than unwrapped |
50 | 88 |
|
51 | 89 | ## 9.4.3 |
52 | 90 |
|
|
0 commit comments