You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* refactor(cli): unify path normalization, add tests + Windows install docs
Follow-up to #2835, which fixed the Windows "no Resource provider [c]"
crash (#2841). This does not change the runtime fix#2835 shipped:
- Move the canonical normalizePath() into Helpers.cfc (its natural home
beside capitalize/pluralize/stripSpecialChars) and reduce
Module.$normalizePath() to a one-line delegating wrapper. Helpers is a
dependency-free leaf utility, so it is safe to construct during init().
The 6 call sites and the $safeDirExists() fallback are unchanged.
- Add 7 normalizePath() regression specs to HelpersSpec.cfc. Because
Module delegates to Helpers now, these exercise the real bootstrap path
rather than a parallel copy.
- Document the Windows "there is no Resource provider available with the
name [c]" failure in the CLI installation guide.
Supersedes #2843. Verified locally: 667/667 cli/lucli specs pass.
Signed-off-by: Peter Amiri <peter@alurium.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* refactor(cli): guard normalizePath mid() edge and broaden Windows update docs
Address Reviewer A on #2863:
- Guard the mid(rv, 3, len(rv) - 2) call in Helpers.normalizePath()
against a count of 0 when rv is exactly "//" — cf. CLAUDE.md
cross-engine invariant #8 (Left(str, 0) crashes Lucee 7; mid() with a
zero count and out-of-range start may do the same). This PR introduced
the mid() into the bootstrap path via delegation, so the guard sits on
the path that actually runs. Output is unchanged for every real input.
- Add a regression spec for the degenerate "//" root.
- Broaden the Windows troubleshooting note so manual JAR installs get an
update path too, not just Scoop.
Verified locally: 668/668 cli/lucli specs pass.
Signed-off-by: Peter Amiri <peter@alurium.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Signed-off-by: Peter Amiri <peter@alurium.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,6 +29,7 @@ All historical references to "CFWheels" in this changelog have been preserved fo
29
29
### Changed
30
30
31
31
- Version switcher now labels the 4.0 stable docs "v4.0 (current)" (was "v4.0.0"); the vestigial pre-GA `v4-0-1-snapshot` guides tree is removed and its one unique page, "Reading the Changelog", is salvaged into `v4-0-0/upgrading/`. Both sites deploy from `develop`, so in-progress patch docs already live in the `v4-0-0` tree; a separate `*-snapshot` tree is only warranted when a different minor/major (e.g. `v4-1-snapshot`) is under development. Courtesy redirects cover the high-traffic `/v4-0-1-snapshot/*` paths (#2827)
32
+
- CLI path normalisation now lives in a single, unit-tested `Helpers.normalizePath()`; `Module.$normalizePath()` (added in #2835 to fix the Windows `Resource provider [c]` crash) delegates to it instead of carrying a private copy, so the regression coverage exercises the real bootstrap path rather than a decoy. The CLI installation guide also gains a Windows troubleshooting entry for the original `there is no Resource provider available with the name [c]` error (#2841)
Copy file name to clipboardExpand all lines: web/sites/guides/src/content/docs/v4-0-0/command-line-tools/installation.mdx
+12Lines changed: 12 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -233,6 +233,18 @@ On Linux, the `.deb`/`.rpm` package installs `/usr/bin/wheels`, which should be
233
233
234
234
The wheels formula deliberately isolates runtime state under `~/.wheels/` (via `LUCLI_HOME`) so a standalone `lucli` install — which uses `~/.lucli/` — stays out of the way. If you previously had LuCLI installed directly and see odd module-resolution errors, check that the wrapper set `LUCLI_HOME` correctly (`wheels system env` will dump the resolved environment) and that `~/.wheels/modules/wheels/` contains a current `Module.cfc` and `.module-version` file.
235
235
236
+
### Windows: `there is no Resource provider available with the name [c]`
237
+
238
+
On Windows, `wheels new`, `wheels start`, and most other subcommands crashed before any work could happen with:
239
+
240
+
```
241
+
lucee.runtime.exp.NativeException: there is no Resource provider available
242
+
with the name [c], available resource providers are [ftp, zip, tar, tgz,
243
+
http, https, ram, s3]
244
+
```
245
+
246
+
The cause was mixed-slash paths: `java.io.File.getCanonicalPath()` on Windows returns backslash form (`C:\Users\tim\Projects`), which — when concatenated with a forward-slash suffix — produced a string like `C:\Users\tim\Projects/vendor/wheels`. Lucee's Resource API parsed `c:` as a URI scheme and bailed because no `c` provider is registered. This is fixed in the release that includes #2841. Update to the latest version and the error will not recur — `scoop update wheels` for Scoop installs, or re-fetch the latest Wheels Module (see **Manual JAR install** above) if you wired it up by hand. `wheels --version` was unaffected because LuCLI handles that flag before dispatching to the module.
0 commit comments