head	1.1;
access;
symbols;
locks; strict;
comment	@# @;


1.1
date	2006.01.31.11.11.43;	author TWikiContributor;	state Exp;
branches;
next	;


desc
@new-topic
@


1.1
log
@buildrelease
@
text
@---+ Package =TWiki::Merge=

Support for 3-way merging of strings. Similar to Merge.pm, except that:
  a) it's considers the ancestor revision of the string, and
  b) it works. :-P


%TOC%

---++ StaticMethod *merge* <tt>($a,$b,$c,$arev,$brev,$crev,$sep,</tt>
                          $writeConflict, @@info )

Perform a merge of two versions (b and c) of the same text, using
HTML tags to mark conflicts. a is the common ancestor.

The granularity of the merge depends on the setting of $sep.
For example, if it is ="\\r?\\n"=, a line-by-line merge will be done.

Where conflicts exist, they are labeled using the provided revision
numbers. If a $writeConflict method is passed, then that's called
to override the built-in conflict formatting. Non-conflicting content
is not labeled.

Here's a little picture of a 3-way merge:
    
      a   <- ancestor
     / \
    b   c <- revisions
     \ /
      d   <- merged result, returned.

call it like this:
    
    my ( $ancestorMeta, $ancestorText ) =
        $store->readTopic( undef, $webName, $topic, $originalrev );
    $newText = TWiki::Merge3::merge(
        $ancestorText, $prevText, $newText,
        $originalrev, $rev, "new",
        '\r?\n' );


@
