NAME¶
Arch::DiffParser - parse file's diff and perform some manipulations
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;
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.
- parse diff_content
- Parse the diff_content and store its parsed data.
- parse_file diff_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.
- lines
- filename1
- filename2
- mtime1
- mtime2
- hunks
- changes
- 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.
BUGS¶
No support for newlines in source file names yet.
AUTHORS¶
Mikhael Goikhman (migo@homemail.com--Perl-GPL/arch-perl--devel).
SEE ALSO¶
For more information, see Text::Diff::Unified, Algorithm::Diff.