Algorithm-Merge
view release on metacpan or search on metacpan
package Algorithm::Merge;
use Algorithm::Diff ();
use Carp;
use strict;
use Data::Dumper;
use vars qw(@EXPORT_OK @ISA $VERSION $REVISION);
$VERSION = '0.08';
$REVISION = (qw$Revision: 1.11 $)[-1];
@EXPORT_OK = qw(diff3 merge traverse_sequences3);
@ISA = qw(Exporter);
my $conflictCallback = $callbacks -> {'CONFLICT'} || sub ($$) { (
q{<!-- ------ START CONFLICT ------ -->},
(@{$_[0]}),
q{<!-- ---------------------------- -->},
(@{$_[1]}),
q{<!-- ------ END CONFLICT ------ -->},
) };
my $diff = diff3($pivot, $doca, $docb, $keyGen, @_);
# print Data::Dumper -> Dump([$diff]), "\n";
my @ret;
my @conflict = ( [], [] );
foreach my $h (@{$diff}) {
my $i = 0;
#print "op: ", $h -> [0];
if($h -> [0] eq 'c') { # conflict
push @{$conflict[0]}, $h -> [2] if defined $h -> [2];
__END__
#
# For testing:
#
sub main::diag {
warn join("", @_) , "\n";
}
print join(" ", merge(
#print Data::Dumper -> Dump([
# merge(
# #[qw(a b c d h i j)], # ancestor
# #[qw(a b c d f h i j)], # left
# #[qw(a b c e g )], # right
[qw(0 1 2 3 4 7 9 b)],
[qw(0 6 8 a b)],
[qw(0 1 2 3 5 8 a b)],
##
{
CONFLICT => sub ($$) { (
local $SIG{__WARN__} = sub { };
$out = Algorithm::Merge::diff3(@{$t}[0, 1, 2]);
};
if($@ && $@ =~ m{^$error_message}o) {
ok 1;
}
else {
#my $sout = join(";", map { join(":", map { defined($_) ? "[$_]" : "" } @{$_}) } @{$out});
#my $sexp = join(";", map { join(":", map { defined($_) ? "[$_]" : "" } @{$_}) } @{$t->[3]});
# warn Data::Dumper -> Dump([$out, $t->[3]], [qw(Out Expected Diff)]); # if $ENV{DEBUG} && $sout ne $sexp;
#ok $sout eq $sexp;
is_deeply($out, $t->[3]);
}
}
}
exit 0;
( run in 0.720 second using v1.01-cache-2.11-cpan-a5abf4f5562 )