fix: pass malformed glob patterns through literally#180
Open
bartlomieju wants to merge 1 commit into
Open
Conversation
Bash treats malformed glob patterns the same as patterns that match nothing: it passes them through literally unless `failglob` is set. Previously the `Err(...)` arm of the glob compile step always errored, which broke task commands like `deno run --allow-write=**/*.txt ...` where the `**` does not form its own path component. The empty-match arm already does the right thing; this just mirrors that logic into the pattern-error arm.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A task command like
deno run --allow-write=**/*.txt test.tsfailed withglob: no matches found ... Pattern syntax error near position N: recursive wildcards must form a single path componentbecause the**does not formits own path component once joined to the
--allow-write=prefix. The globcrate rejects the pattern at compile time, and the
Errarm of the match inevaluate_word_texterrored unconditionally — it did not consultfailglob/nullglobthe way the empty-match arm does.Bash's behavior is to pass a malformed pattern through literally unless
failglobis explicitly set. This change mirrors the empty-match branchinto the pattern-error branch so the default is literal pass-through, with
failglobandnullglobstill respected. Includes regression tests forboth flavors from the issue (the valid-but-zero-match form and the
malformed-pattern form), plus a
failglob-on case confirming the newbranch still errors when requested.
Fixes denoland/deno#27238