Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 98 lines (68 sloc) 1.431 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
package App::Ack::Plugin::Tar;

package App::Ack::Repository::Tar;

use Archive::Tar;

sub extensions_handled {
    return qw( .tar .gz .tgz .tar.gz );
}

sub new {
    my $class = shift;
    my $filename = shift;

    my $self = bless {
        filename => $filename,
    }, $class;

    my $tar = Archive::Tar->new( $filename );
    if ( !$tar ) {
        return;
    }

    $self->{tar} = $tar;
    $self->{files} = [$tar->get_files];

    return $self;
}

sub next_resource {
    my $self = shift;

    my $file = shift @{$self->{files}};

    return unless $file;

    my $tar = $self->{tar};
    my $res = App::Ack::Resource::Tar->new( $self->{filename}, $file->name, $file->get_content );

    return $res;
}

sub close {
}


package App::Ack::Resource::Tar;

sub new {
    my $class = shift;
    my $tarname = shift;
    my $filename = shift;
    my $content = shift;

    my $self = bless {
        tarname => $tarname,
        filename => $filename,
        lines => [split( /\n/, $content )],
        lineno => 0,
    }, $class;

    return $self;
}

sub is_binary {
    return;
}

sub name {
    my $self = shift;

    return $self->{filename};
}

sub needs_line_scan {
    1; # XXX Do actual looking
}

sub reset {
}

sub next_text {
    my $self = shift;

    $_ = shift @{$self->{lines}};
    if ( defined $_ ) {
        $. = $self->{lineno}++;
        return 1;
    }

    return 0;
}

sub close {
}

1;
Something went wrong with that request. Please try again.