-
Deprecated
follow_symlinks:
, it's inaccurately named and awkward. -
Plus lots of refactoring that should have no effect on behaviour
-
Some performance regression due to the deprecation logic. we'll improve more than we lost after the deprecations are gone entirely.
- Add fuzz tests, fix a couple more edge cases it revealed:
~not_a_user
will be considered literal rather than raising an error,~a_user
will continue to be expanded to the home directory ofa_user
when used in anargv_rules:
orallowed?
- an
include_rule:
with a trailing/
was raising a FrozenError in some circumstances.
- Remove unnecessary backport code that was leftover when support for 2.4 was dropped
- Tiny performance improvements from rubocop-performance's suggestions
- fix handling of backward character classes
[z-a]
previously this raised a RegexpError, but git just considered it to be identical to[z]
, now we match the git behaviour (but why would you ever do this?, i only found it because of the fuzz spec in theleftovers
gem)
- allow overriding
exists:
inallowed?
- allow setting
include_directories: true
inallowed?
- subsequent calls to
allowed?
with the same path but differentdirectory:
orcontent:
arguments won't potentially mess up the cache - slight performance improvements of the shebang rule matcher loading the first line
- drop support for ruby 2.4
- add ruby 3.1 to the test matrix
- respect GIT_CONFIG_SYSTEM, GIT_CONFIG_NOSYSTEM and GIT_CONFIG_GLOBAL env vars the same way git does
- make the tests more resilient to whatever global config is going on.
- Entirely rewrite the way that git config files are read. previously it was just a regexp. now we actually parse git config files according to the same rules as git.
- Add ruby 3 to the test matrix
- Updated methods with multiple
_
arguments to have different names to make sorbet happy
- Updated dependencies to allow running on ruby 3.0.0.preview1
- fixed a handful of character class edge cases to match git behavior
- mostly ranges with - or / as one end of the range
- major refactoring of the regexp builder that shouldn't have any behaviour implications but should make development easier (e.g. seeing those unhandled edge cases).
- improved speed of repos with many sub-gitignore files
- mentioned submodules & sparse checkout in the readme as yet another thing git does that this project doesn't because submodule details are hidden in the git index.
- significant performance improvements ~50% faster
- add
FastIgnore#to_proc
for no good reason
- Attempt to improve documentation structure
- Remove
gitignore: true
raisingErrno::ENOENT
if root:/.gitignore didn't exist. I can't think of a use. Nowgitignore: true
is just the default behaviour. - Don't ignore
.git
ifgitignore: false
.
- Reads all relevant git config files when finding a global .gitignore
- Reads all relevant gitignore files (nested .gitignore files, global .gitignore referred to in .gitconfig, and .git/info/exclude)
- major performance improvement (use regexp rather than fnmatch)
- optionally pass directory: and content: into allowed? if these are already loaded.
- add FastIgnore#=== as an alias for FastIgnore#allowed? so that FastIgnore objects can be used for case statements.
- Fix shebangs in non-pwd-root situations
- Add option to follow symlinks (turns out i needed it)
- performance improvements
- patterns with middle slashes are anchored to the root (like the gitignore documentation, now that it more clearly explains)
- new shebang pattern (#!:), the previous version was extremely janky.
- now you can ignore by shebang pattern
- symlinks aren't followed when deciding if a path is a directory or not (this now matches git)
- documentation improvements
- root can be given as a path relative to PWD
- includes with 'a/**/d' now matches a/b/c/d properly
- speed improvements, which may break things (Specifically, only using relative paths internally, is about 30% faster (depending on root depth))
- using a
ignore_files:
orinclude_files:
that are outside theroot: (default $PWD)
will now raise an error. - remove deprecated
gitignore:
a path (e.g.gitignore: '/path/to/gitignore'
). please usegitignore: false, ignore_files: '/path/to/gitignore'
instead.
- fix
ignore_rules
not matching directories when usinginclude_shebangs:
- fix
include_rules
not matching filenames with no extension when usinginclude_shebangs:
include_shebangs:
can be given non array value
- drop support for ruby 2.3. My plan is to only support supported ruby versions
- add coverage to the pipeline. removed some methods, added some tests, and now we have 100% test coverage
- deprecate using
gitignore: '/path/to/gitignore'
. please usegitignore: false, ignore_files: '/path/to/gitignore'
instead.
- add
include_shebangs:
which filters by shebangs
- nicer argv handling
- add
argv_rules:
option, which resolves paths and considers everything that doesn't start with a*
to start with a/
- add
- combine the different includes methods and files using AND
- slightly more realistic version comparison just in case someone releases ruby 2.10
- can be run with --disable-gems
.allowed?
now more exactly matches.each
, it returns false for directories and unreadable files.
- performance improvements
- restore
.allowed?
. now i have tests for it. oops
- remove deprecated
:rules
and:files
arguments - ! is now evaluated in sequence for include_rules
- it's a big refactor, sorry if i broke something
- some performance improvements
- oops i did a regexp wrong
- include_rules support
- to make room for this,
:rules
and:files
keyword arguments are deprecated. Please use:ignore_rules
and:ignore_files
instead.
- some performance improvements. maybe
- handle soft links to nowhere
- upgrade rubocop version requirement to avoid github security warning
- Supports 2.3 - 2.6
- Considers rules relative to the location of the gitignore file instead of just relative to PWD
- Can override the path to the gitignore file, using
FastIgnore.new(gitignore: path)
- Mention FastIgnore#allowed? in the documentation.
Initial Release