grep option
[git-grep-footer.git] / git-grep-footer
index 2e42b4a49f576614b139b2f6104028c5b2ae3c00..c5d94400521c8bf56c06938762734ee68c8a28fd 100755 (executable)
@@ -13,6 +13,7 @@ GetOptions(\my %opt,
        'simplify|s:s',
        'ignore-case|i!',
        'fuzzy!',
        'simplify|s:s',
        'ignore-case|i!',
        'fuzzy!',
+       'grep|S=s',
        'min|min-count|unique|u:i',
        'max|max-count|show|n:i',
        'version|V'  => sub { Getopt::Long::VersionMessage() },
        'min|min-count|unique|u:i',
        'max|max-count|show|n:i',
        'version|V'  => sub { Getopt::Long::VersionMessage() },
@@ -75,6 +76,10 @@ while (readline) {
                                }
                        }
 
                                }
                        }
 
+                       if (defined $opt{grep}) {
+                               $_ ~~ qr/$opt{grep}/i or next LINE;
+                       }
+
                        given ($opt{simplify} // 'none') {
                                when (['email', 'authors']) {
                                        $header[1] =~ s{
                        given ($opt{simplify} // 'none') {
                                when (['email', 'authors']) {
                                        $header[1] =~ s{
@@ -125,7 +130,7 @@ while (readline) {
                        my $line = $_->[2] // join(': ', @$_);
                        $line =~ s/^/$hash / if defined $hash;
 
                        my $line = $_->[2] // join(': ', @$_);
                        $line =~ s/^/$hash / if defined $hash;
 
-                       if (defined $opt{min} or $opt{max}) {
+                       if (defined $opt{min} or $opt{max} or $opt{count}) {
                                my $counter = \$headercount{ $_->[0] }->{ $_->[1] // '' };
                                my $excess = $$counter++ - ($opt{min} // 0);
                                next if $excess >= ($opt{max} || 1);
                                my $counter = \$headercount{ $_->[0] }->{ $_->[1] // '' };
                                my $excess = $$counter++ - ($opt{min} // 0);
                                next if $excess >= ($opt{max} || 1);
@@ -200,6 +205,11 @@ Values will be hidden entirely, so only attribute names remain.
 
 =back
 
 
 =back
 
+=item --grep=<pattern>
+
+Only include lines matching the specified regular expression.
+Case insensitivity can be disabled by prepending C<(?-i)>.
+
 =item -u, --unique[=<threshold>]
 
 Each match is only shown once,
 =item -u, --unique[=<threshold>]
 
 Each match is only shown once,
@@ -211,6 +221,11 @@ The original line is given for each match,
 but simplifications still apply for duplicate determination.
 Additional samples are optionally given upto the given maximum.
 
 but simplifications still apply for duplicate determination.
 Additional samples are optionally given upto the given maximum.
 
+=item -c, --count
+
+Prefixes (unique) lines by the number of occurrences.
+Causes output to be buffered until all input has been read (obviously).
+
 =back
 
 =head1 AUTHOR
 =back
 
 =head1 AUTHOR