# HG changeset patch # User Benoit Boissinot # Date 1159821337 -7200 # Node ID 394ac87f3b748fcb010d9bf91dd6249ca625900c # Parent 35d61e6531742c6fec245e01300a8c403a7f8baf [extendedchangelog] encode/decode function encode '\n', '\r' and '\0' diff --git a/mercurial/changelog.py b/mercurial/changelog.py --- a/mercurial/changelog.py +++ b/mercurial/changelog.py @@ -10,6 +10,23 @@ from i18n import gettext as _ from demandload import demandload demandload(globals(), "os time util") +def _string_escape(text): + """ + >>> d = {'nl': chr(10), 'bs': chr(92), 'cr': chr(13), 'nul': chr(0)} + >>> s = "ab%(nl)scd%(bs)s%(bs)sn%(nul)sab%(cr)scd%(bs)s%(nl)s" % d + >>> s + 'ab\\ncd\\\\\\\\n\\x00ab\\rcd\\\\\\n' + >>> res = _string_escape(s) + >>> s == _string_unescape(res) + True + """ + # subset of the string_escape codec + text = text.replace('\\', '\\\\').replace('\n', '\\n').replace('\r', '\\r') + return text.replace('\0', '\\0') + +def _string_unescape(text): + return text.decode('string_escape') + class changelog(revlog): def __init__(self, opener, defversion=REVLOGV0): revlog.__init__(self, opener, "00changelog.i", "00changelog.d", diff --git a/tests/test-doctest.py b/tests/test-doctest.py new file mode 100644 --- /dev/null +++ b/tests/test-doctest.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +# + +import doctest + +import mercurial.changelog +# test doctest from changelog + +doctest.testmod(mercurial.changelog) +