logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Arch::DiffParser - parse file's diff and perform some manipulations

Authors

       Mikhael Goikhman (migo@homemail.com--Perl-GPL/arch-perl--devel).

Bugs

       No support for newlines in source file names yet.

Description

       This class provides a limited functionality to parse a single file diff in unified format. Multiple diffs
       may be parsed sequentially. The parsed data is stored for the last diff, and is replaced on the following
       parse.

Methods

       The following class methods are available:

       new, parse, parse_file, content, lines, filename1, filename2, mtime1, mtime2, hunks, changes.

       new Construct the "Arch::DiffParser" instanse.

       parsediff_content
           Parse the diff_content and store its parsed data.

       parse_filediff_filename
           Like parse, but read the diff_content from diff_filename.

       diff_data
           Return  hashref containing certain parsed data. Die if called before any parse methods. The keys are:
           "lines", "filename1", "filename2", "mtime1", "mtime2", "hunks", "changes".

           The value of "hunks" and "changes" is  arrayref  of  arrayrefs  with  5  elements:  [  line-number-1,
           num-lines-1, line-number-2, num-lines-2, "lines"-index ].

           A "hunk" describes a set of lines containing some combination of unmodified, deleted and added lines,
           a  "change"  describes  an  inter-hunk atom that only contains zero or more deleted lines and zero or
           more added lines.

       linesfilename1filename2mtime1mtime2hunkschanges
           These methods are just shortcuts for diff_data->{method}.

       content [%args]
           Return content of the last diff.

           %args keys are "fileroot1" and "fileroot2"; if given, these will replace the subdirs "orig" and "mod"
           that arch usually uses in the filepaths.

       markup_content [%args]
           Like    content,    but    every    non-context    line    is    enclosed    into    markup     <span
           class="patch_name">line</span>,  where  name  is one of "orig" (filename1), "mod" (filename2), "line"
           (hunk linenums), "add" (added), del (deleted).

           Not implemented yet.

Name

       Arch::DiffParser - parse file's diff and perform some manipulations

See Also

       For more information, see Text::Diff::Unified, Algorithm::Diff.

perl v5.20.2                                       2005-03-09                              Arch::DiffParser(3pm)

Synopsis

           use Arch::DiffParser;
           my $dp = Arch::DiffParser->new;

           # usable for "annotate" functionality
           my $changes = $dp->parse_file("f.diff")->changes;

           $dp->parse($diff_content);
           $dp->parse("--- f1.c\t2005-02-26\n+++ f2.c\t2005-02-28\n...");
           # prints "f1.c, f2.c"
           printf "%s, %s\n", $dp->filename1, $dp->filename2;

           # enclose lines in <span class="patch_{mod,orig,line,add,del}">
           my $html = $dp->markup_content;

See Also