blob: b79d3669b7142c27cda3751a218dabc9780b19a0 [file] [log] [blame]
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
transactions:
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
stuff.
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);