fix: find and source ~/.jq file on windows (fixes #3104) (#3114)

This commit is contained in:
Kirk McKelvey authored and GitHub committed 2024-08-24 08:44:08 +09:00
1 parent da2a0b970c
commit 6322b99252
4 files changed
+20 -6

No files matched your search

+2 -1
View File
@@ -3691,7 +3691,8 @@ sections:
For example, with `-L$HOME/.jq` a module `foo` can be found in For example, with `-L$HOME/.jq` a module `foo` can be found in
`$HOME/.jq/foo.jq` and `$HOME/.jq/foo/foo.jq`. `$HOME/.jq/foo.jq` and `$HOME/.jq/foo/foo.jq`.
If `$HOME/.jq` is a file, it is sourced into the main program. If `.jq` exists in the user's home directory, and is a file (not a
directory), it is automatically sourced into the main program.
entries: entries:
- title: "`import RelativePathString as NAME [<metadata>];`" - title: "`import RelativePathString as NAME [<metadata>];`"
Generated
+1 -1
View File
@@ -4109,7 +4109,7 @@ Consecutive components with the same name are not allowed to avoid ambiguities (
For example, with \fB\-L$HOME/\.jq\fR a module \fBfoo\fR can be found in \fB$HOME/\.jq/foo\.jq\fR and \fB$HOME/\.jq/foo/foo\.jq\fR\. For example, with \fB\-L$HOME/\.jq\fR a module \fBfoo\fR can be found in \fB$HOME/\.jq/foo\.jq\fR and \fB$HOME/\.jq/foo/foo\.jq\fR\.
. .
.P .P
If \fB$HOME/\.jq\fR is a file, it is sourced into the main program\. If \fB\.jq\fR exists in the user\'s home directory, and is a file (not a directory), it is automatically sourced into the main program\.
. .
.SS "import RelativePathString as NAME [<metadata>];" .SS "import RelativePathString as NAME [<metadata>];"
Imports a module found at the given path relative to a directory in a search path\. A \fB\.jq\fR suffix will be added to the relative path string\. The module\'s symbols are prefixed with \fBNAME::\fR\. Imports a module found at the given path relative to a directory in a search path\. A \fB\.jq\fR suffix will be added to the relative path string\. The module\'s symbols are prefixed with \fBNAME::\fR\.
+6 -4
View File
@@ -420,14 +420,16 @@ int load_program(jq_state *jq, struct locfile* src, block *out_block) {
return 1; return 1;
} }
char* home = getenv("HOME"); jv home = get_home();
if (home) { // silently ignore no $HOME if (jv_is_valid(home)) {
/* Import ~/.jq as a library named "" found in $HOME */ /* Import ~/.jq as a library named "" found in $HOME or %USERPROFILE% */
block import = gen_import_meta(gen_import("", NULL, 0), block import = gen_import_meta(gen_import("", NULL, 0),
gen_const(JV_OBJECT( gen_const(JV_OBJECT(
jv_string("optional"), jv_true(), jv_string("optional"), jv_true(),
jv_string("search"), jv_string(home)))); jv_string("search"), home)));
program = BLOCK(import, program); program = BLOCK(import, program);
} else { // silently ignore if home dir not determined
jv_free(home);
} }
nerrors = process_dependencies(jq, jq_get_jq_origin(jq), jq_get_prog_origin(jq), &program, &lib_state); nerrors = process_dependencies(jq, jq_get_jq_origin(jq), jq_get_prog_origin(jq), &program, &lib_state);
+11
View File
@@ -359,6 +359,17 @@ if [ "$(HOME="$mods/home1" $VALGRIND $Q $JQ -nr fg)" != foobar ]; then
exit 1 exit 1
fi fi
if $msys || $mingw; then
HOME_BAK=$HOME
unset HOME
if [ "$(USERPROFILE="$mods/home1" $VALGRIND $Q $JQ -nr foo)" != baz ]; then
echo "Bug #3104 regressed (sourcing %USERPROFILE%/.jq on Windows)" 1>&2
exit 1
fi
export HOME=$HOME_BAK
unset HOME_BAK
fi
if [ $(HOME="$mods/home1" $VALGRIND $Q $JQ --debug-dump-disasm -n fg | grep '^[a-z]' | wc -l) -ne 3 ]; then if [ $(HOME="$mods/home1" $VALGRIND $Q $JQ --debug-dump-disasm -n fg | grep '^[a-z]' | wc -l) -ne 3 ]; then
echo "Binding too many defs into program" 1>&2 echo "Binding too many defs into program" 1>&2
exit 1 exit 1