RFR: 8341641: Make %APPDATA% and %LOCALAPPDATA% env variables available in *.cfg files [v10]
Alexey Semenyuk
asemenyuk at openjdk.org
Wed Apr 9 20:56:03 UTC 2025
> jpackage app laucnher will expand environment variables in .cfg files.
>
> Previously jpackage app launcher only replaced `$APPDIR`, `$BINDIR`, and `$ROOTDIR` tokens with the corresponding path values. With this patch, any environment variable can be expanded. The syntax is shell-like `$ENV_VAR_NAME` or `${ENV_VAR_NAME}`. If `$ENV_VAR_NAME` syntax is used, the variable name stops at the first character outside of `[a-zA-Z0-9_]` character range. If `${ENV_VAR_NAME}` syntax is used, the variable name stops at the first `}` character after `${` substring. E.g:
> | String | Variables | Variable Values | Expanded String | Note |
> | -------- | ------- |------- |------- |------- |
> | <pre>Welcome $USER!</pre> | <pre>USER</pre> | <pre>USER=John</pre> | <pre>Welcome John!</pre> ||
> | <pre>Welcome $USER!</pre> | <pre>USER</pre> | <pre>not set</pre> | <pre>Welcome $USER!</pre> | Unset variables are not expanded. |
> | <pre>Welcome $USER2</pre> | <pre>USER2</pre> | <pre>USER2=John</pre> | <pre>Welcome John!</pre> ||
> | <pre>Welcome ${USER}2!</pre> | <pre>USER</pre> | <pre>USER=John</pre> | <pre>Welcome John2!</pre> ||
> | <pre>Welcome $USER-2!</pre> | <pre>USER</pre> | <pre>USER=John</pre> | <pre>Welcome John-2!</pre> ||
> | <pre>Welcome ${USER-2}!</pre> | <pre>USER-2</pre> | <pre>USER-2=John</pre> | <pre>Welcome John!</pre> | `USER-2` is likely to be an invalid env variable name, but jpackage launcher is not validating names. |
>
> `$` character combination prevents variable expansion:
> | String | Variables | Variable Values | Expanded String |
> | -------- | ------- |------- |------- |
> | <pre>Hello \$A! Bye $B</pre> | B | <pre>B=John</pre> | <pre>Hello $A! Bye John</pre> |
> | <pre>Hello \${A}! Bye $B</pre> | B | <pre>B=John</pre> | <pre>Hello ${A}! Bye John</pre> |
>
> `\` character combination escapes ``:
> | String | Variables | Variable Values | Expanded String |
> | -------- | ------- |------- |------- |
> | <pre>Hello \\\$A! Bye $B</pre> | A, B | <pre>A=Ana</pre><pre>B=John</pre> | <pre>Hello \\Ana! Bye John</pre> |
>
> If `` character is not followed by another `` character or `$` character, it is interpreted as a regular character:
> | String | Expanded string |
> | -------- | ------- |
> |<pre>a\\b\\c</pre>|<pre>a\\b\\c</pre>|
>
>
> Expansion is non-recursive:
> | String | Variables | Variable Values | Expanded String | Note |
> | -------- | ------- |------- |------- |------- |
> | <pre>Hello $A!</pre> | A | <pre>A=$B</pre><pre>B=John</pre> | <pre>Hello $B</pre> | Variable "B" wi...
Alexey Semenyuk has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision:
Update tests and implementation to comply with the CSR (env var names are case-insesitive on Windows)
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/23923/files
- new: https://git.openjdk.org/jdk/pull/23923/files/01270d3c..2b22c14d
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=23923&range=09
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=23923&range=08-09
Stats: 48 lines in 1 file changed: 8 ins; 14 del; 26 mod
Patch: https://git.openjdk.org/jdk/pull/23923.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/23923/head:pull/23923
PR: https://git.openjdk.org/jdk/pull/23923
More information about the core-libs-dev
mailing list