Savepoint section
=================

A savepoint pipeline section commits a savepoint every so often, which has a
side-effect of freeing up memory. The savepoint section blueprint name is
``collective.transmogrifier.sections.savepoint``.

A savepoint section takes an optional ``every`` option, which defaults to
1000; a savepoint is committed every ``every`` items passing through the pipe.
A savepoint section doesn't alter the items in any way:

>>> savepoint = """
... [transmogrifier]
... pipeline =
...     source
...     savepoint
...     
... [source]
... blueprint = collective.transmogrifier.sections.tests.rangesource
... size = 10
... 
... [savepoint]
... blueprint = collective.transmogrifier.sections.savepoint
... every = 3
... """
>>> registerConfig(u'collective.transmogrifier.sections.tests.savepoint',
...                savepoint)

We'll show savepoints being committed by overriding transaction.savepoint:

>>> import transaction
>>> original_savepoint = transaction.savepoint
>>> counter = [0]
>>> def test_savepoint(counter=counter, *args, **kw):
...     counter[0] += 1
>>> transaction.savepoint = test_savepoint
>>> transmogrifier(u'collective.transmogrifier.sections.tests.savepoint')
>>> transaction.savepoint = original_savepoint
>>> counter[0]
3
