txdelta_sanity   [plain text]

General Guide to Textdeltas.... basic use of interfaces.

(Yes, the interfaces are a bit simplified.  :)  )

To SEND textdeltas
 1. txdelta_stream = svn_txdelta (source_stream, target_stream);

 2. Get window handler to do something with delta.  If using an
    "editor" to transmit information:

      window_consumer_func = editor->apply_textdelta (file_baton);

    If you want raw vcdiff data for embedding in XML or HTTP

      window_consumer_func = svn_txdelta_to_vcdiff (txdelta_stream);

 3. Loop until there are no more windows:

      txdelta_window = svn_txdelta_next_window (txdelta_stream);
      window_consumer_func (txdelta_window);
      svn_txdelta_free_window (txdelta_window);

    Be sure to call window_consumer_func with a NULL window when there
    are no more windows to consume.

 4. svn_txdelta_free (txdelta_stream);

To RECEIVE textdeltas
If implementing "apply_textdelta" within an editor:

 1. Get window handler to apply the text delta:

      apply_handler = svn_txdelta_apply (read_func, write_func)

    where read_func reads from the delta source and write_func writes
    to the target.

 2. If you don't need to do any special cleanup, you can return
    apply_handler to the caller directly.  If you do need to do
    cleanup, write your own window_consumer_func which invokes
    apply_handler.  In this case, your window handler will receive a
    NULL window argument when there are no more windows to consume,
    and you can do cleanup then.  Be sure to pass a NULL window to
    apply_handler when that happens so that it can clean up its own

If you want to receive raw vcdiff data from XML or HTTP transactions,
get or write a window consumer function and call:

      vcdiff_parser = svn_make_vcdiff_parser (window_consumer_func);

      Loop over vcdiff data:
          svn_vcdiff_parse (vcdiff_parser, data);