A filter rule that mixed positive and bare negation patterns under the
default ('some') predicate quantifier matched nearly every file in a PR.
Each pattern was compiled into its own picomatch matcher and combined
via Array.prototype.some, so a standalone '!**/*.md' (true for any
non-markdown file) flipped the whole rule into a near-universal match.
Group bare string patterns into a single matcher with gitignore-style
semantics: a file matches when it matches at least one positive pattern
and does not match any negation pattern. The 'every' quantifier path is
unchanged, since per-pattern matching under .every() already produces
correct subtractive semantics with negations. The '!(extglob)' single-
string form is preserved by detecting only '!' not followed by '('.
Apply the same gitignore-style grouping to status-tagged array patterns
so 'added: ["src/**", "!**/*.md"]' behaves correctly. Reject rules made
up entirely of negation patterns (no positive include) so the failure
is loud rather than a silent permanent no-match.
Closesdorny/paths-filter#260
* Detect commit hashes from merge_group event
* Apply suggestion from @masaru-iritani
Co-authored-by: Masaru Iritani <25241373+masaru-iritani@users.noreply.github.com>
* refactor: update PullRequest type usage in getChangedFilesFromApi and related functions
* Run `npm run pack`
---------
Co-authored-by: Sascha Bratton <sascha@brattonbratton.com>
git show-ref will return all branches where end segment matches the input. This cause issues when there are both 'someBranch' and 'somePrefix/someBranch' branches. This fix ensures the correct ref is returned by explicitly matching segments after common parts (e.g. refs/heads).
* Use micromatch instead of minimatch
micromatch claims to support full Bash 4.3 spec and it actually passes all the tests.
For example this fixes processing of '!(**/*.tsx|**/*.less)' pattern - needed by #45
* Update CHANGELOG.md
* Remove usage of --no-auto-gc option
This option is not supported in git versions < 2.23.
Older git versions might be used in self-hosted runners.
* Update CHANGELOG
* Avoid code repetition with exec() and output listeners
* Improve behavior for new branches and when it's running in ACT
* Detect parent commit only if needed
* Fix parent commit detection for initial commit
* Improve logging
* Improve current ref detection
* Fix issue when base is a already fetched tag
* Fix issue when base is a already fetched tag
* Update README
* Document usage with act
* Use `git log` to get changes in latest commit
* Disable other output for `git log`
* get short name from base ref + improve loggig
* update CHANGELOG
* Rework change detection via `git diff`
Previous implementation performed simple diff between two versions. New implementation fetches on demand more commits to have the merge base between two branches. Now it will detect only changes introduced by branch that was pushed, instead of mixing with changes introduced meanwhile on the base branch.