Commit 833b04c
committed
fix(core): honour XDG bases and SpecialFolderOption on POSIX (#2320, SR-AUD-105)
Decision 1 (XDG), answer (b): XDG_CONFIG_HOME and XDG_DATA_HOME are honoured
when set AND absolute. The reference's test is transcribed rather than
paraphrased -- GetFolderPathCore.Unix.cs:157-161 asks 'is it absolute', not 'is
it set', so an EMPTY value falls back exactly as an unset one does. A naive
getenv() != nullptr implementation fails that row, and a mutation pins it.
Decision 2 turned out NOT to be a user question: the reference answers it, so it
was derived. DoNotVerify returns the path unchecked; None -- the default --
runs access(R_OK) and returns "" on failure; Create creates every missing
component; an undefined option raises ArgumentOutOfRangeException while an
undefined folder deliberately does not.
THAT DEFAULT IS A BEHAVIOUR CHANGE. All three options previously returned the
path, so a caller could not tell a real directory from a name.
GetFolderPath(Desktop) is now "" on a machine with no ~/Desktop.
::mkdir per component rather than System::IO::Directory, on purpose: Core.Base
does not depend on modules/io, and taking that edge to create one directory
would be a far larger change than the behaviour it buys.
A TEST DEFECT HAD TO BE FIXED ON THE WAY. Five rows asserted a non-empty result
and passed only because this machine has ~/Desktop and ~/.config; once the
default verifies, they encode the environment rather than the contract, which
SA-6 calls a defect in the test. One further row asserted the OPPOSITE of the
new contract and is rewritten to state the real one.
THE PREMISE FOR DECLINING FULL XDG WAS WRONG AND IS CORRECTED RATHER THAN LEFT
STANDING. The user was told option (c) would 'cross from parity into invention'.
Measured, every remaining XDG behaviour has a .NET mapping, because
ReadXdgDirectory reads user-dirs.dirs. The reason to stop here is scope, not
invention, so eight further diverging rows -- including Personal returning $HOME
where .NET returns a Documents subdirectory -- are filed as #2364 for a decision
on accurate information.
Five mutations, all caught. Gate 17,278 run, 0 failed, 38 executables.1 parent 00786fc commit 833b04c
7 files changed
Lines changed: 369 additions & 31 deletions
File tree
- audit
- docs
- modules/core
- include/System
- src/System
- tests/System
Large diffs are not rendered by default.
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
108 | 108 | | |
109 | 109 | | |
110 | 110 | | |
111 | | - | |
112 | | - | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
113 | 117 | | |
114 | 118 | | |
115 | 119 | | |
| |||
325 | 329 | | |
326 | 330 | | |
327 | 331 | | |
328 | | - | |
329 | | - | |
330 | | - | |
| 332 | + | |
331 | 333 | | |
332 | 334 | | |
333 | 335 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| |||
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| 28 | + | |
27 | 29 | | |
28 | 30 | | |
29 | 31 | | |
| 32 | + | |
30 | 33 | | |
31 | 34 | | |
32 | 35 | | |
| |||
319 | 322 | | |
320 | 323 | | |
321 | 324 | | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
322 | 366 | | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
323 | 379 | | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
324 | 383 | | |
325 | | - | |
| 384 | + | |
| 385 | + | |
326 | 386 | | |
327 | 387 | | |
328 | 388 | | |
329 | 389 | | |
330 | | - | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
331 | 398 | | |
332 | 399 | | |
333 | | - | |
| 400 | + | |
334 | 401 | | |
335 | | - | |
336 | | - | |
337 | | - | |
338 | | - | |
339 | | - | |
340 | | - | |
341 | | - | |
342 | | - | |
343 | | - | |
344 | | - | |
345 | | - | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
346 | 417 | | |
347 | 418 | | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
348 | 427 | | |
349 | 428 | | |
350 | 429 | | |
| |||
0 commit comments