# NAME

Text::Gitignore - Match .gitignore patterns

# SYNOPSIS

   use Text::Gitignore qw(match_gitignore build_gitignore_matcher);

   my @matched_files = match_gitignore(['pattern1', 'pattern2/*'], @files);

   # Precompile patterns
   my $matcher = build_gitignore_matcher(['*.js']);

   if ($matcher->('foo.js')) {

       # Matched
   }

# DESCRIPTION

Text::Gitignore matches `.gitignore` patterns. It combines [Text::Glob](https://metacpan.org/pod/Text%3A%3AGlob) and
[File::FnMatch](https://metacpan.org/pod/File%3A%3AFnMatch) functionality with several `.gitignore`-specific tweaks.

# EXPORTED FUNCTIONS

## `match_gitignore`

   my @matched_files = match_gitignore(['pattern1', 'pattern2/*'], @files);

Returns matched paths (if any). Accepts a string (slurped file for example), or an array reference

## `build_gitignore_matcher`

   # Precompile patterns
   my $matcher = build_gitignore_matcher(['*.js']);

   if ($matcher->('foo.js')) {

       # Matched
   }

Returns a code reference. The produced function accepts a single file as a first parameter and returns true when it was
matched. In case no pattern is matched, it returns a false value with the following convention:

- if the no-match reason is because of a negated pattern, then a false but defined value is returned (e.g. `0`);
- otherwise, if the no-match reason is that no _direct_ pattern matched, then `undef` is returned.

The use of different false values is inspired to the `wantarray()` built-in function.

Example:

   my $matcher  = build_gitignore_matcher(['f*', '!foo*', 'foobar']);
   my $matched  = $matcher->('foobar');  # $matched set to true
   my $ignored  = $matcher->('bar');     # $ignored set to undef
   my $excluded = $matcher->('foolish'); # $excluded set to false but defined (e.g. 0)

# LICENSE

Originally developed for [https://kritika.io](https://kritika.io).

Copyright (C) Viacheslav Tykhanovskyi.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

# CREDITS

Flavio Poletti

Eric A. Zarko

# AUTHOR

Viacheslav Tykhanovskyi <[email protected]>