Git::Repository::Log::Iterator - Split a git log stream into records


    use Git::Repository::Log::Iterator;

    # use a default Git::Repository context
    my $iter = Git::Repository::Log::Iterator->new('HEAD~10..');

    # or provide an existing instance
    my $iter = Git::Repository::Log::Iterator->new( $r, 'HEAD~10..' );

    # get the next log record
    while ( my $log = $iter->next ) {


Git::Repository::Log::Iterator initiates a git log command from a list of paramaters and parses its output to produce Git::Repository::Log objects represening each log item.



    my $iter = Git::Repository::Log::Iterator->new( @args );

Create a new git log stream from the parameter list in @args and return a iterator on it.

new() will happily accept any parameters, but note that Git::Repository::Log::Iterator expects the output to look like that of --pretty=raw, and so will force the the --pretty option (in case format.pretty is defined in the Git configuration). It will also forcibly remove colored output (using --color=never).

Extra output (like patches) will be stored in the extra parameter of the Git::Repository::Log object. Decorations will be lost.

When unsupported options are recognized in the parameter list, new() will croak() with a message advising to use run( 'log' => ... ) to parse the output yourself.

The object is really a blessed hash reference, with only two keys:


The Git::Repository::Command object running the actual git log command. It might not be defined in some cases (see below "new_from_fh" and "new_from_file").


The filehandle from which the output of git log is actually read. This is the only attribute needed to run the "next" method.


This constructor makes it possible to provide the filehandle directly.

The cmd key is not defined when using this constructor.


This constructor makes it possible to provide a filename that will be open()ed to produce a filehandle to read the log stream from.

The cmd key is not defined when using this constructor.


    my $log = $iter->next;

Return the next log item as a Git::Repository::Log object, or nothing if the stream has ended.


Copyright 2010-2016 Philippe Bruhat (BooK), all rights reserved.


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